diff -u vdr-1.4.5/channels.h vdr-1.4.5-kw-004/channels.h
--- vdr-1.4.5/channels.h	2006-05-28 17:03:56.000000000 +0200
+++ vdr-1.4.5-kw-004/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.5/config.c vdr-1.4.5-kw-004/config.c
--- vdr-1.4.5/config.c	2006-07-22 13:57:51.000000000 +0200
+++ vdr-1.4.5-kw-004/config.c	2006-12-18 20:46:45.000000000 +0100
@@ -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;
+  ShowProgressBar = 0;
+  MenuCmdPosition = 0;
+  ShowRecNew = 1;
 }
 
 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, "ShowProgressBar"))     ShowProgressBar    = atoi(Value);
+  else if (!strcasecmp(Name, "MenuCmdPosition"))     MenuCmdPosition    = atoi(Value);
+  else if (!strcasecmp(Name, "ShowRecNew"))          ShowRecNew         = 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("ShowProgressBar",    ShowProgressBar);
+  Store("MenuCmdPosition",    MenuCmdPosition);
+  Store("ShowRecNew",         ShowRecNew);
 
   Sort();
 
diff -u vdr-1.4.5/config.h vdr-1.4.5-kw-004/config.h
--- vdr-1.4.5/config.h	2007-01-07 14:45:19.000000000 +0100
+++ vdr-1.4.5-kw-004/config.h	2007-01-21 19:57:55.000000000 +0100
@@ -35,6 +35,10 @@
 // plugins to work with newer versions of the core VDR as long as no
 // VDR header files have changed.
 
+
+#define KWPATCHLEVEL 4
+#define LIEMIKUUTIO  113           
+
 #define MAXPRIORITY 99
 #define MAXLIFETIME 99
 
@@ -201,6 +205,7 @@
   int OSDLanguage;
   char OSDSkin[MaxSkinName];
   char OSDTheme[MaxThemeName];
+  int WarEagleIcons;
   int PrimaryDVB;
   int ShowInfoOnChSwitch;
   int TimeoutRequChInfo;
@@ -218,6 +223,7 @@
   int TimeSource;
   int TimeTransponder;
   int MarginStart, MarginStop;
+  int JumpSeconds, JumpSecondsRepeat;
   int AudioLanguages[I18nNumLanguages + 1];
   int EPGLanguages[I18nNumLanguages + 1];
   int EPGScanTimeout;
@@ -252,6 +258,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.5/cutter.c vdr-1.4.5-kw-004/cutter.c
--- vdr-1.4.5/cutter.c	2006-07-30 12:22:08.000000000 +0200
+++ vdr-1.4.5-kw-004/cutter.c	2006-12-18 22:51:22.000000000 +0100
@@ -190,6 +190,12 @@
      error = false;
      ended = false;
      cRecording Recording(FileName);
+     //+cuttime-patch begin    
+     cMarks FromMarks;    
+     FromMarks.Load(FileName); 
+     cMark *First=FromMarks.First();   
+     if (First) Recording.SetStartTime(Recording.start+((First->position/FRAMESPERSEC+30)/60)*60);  
+     //+cuttime-patch end
      const char *evn = Recording.PrefixFileName('%');
      if (evn && RemoveVideoFile(evn) && MakeDirs(evn, true)) {
         // XXX this can be removed once RenameVideoFile() follows symlinks (see videodir.c)
diff -u vdr-1.4.5/eit.c vdr-1.4.5-kw-004/eit.c
--- vdr-1.4.5/eit.c	2006-10-09 18:14:36.000000000 +0200
+++ vdr-1.4.5-kw-004/eit.c	2007-01-21 18:30:19.000000000 +0100
@@ -30,6 +30,7 @@
   if (!CheckCRCAndParse())
      return;
 
+
   tChannelID channelID(Source, getOriginalNetworkId(), getTransportStreamId(), getServiceId());
   cChannel *channel = Channels.GetByChannelID(channelID, true);
   if (!channel)
@@ -37,6 +38,22 @@
 
   cSchedule *pSchedule = (cSchedule *)Schedules->GetSchedule(channel, true);
 
+//+w-epgfix-mod begin  
+  static int offset, lastSource, lastONID, lastTSID, lastSID;  //+w-epgfix-mod
+  if (!pSchedule ||        
+      lastSource != Source ||   
+      lastONID != getOriginalNetworkId() ||    
+      lastTSID != getTransportStreamId() ||    
+      lastSID != getServiceId())    
+    offset = 0;    
+
+  lastSource = Source;                 
+  lastONID = getOriginalNetworkId();    
+  lastTSID = getTransportStreamId();
+  lastSID = getServiceId();             
+//+w-epgfix-mod end
+
+
   bool Empty = true;
   bool Modified = false;
   bool HasExternalData = false;
@@ -55,7 +72,7 @@
       SegmentEnd = SiEitEvent.getStartTime() + SiEitEvent.getDuration();
       cEvent *newEvent = NULL;
       cEvent *rEvent = NULL;
-      cEvent *pEvent = (cEvent *)pSchedule->GetEvent(SiEitEvent.getEventId(), SiEitEvent.getStartTime());
+      cEvent *pEvent = (cEvent *)pSchedule->GetEvent(SiEitEvent.getEventId(), SiEitEvent.getStartTime()+offset, SiEitEvent.getDuration());      //mod w-epgfix-mod
       if (!pEvent) {
          if (OnlyRunningStatus)
             continue;
@@ -68,6 +85,18 @@
       else {
          // We have found an existing event, either through its event ID or its start time.
          pEvent->SetSeen();
+         //-----------------------------------------------------------------------------------------------------       //+w-epgfix-mod
+         // w_epgfix: some stations have different event IDs and/or StartTime and/or Duration for the same event.      //+w-epgfix-mod
+         // therefore we try to find them by StartTime + offset, or if this fails by event ID                           //+w-epgfix-mod
+         // If the event is shifted by some minutes, all following events on the same Schedule will be shifted            //+w-epgfix-mod
+         // or will have different duration                                                                                //+w-epgfix-mod
+         if (Tid <= pEvent->TableID() && pEvent->TableID() != 0x00) {                                                           //+w-epgfix-mod
+            offset = SiEitEvent.getStartTime() + SiEitEvent.getDuration() - pEvent->EndTime();                              //+w-epgfix-mod
+         //   pEvent->SetEventID(SiEitEvent.getEventId());                                                                  //+w-epgfix-mod
+            if (offset > 900 || offset < -900)                                                                               //+w-epgfix-mod
+              offset = 0; //do not allow more than 15min StartTime offset                                                    //+w-epgfix-mod
+            }                                                                                                                //+w-epgfix-mod
+         //-----------------------------------------------------------------------------------------------------               //+w-epgfix-mod
          // If the existing event has a zero table ID it was defined externally and shall
          // not be overwritten.
          if (pEvent->TableID() == 0x00) {
diff -u vdr-1.4.5/epg.c vdr-1.4.5-kw-004/epg.c
--- vdr-1.4.5/epg.c	2006-10-28 11:12:42.000000000 +0200
+++ vdr-1.4.5-kw-004/epg.c	2007-01-21 18:30:19.000000000 +0100
@@ -324,7 +324,7 @@
                           unsigned int Version = 0xFF; // actual value is ignored
                           int n = sscanf(t, "%u %ld %d %X %X", &EventID, &StartTime, &Duration, &TableID, &Version);
                           if (n >= 3 && n <= 5) {
-                             Event = (cEvent *)Schedule->GetEvent(EventID, StartTime);
+                             Event = (cEvent *)Schedule->GetEvent(EventID, StartTime, Duration);       //mod w-epgfix-mod
                              cEvent *newEvent = NULL;
                              if (Event)
                                 DELETENULL(Event->components);
@@ -715,14 +715,41 @@
   return p;
 }
 
-const cEvent *cSchedule::GetEvent(tEventID EventID, time_t StartTime) const
+const cEvent *cSchedule::GetEvent(tEventID EventID, time_t StartTime, int Duration) const       //mod w-epgfix-mod
 {
   // Returns the event info with the given StartTime or, if no actual StartTime
   // is given, the one with the given EventID.
-  if (StartTime > 0) // 'StartTime < 0' is apparently used with NVOD channels
-     return eventsHashStartTime.Get(StartTime);
-  else
-     return eventsHashID.Get(EventID);
+  //-------------------- w_epgfix.patch ----------------------       //+w-epgfix-mod
+  // Returns either the event info with                                   //+w-epgfix-mod
+  // a) the one with the given StartTime be found,                        //+w-epgfix-mod
+  // b) the Event found -10/+15min around StartTime and a simmilar Duration //+w-epgfix-mod
+  // c) the given EventID or, if that one can't                            //+w-epgfix-mod
+  // d) NULL if none of them found)                                       //+w-epgfix-mod
+  if (StartTime > 0) { // 'StartTime < 0' is apparently used with NVOD channels   //mod w-epgfix-mod
+     cEvent *p = eventsHashStartTime.Get(StartTime);                    //+w-epgfix-mod
+
+     if (p) {                                                                 //+w-epgfix-mod
+        return p;                                                             //+w-epgfix-mod
+     // given offset was wrong; let's search a little bit around;             //+w-epgfix-mod
+     } else {                                                                 //+w-epgfix-mod
+        for (p = events.First(); p; p = events.Next(p)) {                     //+w-epgfix-mod
+           if (p &&                                                           //+w-epgfix-mod
+                (p->StartTime() >= StartTime - 10*60 &&                       //+w-epgfix-mod
+                 p->StartTime() <= StartTime + 15*60) &&                      //+w-epgfix-mod
+                (Duration == 0 ||                                             //+w-epgfix-mod
+                  (Duration >= (p->Duration() - (p->Duration()/ 5) - 1) &&    //+w-epgfix-mod
+                   Duration <= (p->Duration() + (p->Duration()/ 5) + 1))      //+w-epgfix-mod
+                ) )                                                           //+w-epgfix-mod
+              return p;                                                       //+w-epgfix-mod
+        }                                                                     //+w-epgfix-mod
+     }                                                                        //+w-epgfix-mod
+                                                                              //+w-epgfix-mod
+//     return eventsHashStartTime.Get(StartTime);                             //+w-epgfix-mod
+  }                                                                           //+w-epgfix-mod
+//  else                                                                      //+w-epgfix-mod
+/* If the program gets here, no event has been found by its StartTime.        //+w-epgfix-mod
+   So let's try it by EventID. */                                             //+w-epgfix-mod
+  return eventsHashID.Get(EventID);                                           //+w-epgfix-mod
 }
 
 const cEvent *cSchedule::GetEventAround(time_t Time) const
diff -u vdr-1.4.5/epg.h vdr-1.4.5-kw-004/epg.h
--- vdr-1.4.5/epg.h	2006-10-07 15:47:19.000000000 +0200
+++ vdr-1.4.5-kw-004/epg.h	2007-01-21 18:30:19.000000000 +0100
@@ -144,7 +144,7 @@
   const cList<cEvent> *Events(void) const { return &events; }
   const cEvent *GetPresentEvent(void) const;
   const cEvent *GetFollowingEvent(void) const;
-  const cEvent *GetEvent(tEventID EventID, time_t StartTime = 0) const;
+  const cEvent *GetEvent(tEventID EventID, time_t StartTime = 0, int Duration = 0) const; // mod w-epgfix-mod
   const cEvent *GetEventAround(time_t Time) const;
   void Dump(FILE *f, const char *Prefix = "", eDumpMode DumpMode = dmAll, time_t AtTime = 0) const;
   static bool Read(FILE *f, cSchedules *Schedules);
diff -u vdr-1.4.5/fontosd-iso8859-15.c vdr-1.4.5-kw-004/fontosd-iso8859-15.c
--- vdr-1.4.5/fontosd-iso8859-15.c	2006-02-05 14:49:48.000000000 +0100
+++ vdr-1.4.5-kw-004/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.5/fontsml-iso8859-15.c vdr-1.4.5-kw-004/fontsml-iso8859-15.c
--- vdr-1.4.5/fontsml-iso8859-15.c	2006-02-05 14:50:13.000000000 +0100
+++ vdr-1.4.5-kw-004/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.5/i18n.c vdr-1.4.5-kw-004/i18n.c
--- vdr-1.4.5/i18n.c	2006-10-14 11:26:41.000000000 +0200
+++ vdr-1.4.5-kw-004/i18n.c	2007-01-21 18:30:19.000000000 +0100
@@ -174,7 +174,7 @@
     "VDR",
   },
   { "Schedule",
-    "Programm",
+    "Programmvorschau",
     "Program",
     "Programmi",
     "Gids",
@@ -350,7 +350,7 @@
     "Pøíkazy nahrávání",
   },
   { "Edit channel",
-    "Kanal editieren",
+    "Kanal ändern",
     "Uredi kanal",
     "Modifica canale",
     "Kanaal aanpassen",
@@ -372,7 +372,7 @@
     "Editace kanálu",
   },
   { "Edit timer",
-    "Timer editieren",
+    "Timer ändern",
     "Uredi termin",
     "Modifica timer",
     "Timer veranderen",
@@ -571,7 +571,7 @@
   },
   // Button texts (should not be more than 10 characters!):
   { "Button$Edit",
-    "Editieren",
+    "Ändern",
     "Uredi",
     "Modifica",
     "Verander",
@@ -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",
@@ -6126,6 +6215,360 @@
     "Ingen titel",
     "Bez názvu",
   },
+  
+  { "Rename recording",
+    "Aufzeichnung umbenennen",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "Renommer l'enregistrement",
+    "",//TODO
+    "Nimeä tallenne",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "¿ÕàÕØÜÕÝÞÒÐâì ×ÐßØáì",
+    "",//TODO
+    "Ümbernimetamine",
+    "",//TODO
+    "",//TODO
+  },
+  { "Setup.OSD$Main menu command position",
+    "Befehle Position im Hauptmenü",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "Position des commandes dans le menu",
+    "",//TODO
+    "Komentojen sijainti päävalikossa",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "ÀÐ×ÜÕéÕÝØÕ ÚÞÜÐÝÔ Ò ÓÛÐÒÝÞÜ ÜÕÝî",
+    "",//TODO
+    "Käsu asukoht peamenüüs",
+    "",//TODO
+    "",//TODO
+  },
+  { "Setup.EPG$Show progress bar",
+    "Zeitbalken anzeigen",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "Montrer la barre de progression",
+    "",//TODO
+    "Näytä aikajana",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "Edenemisriba",
+    "",//TODO
+    "",//TODO
+  },
+  { "Setup.Recording$Show date",
+    "Aufnahmedatum anzeigen",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "Montrer la date d'enregistrement",
+    "",//TODO
+    "Näytä tallenteen päiväys",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "¿ÞÚÐ×ëÒÐâì ÔÐâã",
+    "",//TODO
+    "Salvestuse kuupäev",
+    "",//TODO
+    "",//TODO
+  },
+  { "Setup.Recording$Show time",
+    "AufnahmeZeit anzeigen",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "Montrer l'heure d'enregistrement",
+    "",//TODO
+    "Näytä tallenteen ajankohta",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "¿ÞÚÐ×ëÒÐâì ÒàÕÜï ×ÐßØáØ",
+    "",//TODO
+    "Salvestuse kellaaeg",
+    "",//TODO
+    "",//TODO
+  },
+  { "Setup.Recording$Show length",
+    "Länge der Aufnahme anzeigen",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "Monter la longueur de l'enregistrement",
+    "",//TODO
+    "Näytä tallenteen kesto",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "¿ÞÚÐ×ëÒÐâì ßàÞÔÞÛÖØâÕÛìÝÞáâì ×ÐßØáØ",
+    "",//TODO
+    "Salvestuse pikkus",
+    "",//TODO
+    "",//TODO
+  },
+  { "Path",
+    "Pfad",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "Dossiers",
+    "",//TODO
+    "Polku",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "Teekond",
+    "",//TODO
+    "",//TODO
+  },
+  { "Date",
+    "Datum",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "Päiväys",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+  },
+  { "Length",
+    "Länge",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "Pituus",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+  },
+  { "Size",
+    "Größe",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "Koko",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+  },
+  { "Delete marks information?",
+    "Marks löschen?",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "Poista tallenteen merkinnät?",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+  },
+  { "Delete resume information?",
+    "Resume löschen?",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "Poista tallenteen paluutiedot?",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+  },
+  { "Rename$Up",
+    "Höher",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "Haut",
+    "",//TODO
+    "Ylemmäs",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "Üles",
+    "",//TODO
+    "",//TODO
+  },
+  { "Rename$Down",
+    "Tiefer",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "Bas",
+    "",//TODO
+    "Alemmas",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "Alla",
+    "",//TODO
+    "",//TODO
+  },
+  { "Rename$Next",
+    "Nächster",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "Suivant",
+    "",//TODO
+    "Seuraava",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "Järgmine",
+    "",//TODO
+    "",//TODO
+  },
+  { "Rename$Previous",
+    "Vorheriger",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "Précédent",
+    "",//TODO
+    "Edellinen",
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "",//TODO
+    "Eelmine",
+    "",//TODO
+    "",//TODO
+  },
+  
   { NULL }
   };
 
diff -u vdr-1.4.5/iconpatch.h vdr-1.4.5-kw-004/iconpatch.h
--- vdr-1.4.5/iconpatch.h	2007-01-21 21:40:16.000000000 +0100
+++ vdr-1.4.5-kw-004/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.5/libsi und vdr-1.4.5-kw-004/libsi.
diff -u vdr-1.4.5/menu.c vdr-1.4.5-kw-004/menu.c
--- vdr-1.4.5/menu.c	2006-12-02 12:12:02.000000000 +0100
+++ vdr-1.4.5-kw-004/menu.c	2007-01-21 21:01:27.000000000 +0100
@@ -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);   // kw-cfp mod
   eOSState Edit(void);
   eOSState New(void);
   eOSState Delete(void);
@@ -395,6 +426,12 @@
   virtual eOSState ProcessKey(eKeys Key);
   };
 
+int                inSubMenu = 0;               // kw-cfp
+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 +451,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 +502,60 @@
   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) {                                                                            
+     inSubMenu = 1;                   // kw-cfp mod
+     Skins.Message(mtStatus, "0=Sort -- 1=TV - 2=Radio - 3=free to air - 9=unfiltered -- 8=switch"); // kw-cfp
+     }                                                                                                   
+  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)   // kw-cfp mod
 {
   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;   // kw-cfp mod
 }
 
 eOSState cMenuChannels::Edit(void)
@@ -554,8 +633,10 @@
      }
 }
 
+
 eOSState cMenuChannels::ProcessKey(eKeys Key)
 {
+
   eOSState state = cOsdMenu::ProcessKey(Key);
 
   switch (state) {
@@ -567,21 +648,71 @@
             }
          }
          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 ... k9:
+                             return Number(Key);
+               case kOk:     return Switch(osEnd);      // kw-cfp mod
+               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 +904,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 +1126,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 +1140,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 +1149,15 @@
   bool Update(bool Force = false);
   };
 
+
+
+//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 +1168,7 @@
   timerMatch = tmNone;
   Update(true);
 }
-
+  
 int cMenuScheduleItem::Compare(const cListObject &ListObject) const
 {
   cMenuScheduleItem *p = (cMenuScheduleItem *)&ListObject;
@@ -1036,29 +1179,60 @@
      r = event->StartTime() - p->event->StartTime();
   return r;
 }
-
+ 
 static char *TimerMatchChars = " tT";
+ 
+const char * const cMenuScheduleItem::ProgressBar[7] =
+{
+  "[      ]",
+  "[|     ]",
+  "[||    ]",
+  "[|||   ]",
+  "[||||  ]",
+  "[||||| ]",
+  "[||||||]"
+};
+
 
 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 +2014,190 @@
   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:
+         // this line is the original vdr code:
+         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];
+  cOsdItem *marksItem, *resumeItem; 
+  bool isResume, isMarks;           
+  cRecording *recording;
+public:
+  cMenuRenameRecording(cRecording *Recording);
+  virtual eOSState ProcessKey(eKeys Key);
+};
+
+cMenuRenameRecording::cMenuRenameRecording(cRecording *Recording)
+:cOsdMenu(tr("Rename recording"), 12)
+{
+  cMarks marks;
+  char *buffer = NULL;
+
+  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      ));
+
+  Add(new cOsdItem("",                     osUnknown, false));
+
+  asprintf(&buffer, "%s:\t%s", tr("Date"), *DayDateTime(recording->start));
+  Add(new cOsdItem(buffer,                 osUnknown, false));
+  free(buffer);
+
+  cChannel *channel = Channels.GetByChannelID(((cRecordingInfo *)recording->Info())->ChannelID());
+  if (channel) {
+     asprintf(&buffer, "%s:\t%s", tr("Channel"), *ChannelString(channel, 0));
+     Add(new cOsdItem(buffer,              osUnknown, false));
+     free(buffer);
+     }
+
+  cIndexFile *index = new cIndexFile(recording->FileName(), false);
+  if (index) {
+     asprintf(&buffer, "%s:\t%s", tr("Length"), *IndexToHMSF(index->Last()));
+     Add(new cOsdItem(buffer,              osUnknown, false));
+     free(buffer);
+     }
+  delete index;
+
+  int dirSize = DirSizeMB(recording->FileName());
+  if (dirSize > 9999)
+     asprintf(&buffer, "%s:\t%.2f GB", tr("Size"), dirSize / 1024.0);
+  else
+     asprintf(&buffer, "%s:\t%d MB", tr("Size"), dirSize);
+  Add(new cOsdItem(buffer,                 osUnknown, false));
+  free(buffer);
+
+  Add(new cOsdItem("",                     osUnknown, false));
+
+  isMarks = marks.Load(recording->FileName()) && marks.Count();
+  marksItem = new cOsdItem(tr("Delete marks information?"),   osUser1, isMarks);
+  Add(marksItem);
+
+  cResumeFile ResumeFile(recording->FileName());
+  isResume = (ResumeFile.Read() != -1); 
+  resumeItem = new cOsdItem(tr("Delete resume information?"), osUser2, isResume);
+  Add(resumeItem);
+}
+
+eOSState cMenuRenameRecording::ProcessKey(eKeys Key)
+{
+  eOSState state = cOsdMenu::ProcessKey(Key);
+
+  if (state == osUnknown) {
+     if (Key == kOk) {
+        char buffer[MaxFileName];
+        if (strlen(path))        
+           snprintf(buffer, sizeof(buffer), "%s~%s", path, name);
+        else
+           snprintf(buffer, sizeof(buffer), "%s", name);
+        if (recording->Rename(buffer, &priority, &lifetime)) {
+           Recordings.ChangeState();
+           Recordings.TouchUpdate();
+           return osRecordings;
+           }
+        else
+           Skins.Message(mtError, tr("Error while accessing recording!"));
+        }
+     return osContinue;
+     }
+  else if (state == osUser1) {
+     if (isMarks && Interface->Confirm(tr("Delete marks information?"))) {
+        cMarks marks;
+        marks.Load(recording->FileName());
+        cMark *mark = marks.First();
+        while (mark) {
+          cMark *nextmark = marks.Next(mark);
+          marks.Del(mark);
+          mark = nextmark;
+          }
+        marks.Save();
+        isMarks = false;
+        marksItem->SetSelectable(isMarks);
+        SetCurrent(First());
+        Display();
+        }
+     return osContinue;
+     }
+  else if (state == osUser2) {
+     if (isResume && Interface->Confirm(tr("Delete resume information?"))) {
+        cResumeFile ResumeFile(recording->FileName());
+        ResumeFile.Delete();
+        isResume = false;
+        resumeItem->SetSelectable(isResume);
+        SetCurrent(First());
+        Display();
+        }
+     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 = level == 0; 
   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 +2248,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 +2407,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 +2432,18 @@
        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 +2531,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 +2546,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 +2623,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 +2939,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 +2960,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 +3166,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 +3193,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 +3226,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 +3270,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 +3303,7 @@
            }
      result = true;
      }
-
+     
   return result;
 }
 
@@ -2928,7 +3315,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);
@@ -4137,6 +4533,9 @@
 
 eOSState cReplayControl::ProcessKey(eKeys Key)
 {
+  static int jmpWidth = 1;
+  int pkw = 0;
+
   if (!Active())
      return osEnd;
   if (visible) {
@@ -4174,14 +4573,44 @@
     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;
+//begin kw-Jumpseconds etc.                   
+     case k1|k_Repeat:
+            jmpWidth += 15;
+   		    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 += 15;
+   		    displayFrames = false;
+ 		    pkw = SkipFrames(jmpWidth); 
+ 		    Goto(pkw, true);
+ 		    break;
+     case k3:	   
+            jmpWidth = 1;
+ 		    displayFrames = true;
+ 		    pkw = SkipFrames(1); 
+ 		    Goto(pkw, true);
+ 		    break;
+//begin kw-Jumpseconds etc.                   
+         
     default: {
       DoShowMode = false;
       switch (Key) {
@@ -4223,3 +4652,4 @@
      ShowMode();
   return osContinue;
 }
+
diff -u vdr-1.4.5/menu.h vdr-1.4.5-kw-004/menu.h
--- vdr-1.4.5/menu.h	2006-10-20 15:09:57.000000000 +0200
+++ vdr-1.4.5-kw-004/menu.h	2007-01-21 18:30:19.000000000 +0100
@@ -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.5/menuitems.c vdr-1.4.5-kw-004/menuitems.c
--- vdr-1.4.5/menuitems.c	2007-01-04 14:30:37.000000000 +0100
+++ vdr-1.4.5-kw-004/menuitems.c	2007-01-21 18:30:48.000000000 +0100
@@ -259,9 +259,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 +390,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 +412,7 @@
                     }
                  else
                     return osUnknown;
+		 lastKey = Key;
                  break;
     case kBlue|k_Repeat:
     case kBlue:  // consume the key only if in edit-mode
@@ -425,6 +429,7 @@
                     }
                  if (!insert && isalpha(value[pos]))
                     uppercase = isupper(value[pos]);
+                 lastKey = Key;
                  break;
     case kRight|k_Repeat:
     case kRight: AdvancePos();
@@ -432,7 +437,7 @@
                     orgValue = strdup(value);
                     SetHelpKeys();
                     }
-                 break;
+                   break;
     case kUp|k_Repeat:
     case kUp:
     case kDown|k_Repeat:
@@ -452,6 +457,7 @@
                     }
                  else
                     return cMenuEditItem::ProcessKey(Key);
+                 lastKey = Key;
                  break;
     case k0|k_Repeat ... k9|k_Repeat:
     case k0 ... k9: {
@@ -504,6 +510,7 @@
                        orgValue = NULL;
                        }
                     pos = -1;
+                    lastKey = Key;
                     newchar = true;
                     stripspace(value);
                     SetHelpKeys();
@@ -553,6 +560,157 @@
   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;
+
+     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.5/menuitems.h vdr-1.4.5-kw-004/menuitems.h
--- vdr-1.4.5/menuitems.h	2006-04-14 12:01:47.000000000 +0200
+++ vdr-1.4.5-kw-004/menuitems.h	2007-01-21 21:11:54.000000000 +0100
@@ -76,22 +76,24 @@
   };
 
 class cMenuEditStrItem : public cMenuEditItem {
-private:
+private:   
   char *orgValue;
-  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 +101,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.5/osdbase.c vdr-1.4.5-kw-004/osdbase.c
--- vdr-1.4.5/osdbase.c	2006-02-05 15:37:03.000000000 +0100
+++ vdr-1.4.5-kw-004/osdbase.c	2006-12-18 21:43:56.000000000 +0100
@@ -77,6 +77,7 @@
 {
   isMenu = true;
   digit = 0;
+  key_nr = -1;
   hasHotkeys = false;
   title = NULL;
   SetTitle(Title);
@@ -111,7 +112,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 +426,60 @@
      }
 }
 
+#define MENUKEY_TIMEOUT 1500
+
 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 (lastActivity.TimedOut())
+        Key = kOk;
+     else
+        return osContinue;
+     }
+  else {
+     lastActivity.Set(MENUKEY_TIMEOUT);
+     }
+  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,8 +518,8 @@
         }
      }
   switch (Key) {
-    case k0:      return osUnknown;
-    case k1...k9: return hasHotkeys ? HotKey(Key) : osUnknown;
+    case kNone:
+    case k0...k9: return hasHotkeys ? HotKey(Key) : osUnknown;
     case kUp|k_Repeat:
     case kUp:   CursorUp();   break;
     case kDown|k_Repeat:
diff -u vdr-1.4.5/osdbase.h vdr-1.4.5-kw-004/osdbase.h
--- vdr-1.4.5/osdbase.h	2006-01-06 12:55:30.000000000 +0100
+++ vdr-1.4.5-kw-004/osdbase.h	2006-12-18 21:43:56.000000000 +0100
@@ -94,6 +94,8 @@
   char *status;
   int digit;
   bool hasHotkeys;
+  int key_nr;
+  cTimeMs lastActivity;
 protected:
   cSkinDisplayMenu *DisplayMenu(void) { return displayMenu; }
   const char *hk(const char *s);
Gemeinsame Unterverzeichnisse: vdr-1.4.5/PLUGINS und vdr-1.4.5-kw-004/PLUGINS.
diff -u vdr-1.4.5/README.kw vdr-1.4.5-kw-004/README.kw
--- vdr-1.4.5/README.kw	2007-01-21 21:40:16.000000000 +0100
+++ vdr-1.4.5-kw-004/README.kw	2007-01-21 21:07:23.000000000 +0100
@@ -0,0 +1,183 @@
+kw-Patches
+==========
+
+Hier die Patches, die andere oder ich erstellt haben 
+und die ich selbst nutze. Die erste Version basierte auf dem enAIO-Patch,
+der seinerseits diverse Patches zusammenfasste. Inzwischen ähnelt meine
+Sammlung dem liemikuutio-Patch (http://www.saunalahti.fi/~rahrenbe/vdr/patches/). 
+Offenbar hat dessen Entwickler Rolf Ahrenberg unabhängig von mir ähnliche
+Patches darin aufgenommen. Da es ungezählte Varianten der enthaltenen Patches
+gibt, und auch ich nicht mehr weiß, welche der zahlreichen meist minimalen 
+Änderungen von mir und welche von anderen Autoren stammt ist folgende Aufzählung 
+möglicherweise nicht ganz komplett. 
+
+Derzeit (vdr 1.4.3-kw-004) sind folgende Patches enthalten:
+
+  * w_epgfix    
+    zur Vermeidung doppelter EPG-Einträge bei schlampigen EPG-Anbietern (z.B. Prosiebensat1)
+    von vdr-Portal-User Wirbel (http://www.vdr-portal.de/board/profile.php?userid=4146) und 
+    "Norad" (http://www.vdr-portal.de/board/profile.php?userid=5190)
+    Thread: http://www.vdr-portal.de/board/thread.php?threadid=36640&threadview=0&hilight=&hilightuser=0&page=1
+    Download: http://www.vdr-portal.de/board/attachment.php?attachmentid=10284    
+    (seit 1.4.3-kw-003)
+
+  * Cuttime-Patch (2006-05-14) von Udo Richter  // +cuttime-patch
+    (http://www.richter-udo.de/vdr/patches.html#cuttime)
+    Ändert beim Schneiden die Zeit im Verzeichnisnamen,
+    dadurch kann dieselbe Sendung mehrfach geschnitten werden, ohne
+    vorherige Schnittergebnisse zu löschen
+    (seit 1.4.2-kw)
+
+  * 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 )
+    (http://www.vdr-portal.de/board/thread.php?threadid=40417, geändert lt. 
+    "liemikuutio"-Patch).
+    Zeigt die Länge von Aufzeichnungen an. 
+    
+  * Channelfilter-Patch 0.4 von Walter Koch ( // kw-cfp )
+    Filtern der Kanalliste. Beschreibung siehe unten
+
+  * 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 funktioniert auch ohne das EPGSEARCH-Plugin.
+    Dieser Patch stammt aus dem EPGSEARCH-Plugin (http://freenet-homepage.de/cwieninger/html/vdr-epg-search.html).
+
+  * 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.ä.  
+  
+  * Klarere deutsche Texte ("Ändern" statt "Edit", "Programmvorschau" 
+    statt "Programm" 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.4
+==============================================================================
+ 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.3 und vdr 1.4.5 getestet. 
+ Es fehlen allerdings noch die Übersetzungen.
+ 
+ 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
+ 
+ 0.4: Jetzt sind in der Kanalsicht auch die Kanale erreichbar, die eine Null 
+      enthalten (101, 1230 etc.) (seit Patch 1.4.5-kw-004)
+ 
+ ----------- 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.5/recording.c vdr-1.4.5-kw-004/recording.c
--- vdr-1.4.5/recording.c	2006-10-07 14:46:22.000000000 +0200
+++ vdr-1.4.5-kw-004/recording.c	2007-01-21 21:15:28.000000000 +0100
@@ -8,6 +8,7 @@
  */
 
 #include "recording.h"
+#include "iconpatch.h"   // kw 
 #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(FileName(), r->FileName()); // kw-srsp
+  return strcasecmp(SortName(), r->SortName()) ;
 }
 
 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,47 @@
                             New,
                             Delimiter,
                             s);
+// Start tf-rlp, small mods by kw 
+        }
+     else {
+        char RecLength[21], RecDate[9], RecTime[6], RecDelimiter[2];
+        snprintf(RecLength, sizeof(RecLength), "---");
+        if (Setup.ShowRecLength && FileName()) {
+           char *filename = NULL;
+           asprintf(&filename, "%s%s", FileName(), INDEXFILESUFFIX);
+           
+           if (filename) {
+              if (access(filename, R_OK) == 0) {
+                 struct stat buf;
+                 if (stat(filename, &buf) == 0) {
+                    struct tIndex { int offset; uchar type; uchar number; short reserved; };
+                    int delta = buf.st_size % sizeof(tIndex);
+                    if (delta) {
+                       delta = sizeof(tIndex) - delta;
+                       esyslog("ERROR: invalid file size (%ld) in '%s'", buf.st_size, filename);
+                       }
+                    snprintf(RecLength, sizeof(RecLength), "%ld'", (buf.st_size + delta) / sizeof(tIndex) / SecondsToFrames(60));
+                    }
+                 }
+              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 || Setup.ShowRecDate ? RecDelimiter : ""),
+                               (Setup.ShowRecLength ? RecLength    : ""),
+                               (Setup.ShowRecLength ? RecDelimiter : ""),
+                               s);
+        }
+// end tf-rlp         
+
      // let's not display a trailing '~':
      if (!NewIndicator)
         stripspace(titleBuffer);
@@ -754,6 +804,17 @@
   return titleBuffer;
 }
 
+//cuttime-patch begin
+void cRecording::SetStartTime(time_t Start) 
+{ 
+  start=Start;    
+  if (fileName) {   
+  	 free(fileName);   
+  	 fileName = NULL;   
+  	 }   
+}  
+//cuttime-patch end
+
 const char *cRecording::PrefixFileName(char Prefix)
 {
   cString p = PrefixVideoFileName(FileName(), Prefix);
@@ -830,7 +891,7 @@
      return false;
      }
   isyslog("removing recording %s", FileName());
-  return RemoveVideoFile(FileName());
+  return RemoveVideoFile(FileName());          
 }
 
 void cRecording::ResetResume(void) const
@@ -838,6 +899,46 @@
   resume = RESUME_NOT_INITIALIZED;
 }
 
+bool cRecording::Rename(char *newName, int *newPriority, int *newLifetime)
+{
+  bool result = false;
+  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) {
+           priority = *newPriority;
+           lifetime = *newLifetime;
+           free(fileName);
+           fileName = strdup(newFileName);
+           free(name);
+           name = strdup(newName);
+           free(sortBuffer);
+           sortBuffer = NULL;
+           free(titleBuffer);
+           titleBuffer = NULL;
+           }
+        }
+     }
+  free(newFileName);
+  return result;
+}
+
 // --- cRecordings -----------------------------------------------------------
 
 cRecordings Recordings;
@@ -1149,8 +1250,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.5/recording.h vdr-1.4.5-kw-004/recording.h
--- vdr-1.4.5/recording.h	2006-12-01 16:06:07.000000000 +0100
+++ vdr-1.4.5-kw-004/recording.h	2007-01-21 18:30:48.000000000 +0100
@@ -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,8 +85,9 @@
   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; }
+  void SetStartTime(time_t Start);  //+cuttime-patch
   const char *PrefixFileName(char Prefix);
   int HierarchyLevels(void) const;
   void ResetResume(void) const;
@@ -98,6 +100,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.5/svdrp.c vdr-1.4.5-kw-004/svdrp.c
--- vdr-1.4.5/svdrp.c	2006-08-12 11:09:55.000000000 +0200
+++ vdr-1.4.5-kw-004/svdrp.c	2006-12-18 23:48:29.000000000 +0100
@@ -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,40 @@
   Reply(250, "EPG scan triggered");
 }
 
+// start tk-rrp
+void cSVDRP::CmdRENR(const char *Option)
+{
+  bool recordings = Recordings.Update(true);
+  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;
+           char *oldName = strdup(recording->Name());
+           tail = skipspace(tail);
+           if (recording->Rename(tail, &priority, &lifetime)) {
+              Reply(250, "Renamed \"%s\" to \"%s\"", oldName, recording->Name());
+              Recordings.ChangeState();
+              Recordings.TouchUpdate();
+              }
+           else
+              Reply(501, "Renaming \"%s\" to \"%s\" failed", oldName, tail);
+           free(oldName);
+           }
+        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 +1562,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.5/svdrp.h vdr-1.4.5-kw-004/svdrp.h
--- vdr-1.4.5/svdrp.h	2006-08-06 10:51:09.000000000 +0200
+++ vdr-1.4.5-kw-004/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.5/symbols und vdr-1.4.5-kw-004/symbols.
