r3851 - in vdr/vdr/trunk/debian: . patches

Tobias Grimm tiber-guest at alioth.debian.org
Fri Jan 12 23:28:49 CET 2007


Author: tiber-guest
Date: 2007-01-12 23:28:45 +0100 (Fri, 12 Jan 2007)
New Revision: 3851

Added:
   vdr/vdr/trunk/debian/patches/XX_patchtest-compile-error.dpatch
   vdr/vdr/trunk/debian/patches/XX_patchtest-patch-error.dpatch
   vdr/vdr/trunk/debian/patches/list_uncritical_patches
   vdr/vdr/trunk/debian/patches/opt-20_liemikuutio.dpatch
   vdr/vdr/trunk/debian/patches/opt-27-x_subtitles-ttxtsubs-volumebar-fix.dpatch
   vdr/vdr/trunk/debian/patches/opt-30-x_analogtv.dpatch
   vdr/vdr/trunk/debian/patches/opt-35_setup-show-valid.dpatch
   vdr/vdr/trunk/debian/patches/opt-36_CutterQueue-AutoDelete.dpatch
   vdr/vdr/trunk/debian/patches/opt-36_CutterQueue.dpatch
   vdr/vdr/trunk/debian/patches/opt-37_submenu.dpatch
   vdr/vdr/trunk/debian/patches/opt-38_disableDoubleEpgEntrys.dpatch
   vdr/vdr/trunk/debian/patches/opt-39_noepg.dpatch
   vdr/vdr/trunk/debian/patches/opt-40_wareagle-icons.dpatch
   vdr/vdr/trunk/debian/patches/opt-41-x_timer-info.dpatch
   vdr/vdr/trunk/debian/patches/opt-42-x_extrecmenu.dpatch
   vdr/vdr/trunk/debian/patches/opt-43-x_epgsearch.dpatch
   vdr/vdr/trunk/debian/patches/opt-44_rotor.dpatch
   vdr/vdr/trunk/debian/patches/opt-45_yaepg.dpatch
   vdr/vdr/trunk/debian/patches/opt-46-x_dmh-dvd-archive-debian.dpatch
   vdr/vdr/trunk/debian/patches/opt-46_dmh-dvd-archive.dpatch
   vdr/vdr/trunk/debian/patches/opt-46_dvdarchive.dpatch
   vdr/vdr/trunk/debian/patches/opt-47_sourcecaps.dpatch
   vdr/vdr/trunk/debian/patches/opt-48_pin.dpatch
   vdr/vdr/trunk/debian/patches/opt-49_sharelnb.dpatch
   vdr/vdr/trunk/debian/patches/patchtest
Modified:
   vdr/vdr/trunk/debian/changelog
   vdr/vdr/trunk/debian/patches/00list
Log:
* Added the complete list of optional patches from the vdr package at e-tobi.net
  (Ubuntu might want to use them)

Modified: vdr/vdr/trunk/debian/changelog
===================================================================
--- vdr/vdr/trunk/debian/changelog	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/changelog	2007-01-12 22:28:45 UTC (rev 3851)
@@ -8,6 +8,8 @@
     /usr/share/vdr-dev/plugin-template/rules not beeing a valid shell script
   * Added linitan source overrided for "debian-rules-not-a-makefile"
   * Removed lintian override for menu-command-not-in-package /usr/lib/menu/vdr:2
+  * Added the complete list of optional patches from the vdr package at e-tobi.net
+    (Ubuntu might want to use them)
 
   [ Thomas Günther ]
   * Replaced VDRdevel adaptions in debian/rules and plugin-template/rules

Modified: vdr/vdr/trunk/debian/patches/00list
===================================================================
--- vdr/vdr/trunk/debian/patches/00list	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/00list	2007-01-12 22:28:45 UTC (rev 3851)
@@ -10,8 +10,70 @@
 15_dvbplayer
 16_channels.conf.terr-fix
 
+81_Make_config
+82_valgrind
+
+# Patch collection (replaces enAIO).
+# opt-20_liemikuutio
+
 # The Jump patch allows automatic jumping over cutting marks.
 # opt-24_jumpplay
 
 # Patch needed for the subtitles and the ttxtsubs plugin.
 # opt-27_subtitles-ttxtsubs
+# opt-27-x_subtitles-ttxtsubs-volumebar-fix
+
+# Patch needed for the analogtv plugin.
+# opt-30-x_analogtv
+
+# Patch that shows if there is a valid setup value left or right with < and >.
+# opt-35_setup-show-valid
+
+# Patch to handle recordings that should be cutted in a queue (-/+ autodelete).
+# opt-36_CutterQueue
+# opt-36_CutterQueue-AutoDelete
+
+# Patch needed for the submenu plugin.
+# opt-37_submenu
+
+# Patch that suppresses double EPG entries.
+# opt-38_disableDoubleEpgEntrys
+
+# Patch to disable normal epg update for specified channels.
+# opt-39_noepg
+
+# Patch that adds some icons to timer, recording and channel list.
+# opt-40_wareagle-icons
+
+# Patch to show an info, if it is possible to record an event in the timer-info.
+# opt-41-x_timer-info
+
+# Patch to allow extrecmenu to replace the recordings menu with it's own version.
+# opt-42-x_extrecmenu
+
+# Patch to allow epgsearch to replace the schedule menu with it's own version.
+# opt-43-x_epgsearch
+
+# Patch needed for the rotor plugin.
+# opt-44_rotor
+
+# Patch needed for the yaepg plugin.
+# opt-45_yaepg
+
+# Patch to play on DVD archived VDR recordings.
+# opt-46_dvdarchive
+
+# Estension to opt-46_dvdarchive to play VIDEO-DVD's as archived VDR recordings.
+# opt-46_dmh-dvd-archive
+
+# Some Debian specific defaults for opt-46_dmh-dvd-archive
+# opt-46-x_dmh-dvd-archive-debian
+
+# Patch for assigning special satellites to one dvb card.
+# opt-47_sourcecaps
+
+# Patch for the PIN plugin
+# opt-48_pin
+
+# Patch to share one sat connection for several cards.
+# opt-49_sharelnb

Added: vdr/vdr/trunk/debian/patches/XX_patchtest-compile-error.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/XX_patchtest-compile-error.dpatch	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/XX_patchtest-compile-error.dpatch	2007-01-12 22:28:45 UTC (rev 3851)
@@ -0,0 +1,20 @@
+#!/bin/sh /usr/share/dpatch/dpatch-run
+
+## XX_patchtest-compile-error
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Patch to check patchtest against compile error
+
+ at DPATCH@
+diff -Nur vdr.orig/vdr.c vdr/vdr.c
+--- vdr.orig/vdr.c	2004-03-12 21:37:17.000000000 +0100
++++ vdr/vdr.c	2004-03-13 14:22:01.000000000 +0100
+@@ -79,6 +79,8 @@
+ 
+ int main(int argc, char *argv[])
+ {
++  RaiseCompilerError();
++  
+   // Save terminal settings:
+ 
+   struct termios savedTm;

Added: vdr/vdr/trunk/debian/patches/XX_patchtest-patch-error.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/XX_patchtest-patch-error.dpatch	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/XX_patchtest-patch-error.dpatch	2007-01-12 22:28:45 UTC (rev 3851)
@@ -0,0 +1,20 @@
+#!/bin/sh /usr/share/dpatch/dpatch-run
+
+## XX_patchtest-patch-error
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Patch to check patchtest against patch error
+
+ at DPATCH@
+diff -Nur vdr.orig/vdr.c vdr/vdr.c
+--- vdr.orig/vdr.c	2004-03-12 21:37:17.000000000 +0100
++++ vdr/vdr.c	2004-03-13 14:22:01.000000000 +0100
+@@ -79,6 +79,8 @@
+ 
+ int main(int argc, char *argv[])
+ ***PATCH-BUG***
++  RaiseCompilerError();
++  
+   // Save terminal settings:
+ 
+   struct termios savedTm;

Added: vdr/vdr/trunk/debian/patches/list_uncritical_patches
===================================================================
--- vdr/vdr/trunk/debian/patches/list_uncritical_patches	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/list_uncritical_patches	2007-01-12 22:28:45 UTC (rev 3851)
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+# find all patches that don't modify any header files
+
+patches=`find ./ -name "*.dpatch"`
+
+for patch in $patches ; do
+    grep -q -e "^---.*\.h" $patch
+    if [ $? -ne 0 ] ; then
+	basename $patch
+    fi
+done

Added: vdr/vdr/trunk/debian/patches/opt-20_liemikuutio.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-20_liemikuutio.dpatch	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/opt-20_liemikuutio.dpatch	2007-01-12 22:28:45 UTC (rev 3851)
@@ -0,0 +1,1470 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## opt-20_liemikuutio.dpatch by Rolf Ahrenberg <Rolf.Ahrenberg AT sci.fi>
+## http://www.saunalahti.fi/~rahrenbe/vdr/patches/vdr-1.4.4-liemikuutio-1.13.diff.gz
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Patch collection - see HISTORY-liemikuutio for details.
+
+ at DPATCH@
+diff -Nru vdr-1.4.4-vanilla/HISTORY-liemikuutio vdr-1.4.4-liemikuutio/HISTORY-liemikuutio
+--- vdr-1.4.4-vanilla/HISTORY-liemikuutio	1970-01-01 02:00:00.000000000 +0200
++++ vdr-1.4.4-liemikuutio/HISTORY-liemikuutio	2006-11-04 18:28:33.000000000 +0200
+@@ -0,0 +1,65 @@
++Liemikuutio Revision History
++----------------------------
++
++2006-01-08: Version 1.0
++
++- Based on enAIO with these original patches:
++  Simple recordings sorting by Walter at VDRPortal
++  Alternate rename recordings by Ralf Müller
++  Menu selection by Peter Dittmann
++  Recording length by Tobias Faust
++
++2006-01-15: Version 1.1
++
++- Removed patches already found in vdr-1.3.39.
++
++2006-01-25: Version 1.2
++
++- Added "Main menu command position" feature.
++
++2006-02-05: Version 1.3
++
++- Improved menu selection response.
++
++2006-04-18: Version 1.4
++
++- Added Estonian translation (Thanks to Arthur Konovalov).
++
++2006-04-30: Version 1.5
++
++- Added progress bar view into "What's on now?" menu.
++
++2006-06-06: Version 1.6
++
++- Added French translation (Thanks to ECLiPSE).
++
++2006-06-14: Version 1.7
++
++- Fixed RENR crash.
++
++2006-07-14: Version 1.8
++
++- Fixed RENR/OSD bug.
++
++2006-08-27: Version 1.9
++
++- Some modifications to the recording length and
++  rename recordings patches (Thanks to Firefly).
++- Added k1_k3_jumps_20s patch by Petri Hintukainen.
++
++2006-08-29: Version 1.10
++
++- The cRecording:Title() method now defaults to original formatting.
++
++2006-09-04: Version 1.11
++
++- Removed unused variable from cRecording::Title() method (Thanks to C.Y.M.).
++- Some modifications to the rename recordings patch (Thanks to Firefly).
++
++2006-09-13: Version 1.12
++
++- More modifications to the rename recordings patch (Thanks to Firefly).
++
++2006-10-01: Version 1.13
++
++- Removed unnecessary syslog printing (Thanks to Firefly).
+diff -Nru vdr-1.4.4-vanilla/config.c vdr-1.4.4-liemikuutio/config.c
+--- vdr-1.4.4-vanilla/config.c	2006-11-04 18:27:33.000000000 +0200
++++ vdr-1.4.4-liemikuutio/config.c	2006-11-04 18:28:33.000000000 +0200
+@@ -275,6 +275,11 @@
+   CurrentDolby = 0;
+   InitialChannel = 0;
+   InitialVolume = -1;
++  ShowRecDate = 1;
++  ShowRecTime = 1;
++  ShowRecLength = 0;
++  ShowProgressBar = 0;
++  MenuCmdPosition = 0;
+ }
+ 
+ cSetup& cSetup::operator= (const cSetup &s)
+@@ -436,6 +441,11 @@
+   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
+      return false;
+   return true;
+@@ -504,6 +514,11 @@
+   Store("CurrentDolby",       CurrentDolby);
+   Store("InitialChannel",     InitialChannel);
+   Store("InitialVolume",      InitialVolume);
++  Store("ShowRecDate",        ShowRecDate);
++  Store("ShowRecTime",        ShowRecTime);
++  Store("ShowRecLength",      ShowRecLength);
++  Store("ShowProgressBar",    ShowProgressBar);
++  Store("MenuCmdPosition",    MenuCmdPosition);
+ 
+   Sort();
+ 
+diff -Nru vdr-1.4.4-vanilla/config.h vdr-1.4.4-liemikuutio/config.h
+--- vdr-1.4.4-vanilla/config.h	2006-11-04 18:27:33.000000000 +0200
++++ vdr-1.4.4-liemikuutio/config.h	2006-11-04 18:28:33.000000000 +0200
+@@ -35,6 +35,8 @@
+ // plugins to work with newer versions of the core VDR as long as no
+ // VDR header files have changed.
+ 
++#define LIEMIKUUTIO  113
++
+ #define MAXPRIORITY 99
+ #define MAXLIFETIME 99
+ 
+@@ -252,6 +254,7 @@
+   int CurrentDolby;
+   int InitialChannel;
+   int InitialVolume;
++  int ShowRecDate, ShowRecTime, ShowRecLength, ShowProgressBar, MenuCmdPosition;
+   int __EndData__;
+   cSetup(void);
+   cSetup& operator= (const cSetup &s);
+diff -Nru vdr-1.4.4-vanilla/i18n.c vdr-1.4.4-liemikuutio/i18n.c
+--- vdr-1.4.4-vanilla/i18n.c	2006-11-04 18:27:33.000000000 +0200
++++ vdr-1.4.4-liemikuutio/i18n.c	2006-11-04 18:28:33.000000000 +0200
+@@ -6126,6 +6126,358 @@
+     "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 -Nru vdr-1.4.4-vanilla/menu.c vdr-1.4.4-liemikuutio/menu.c
+--- vdr-1.4.4-vanilla/menu.c	2006-11-04 18:27:33.000000000 +0200
++++ vdr-1.4.4-liemikuutio/menu.c	2006-11-04 18:28:33.000000000 +0200
+@@ -13,6 +13,7 @@
+ #include <stdio.h>
+ #include <stdlib.h>
+ #include <string.h>
++#include <math.h>
+ #include "channels.h"
+ #include "config.h"
+ #include "cutter.h"
+@@ -664,7 +665,21 @@
+      Add(new cMenuEditBitItem( tr("VPS"),          &data.flags, tfVps));
+      Add(new cMenuEditIntItem( tr("Priority"),     &data.priority, 0, MAXPRIORITY));
+      Add(new cMenuEditIntItem( tr("Lifetime"),     &data.lifetime, 0, MAXLIFETIME));
+-     Add(new cMenuEditStrItem( tr("File"),          data.file, sizeof(data.file), tr(FileNameChars)));
++     char* p = strrchr(data.file, '~');
++     if (p) {
++        p++;
++        strn0cpy(name, p, sizeof(name));
++        strn0cpy(path, data.file, sizeof(path));
++        p = strrchr(path, '~');
++        if (p)
++           p[0] = 0;
++        }   
++     else {
++        strn0cpy(name, data.file, sizeof(name));
++        strn0cpy(path, "", sizeof(path));
++        }
++     Add(new cMenuEditStrItem( tr("File"),          name, sizeof(name), tr(FileNameChars)));
++     Add(new cMenuEditRecPathItem(tr("Path"),       path, sizeof(path)));
+      SetFirstDayItem();
+      }
+   Timers.IncBeingEdited();
+@@ -704,6 +719,10 @@
+                           Skins.Message(mtError, tr("*** Invalid Channel ***"));
+                           break;
+                           }
++                       if(strlen(path))
++                          snprintf(data.file, sizeof(data.file), "%s~%s", path, name);
++                       else
++                          snprintf(data.file, sizeof(data.file), "%s", name);
+                        if (!*data.file)
+                           strcpy(data.file, data.Channel()->ShortName(true));
+                        if (timer) {
+@@ -1007,7 +1026,8 @@
+   const cChannel *channel;
+   bool withDate;
+   int timerMatch;
+-  cMenuScheduleItem(const cEvent *Event, cChannel *Channel = NULL, bool WithDate = false);
++  bool withBar;
++  cMenuScheduleItem(const cEvent *Event, cChannel *Channel = NULL, bool WithDate = false, bool WithBar = false);
+   static void SetSortMode(eScheduleSortMode SortMode) { sortMode = SortMode; }
+   static void IncSortMode(void) { sortMode = eScheduleSortMode((sortMode == ssmAllAll) ? ssmAllThis : sortMode + 1); }
+   static eScheduleSortMode SortMode(void) { return sortMode; }
+@@ -1017,12 +1037,13 @@
+ 
+ cMenuScheduleItem::eScheduleSortMode cMenuScheduleItem::sortMode = ssmAllThis;
+ 
+-cMenuScheduleItem::cMenuScheduleItem(const cEvent *Event, cChannel *Channel, bool WithDate)
++cMenuScheduleItem::cMenuScheduleItem(const cEvent *Event, cChannel *Channel, bool WithDate, bool WithBar)
+ {
+   event = Event;
+   channel = Channel;
+   withDate = WithDate;
+   timerMatch = tmNone;
++  withBar = WithBar;
+   Update(true);
+ }
+ 
+@@ -1039,6 +1060,17 @@
+ 
+ static char *TimerMatchChars = " tT";
+ 
++static const char * const ProgressBar[7] =
++{
++  "[      ]",
++  "[|     ]",
++  "[||    ]",
++  "[|||   ]",
++  "[||||  ]",
++  "[||||| ]",
++  "[||||||]"
++};
++
+ bool cMenuScheduleItem::Update(bool Force)
+ {
+   bool result = false;
+@@ -1052,7 +1084,14 @@
+      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());
++        if (Setup.ShowProgressBar && withBar) {
++           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, "%d\t%.*s\t%s\t%s\t%c%c%c\t%s", channel->Number(), 6, channel->ShortName(true), *event->GetTimeString(), ProgressBar[progress], t, v, r, event->Title());
++           }
++        else
++           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);
+@@ -1086,7 +1125,7 @@
+ const cEvent *cMenuWhatsOn::scheduleEvent = NULL;
+ 
+ cMenuWhatsOn::cMenuWhatsOn(const cSchedules *Schedules, bool Now, int CurrentChannelNr)
+-:cOsdMenu(Now ? tr("What's on now?") : tr("What's on next?"), CHNUMWIDTH, 7, 6, 4)
++:cOsdMenu(Now ? tr("What's on now?") : tr("What's on next?"), CHNUMWIDTH, 7, 6, 4, 4)
+ {
+   now = Now;
+   helpKeys = -1;
+@@ -1098,7 +1137,7 @@
+          if (Schedule) {
+             const cEvent *Event = Now ? Schedule->GetPresentEvent() : Schedule->GetFollowingEvent();
+             if (Event)
+-               Add(new cMenuScheduleItem(Event, Channel), Channel->Number() == CurrentChannelNr);
++               Add(new cMenuScheduleItem(Event, Channel, false, Now), Channel->Number() == CurrentChannelNr);
+             }
+          }
+       }
+@@ -1823,7 +1862,7 @@
+   fileName = strdup(Recording->FileName());
+   name = NULL;
+   totalEntries = newEntries = 0;
+-  SetText(Recording->Title('\t', true, Level));
++  SetText(Recording->Title('\t', true, Level, false));
+   if (*Text() == '\t')
+      name = strdup(Text() + 2); // 'Text() + 2' to skip the two '\t'
+ }
+@@ -1840,14 +1879,166 @@
+   if (New)
+      newEntries++;
+   char *buffer = NULL;
+-  asprintf(&buffer, "%d\t%d\t%s", totalEntries, newEntries, name);
++  switch (Setup.ShowRecTime + Setup.ShowRecDate + Setup.ShowRecLength) {
++     case 0:
++          asprintf(&buffer, "%s", name);
++          break;
++     case 1:
++          asprintf(&buffer, "%d\t%s", totalEntries, name);
++          break;
++     case 2:
++     default:
++          asprintf(&buffer, "%d\t%d\t%s", totalEntries, newEntries, name);
++          break;
++     case 3:
++          asprintf(&buffer, "%d\t%d\t\t%s", totalEntries, newEntries, name);
++          break;
++     }
+   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)
++:cOsdMenu(Base ? Base : tr("Recordings"), 9, 7, 7)
+ {
+   base = Base ? strdup(Base) : NULL;
+   level = Setup.RecordingDirs ? Level : -1;
+@@ -2067,6 +2258,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 +2283,12 @@
+        case kGreen:  return Rewind();
+        case kYellow: return Delete();
+        case kBlue:   return Info();
+-       case k1...k9: return Commands(Key);
++       case k0:      DirOrderState = !DirOrderState;
++                     Set(true);
++                     return osContinue;
++       case k8:      return Rename();
++       case k9:
++       case k1...k7: return Commands(Key);
+        case kNone:   if (Recordings.StateChanged(recordingsState))
+                         Set(true);
+                      break;
+@@ -2181,6 +2390,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 +2467,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 +2783,9 @@
+   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));
+ }
+ 
+ // --- cMenuSetupReplay ------------------------------------------------------
+@@ -2875,6 +3089,7 @@
+      replaying = NewReplaying;
+      // Replay control:
+      if (replaying && !stopReplayItem)
++        if (Setup.MenuCmdPosition) Ins(stopReplayItem = new cOsdItem(tr(" Stop replaying"), osStopReplay)); else
+         Add(stopReplayItem = new cOsdItem(tr(" Stop replaying"), osStopReplay));
+      else if (stopReplayItem && !replaying) {
+         Del(stopReplayItem->Index());
+@@ -2888,6 +3103,7 @@
+   // Editing control:
+   bool CutterActive = cCutter::Active();
+   if (CutterActive && !cancelEditingItem) {
++     if (Setup.MenuCmdPosition) Ins(cancelEditingItem = new cOsdItem(tr(" Cancel editing"), osCancelEdit)); else
+      Add(cancelEditingItem = new cOsdItem(tr(" Cancel editing"), osCancelEdit));
+      result = true;
+      }
+@@ -2910,6 +3126,7 @@
+            asprintf(&buffer, "%s%s", STOP_RECORDING, s);
+            cOsdItem *item = new cOsdItem(osStopRecord);
+            item->SetText(buffer, false);
++           if (Setup.MenuCmdPosition) Ins(item); else
+            Add(item);
+            if (!stopRecordingItem)
+               stopRecordingItem = item;
+@@ -4174,6 +4391,10 @@
+     case kFastFwd:
+     case kRight:   Forward(); break;
+     case kRed:     TimeSearch(); break;
++    case k1|k_Repeat:
++    case k1:       SkipSeconds(-20); break;
++    case k3|k_Repeat:
++    case k3:       SkipSeconds( 20); break;
+     case kGreen|k_Repeat:
+     case kGreen:   SkipSeconds(-60); break;
+     case kYellow|k_Repeat:
+diff -Nru vdr-1.4.4-vanilla/menu.h vdr-1.4.4-liemikuutio/menu.h
+--- vdr-1.4.4-vanilla/menu.h	2006-11-04 18:27:33.000000000 +0200
++++ vdr-1.4.4-liemikuutio/menu.h	2006-11-04 18:28:33.000000000 +0200
+@@ -35,6 +35,8 @@
+ private:
+   cTimer *timer;
+   cTimer data;
++  char name[MaxFileName];
++  char path[MaxFileName];
+   int channel;
+   bool addIfConfirmed;
+   cMenuEditDateItem *firstday;
+@@ -171,6 +173,7 @@
+   eOSState Delete(void);
+   eOSState Info(void);
+   eOSState Commands(eKeys Key = kNone);
++  eOSState Rename(void);
+ protected:
+   cRecording *GetRecording(cMenuRecordingItem *Item);
+ public:
+diff -Nru vdr-1.4.4-vanilla/menuitems.c vdr-1.4.4-liemikuutio/menuitems.c
+--- vdr-1.4.4-vanilla/menuitems.c	2006-11-04 18:27:33.000000000 +0200
++++ vdr-1.4.4-liemikuutio/menuitems.c	2006-11-04 18:28:33.000000000 +0200
+@@ -547,6 +547,156 @@
+   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 (!InEditMode())
++                     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 (InEditMode())
++                     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 (!InEditMode())
++                     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 (!InEditMode())
++                     return cMenuEditItem::ProcessKey(Key);
++                  Find(true);
++                  pos = strlen(base);
++                  if (pos)
++                     pos++;
++                  break;
++    case kOk:     // done
++                  if (!InEditMode())
++                     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 -Nru vdr-1.4.4-vanilla/menuitems.h vdr-1.4.4-liemikuutio/menuitems.h
+--- vdr-1.4.4-vanilla/menuitems.h	2006-11-04 18:27:33.000000000 +0200
++++ vdr-1.4.4-liemikuutio/menuitems.h	2006-11-04 18:28:33.000000000 +0200
+@@ -78,20 +78,20 @@
+ class cMenuEditStrItem : public cMenuEditItem {
+ 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);
+   void AdvancePos(void);
+-  virtual void Set(void);
+   char Inc(char c, bool Up);
+ protected:
++  char *value;
++  int length;
++  char *allowed;
++  int pos;
++  virtual void SetHelpKeys(void);
++  virtual void Set(void);
+   bool InEditMode(void) { return pos >= 0; }
+ public:
+   cMenuEditStrItem(const char *Name, char *Value, int Length, const char *Allowed);
+@@ -99,6 +99,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 -Nru vdr-1.4.4-vanilla/osdbase.c vdr-1.4.4-liemikuutio/osdbase.c
+--- vdr-1.4.4-vanilla/osdbase.c	2006-11-04 18:27:33.000000000 +0200
++++ vdr-1.4.4-liemikuutio/osdbase.c	2006-11-04 18:28:33.000000000 +0200
+@@ -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 -Nru vdr-1.4.4-vanilla/osdbase.h vdr-1.4.4-liemikuutio/osdbase.h
+--- vdr-1.4.4-vanilla/osdbase.h	2006-11-04 18:27:33.000000000 +0200
++++ vdr-1.4.4-liemikuutio/osdbase.h	2006-11-04 18:28:33.000000000 +0200
+@@ -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);
+diff -Nru vdr-1.4.4-vanilla/recording.c vdr-1.4.4-liemikuutio/recording.c
+--- vdr-1.4.4-vanilla/recording.c	2006-11-04 18:27:33.000000000 +0200
++++ vdr-1.4.4-liemikuutio/recording.c	2006-11-04 18:28:33.000000000 +0200
+@@ -45,6 +45,7 @@
+ #endif
+ #define INFOFILESUFFIX    "/info.vdr"
+ #define MARKSFILESUFFIX   "/marks.vdr"
++#define INDEXFILESUFFIX   "/index.vdr"
+ 
+ #define MINDISKSPACE 1024 // MB
+ 
+@@ -61,6 +62,7 @@
+ #define MAX_LINK_LEVEL  6
+ 
+ bool VfatFileSystem = false;
++bool DirOrderState = false;
+ 
+ cRecordings DeletedRecordings(true);
+ 
+@@ -688,6 +690,8 @@
+ int cRecording::Compare(const cListObject &ListObject) const
+ {
+   cRecording *r = (cRecording *)&ListObject;
++  if (DirOrderState)
++     return strcasecmp(FileName(), r->FileName());
+   return strcasecmp(SortName(), r->SortName());
+ }
+ 
+@@ -703,7 +707,7 @@
+   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() ? '*' : ' ';
+   free(titleBuffer);
+@@ -716,6 +720,7 @@
+         s++;
+      else
+         s = name;
++     if (Original) {
+      asprintf(&titleBuffer, "%02d.%02d.%02d%c%02d:%02d%c%c%s",
+                             t->tm_mday,
+                             t->tm_mon + 1,
+@@ -726,6 +731,42 @@
+                             New,
+                             Delimiter,
+                             s);
++        }
++     else {
++        char RecLength[5], 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);
++        }
+      // let's not display a trailing '~':
+      if (!NewIndicator)
+         stripspace(titleBuffer);
+@@ -838,6 +879,42 @@
+   resume = RESUME_NOT_INITIALIZED;
+ }
+ 
++bool cRecording::Rename(const char *newName, int *newPriority, int *newLifetime)
++{
++  bool result = false;
++  char *newFileName;
++  struct tm tm_r;
++  struct tm *t = localtime_r(&start, &tm_r);
++  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);
++  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 +1226,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 -Nru vdr-1.4.4-vanilla/recording.h vdr-1.4.4-liemikuutio/recording.h
+--- vdr-1.4.4-vanilla/recording.h	2006-11-04 18:27:33.000000000 +0200
++++ vdr-1.4.4-liemikuutio/recording.h	2006-11-04 18:28:33.000000000 +0200
+@@ -19,6 +19,7 @@
+ #include "tools.h"
+ 
+ extern bool VfatFileSystem;
++extern bool DirOrderState;
+ 
+ void RemoveDeletedRecordings(void);
+ void AssertFreeDiskSpace(int Priority = 0, bool Force = false);
+@@ -84,7 +85,7 @@
+   virtual int Compare(const cListObject &ListObject) const;
+   const char *Name(void) const { return name; }
+   const char *FileName(void) const;
+-  const char *Title(char Delimiter = ' ', bool NewIndicator = false, int Level = -1) const;
++  const char *Title(char Delimiter = ' ', bool NewIndicator = false, int Level = -1, bool Original = true) const;
+   const cRecordingInfo *Info(void) const { return info; }
+   const char *PrefixFileName(char Prefix);
+   int HierarchyLevels(void) const;
+@@ -98,6 +99,9 @@
+   bool Remove(void);
+        // Actually removes the file from the disk
+        // Returns false in case of error
++  bool Rename(const char *newName, int *newPriority, int *newLifetime);
++       // Changes the file name
++       // Returns false in case of error
+   };
+ 
+ class cRecordings : public cList<cRecording>, public cThread {
+diff -Nru vdr-1.4.4-vanilla/svdrp.c vdr-1.4.4-liemikuutio/svdrp.c
+--- vdr-1.4.4-vanilla/svdrp.c	2006-11-04 18:27:33.000000000 +0200
++++ vdr-1.4.4-liemikuutio/svdrp.c	2006-11-04 18:28:33.000000000 +0200
+@@ -290,6 +290,8 @@
+   "    format defined in vdr(5) for the 'epg.data' file.  A '.' on a line\n"
+   "    by itself terminates the input and starts processing of the data (all\n"
+   "    entered data is buffered until the terminating '.' is seen).",
++  "RENR <number> <new name>\n"
++  "    Rename recording. Number must be the Number as returned by LSTR command.",
+   "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.",
+@@ -1412,6 +1414,38 @@
+   Reply(250, "EPG scan triggered");
+ }
+ 
++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");
++}
++						
+ void cSVDRP::CmdSTAT(const char *Option)
+ {
+   if (*Option) {
+@@ -1526,6 +1560,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);
+   else if (CMD("SCAN"))  CmdSCAN(s);
+   else if (CMD("STAT"))  CmdSTAT(s);
+   else if (CMD("UPDT"))  CmdUPDT(s);
+diff -Nru vdr-1.4.4-vanilla/svdrp.h vdr-1.4.4-liemikuutio/svdrp.h
+--- vdr-1.4.4-vanilla/svdrp.h	2006-11-04 18:27:33.000000000 +0200
++++ vdr-1.4.4-liemikuutio/svdrp.h	2006-11-04 18:28:33.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);
+   void CmdSCAN(const char *Option);
+   void CmdSTAT(const char *Option);
+   void CmdUPDT(const char *Option);

Added: vdr/vdr/trunk/debian/patches/opt-27-x_subtitles-ttxtsubs-volumebar-fix.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-27-x_subtitles-ttxtsubs-volumebar-fix.dpatch	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/opt-27-x_subtitles-ttxtsubs-volumebar-fix.dpatch	2007-01-12 22:28:45 UTC (rev 3851)
@@ -0,0 +1,21 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## opt-27-x_subtitles-ttxtsubs-volumebar-fix.dpatch by Thomas Günther <tom at toms-cafe.de>:
+## 
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Fixes bug in opt-27-x_subtitles-ttxtsubs which causes crash with
+## DP: text2skin + replaybar + volumebar
+## DP: (http://www.vdrportal.de/board/thread.php?postid=351009#post351009)
+
+ at DPATCH@
+diff -Nur vdr-1.4.1/vdr.c vdr-1.4.1.new/vdr.c
+--- vdr-1.4.1/vdr.c	2006-06-27 18:34:24.000000000 +0200
++++ vdr-1.4.1.new/vdr.c	2006-06-27 18:35:09.000000000 +0200
+@@ -975,7 +975,7 @@
+                   }
+                else
+                   cDevice::PrimaryDevice()->SetVolume(NORMALKEY(key) == kVolDn ? -VOLUMEDELTA : VOLUMEDELTA);
+-               if (!Menu /*&& !cOsd::IsOpen()*/)
++               if (!Menu && !cOsd::IsOpen())
+                   Menu = cDisplayVolume::Create();
+                cDisplayVolume::Process(key);
+                key = kNone; // nobody else needs to see these keys

Added: vdr/vdr/trunk/debian/patches/opt-30-x_analogtv.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-30-x_analogtv.dpatch	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/opt-30-x_analogtv.dpatch	2007-01-12 22:28:45 UTC (rev 3851)
@@ -0,0 +1,25 @@
+#!/bin/sh /usr/share/dpatch/dpatch-run
+
+## opt-30-x_analogtv.dpatch by Andreas Kool <akool at gmx.de>
+##
+## extracted from the analogtv plugin 0.3.6
+## original file: vdr-1.3.0.patch
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: This patch is needed for the analogtv plugin.
+
+ at DPATCH@
+--- vdr-1.3.0.orig/channels.c	2004-01-04 13:28:49.000000000 +0100
++++ vdr-1.3.0/channels.c	2004-01-04 18:50:40.000000000 +0100
+@@ -347,9 +347,9 @@
+   ST(" S ")  q += sprintf(q, "%c", polarization);
+   ST("CST")  q += PrintParameter(q, 'I', MapToUser(inversion, InversionValues));
+   ST("CST")  q += PrintParameter(q, 'C', MapToUser(coderateH, CoderateValues));
+-  ST("  T")  q += PrintParameter(q, 'D', MapToUser(coderateL, CoderateValues));
++  ST("C T")  q += PrintParameter(q, 'D', MapToUser(coderateL, CoderateValues));
+   ST("C T")  q += PrintParameter(q, 'M', MapToUser(modulation, ModulationValues));
+-  ST("  T")  q += PrintParameter(q, 'B', MapToUser(bandwidth, BandwidthValues));
++  ST("C T")  q += PrintParameter(q, 'B', MapToUser(bandwidth, BandwidthValues));
+   ST("  T")  q += PrintParameter(q, 'T', MapToUser(transmission, TransmissionValues));
+   ST("  T")  q += PrintParameter(q, 'G', MapToUser(guard, GuardValues));
+   ST("  T")  q += PrintParameter(q, 'Y', MapToUser(hierarchy, HierarchyValues));

Added: vdr/vdr/trunk/debian/patches/opt-35_setup-show-valid.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-35_setup-show-valid.dpatch	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/opt-35_setup-show-valid.dpatch	2007-01-12 22:28:45 UTC (rev 3851)
@@ -0,0 +1,83 @@
+#!/bin/sh /usr/share/dpatch/dpatch-run
+
+## opt-35_setup-show-valid.dpatch by ravemax at vdrportal.de
+##
+## downloaded from http://vdrportal.de/board/thread.php?threadid=25984
+## original file: setup_option-show_valid_input.patch.bz2
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Show if there is a valid setup value left or right with < and >.
+
+ at DPATCH@
+diff -ur vdr_orig/menuitems.c vdr_patched/menuitems.c
+--- vdr_orig/menuitems.c	2004-12-05 17:59:12.452421104 +0100
++++ vdr_patched/menuitems.c	2004-12-05 18:01:54.726751656 +0100
+@@ -31,12 +31,18 @@
+   free(value);
+ }
+ 
+-void cMenuEditItem::SetValue(const char *Value)
++void cMenuEditItem::SetValue(const char *Value, bool HasPre, bool HasSucc)
+ {
+   free(value);
+   value = strdup(Value);
+   char *buffer = NULL;
+-  asprintf(&buffer, "%s:\t%s", name, value);
++  const char* fmt;
++  if (HasPre)
++    fmt = HasSucc ? "%s:\t<%s>" : "%s\t<%s";
++  else
++    fmt = HasSucc ? "%s\t%s>" : "%s\t%s";
++
++  asprintf(&buffer, fmt, name, value);
+   SetText(buffer, false);
+   cStatus::MsgOsdCurrentItem(buffer);
+ }
+@@ -56,7 +62,7 @@
+ {
+   char buf[16];
+   snprintf(buf, sizeof(buf), "%d", *value);
+-  SetValue(buf);
++  SetValue(buf, (*value > min), (*value < max));
+ }
+ 
+ eOSState cMenuEditIntItem::ProcessKey(eKeys Key)
+@@ -111,7 +117,7 @@
+ {
+   char buf[16];
+   snprintf(buf, sizeof(buf), "%s", *value ? trueString : falseString);
+-  SetValue(buf);
++  SetValue(buf, *value, !*value);
+ }
+ 
+ // --- cMenuEditBitItem ------------------------------------------------------
+@@ -459,7 +465,7 @@
+ 
+ void cMenuEditStraItem::Set(void)
+ {
+-  SetValue(strings[*value]);
++  SetValue(strings[*value], (*value > min), (*value < max));
+ }
+ 
+ // --- cMenuEditChanItem -----------------------------------------------------
+@@ -475,7 +481,7 @@
+   char buf[255];
+   cChannel *channel = Channels.GetByNumber(*value);
+   snprintf(buf, sizeof(buf), "%d %s", *value, channel ? channel->Name() : "");
+-  SetValue(buf);
++  SetValue(buf, (*value > 1), (*value < Channels.MaxNumber()));
+ }
+ 
+ eOSState cMenuEditChanItem::ProcessKey(eKeys Key)
+diff -ur vdr_orig/menuitems.h vdr_patched/menuitems.h
+--- vdr_orig/menuitems.h	2004-12-05 17:59:24.719556216 +0100
++++ vdr_patched/menuitems.h	2004-12-05 18:04:29.681195000 +0100
+@@ -21,7 +21,7 @@
+ public:
+   cMenuEditItem(const char *Name);
+   ~cMenuEditItem();
+-  void SetValue(const char *Value);
++  void cMenuEditItem::SetValue(const char *Value, bool HasPre=false, bool HasSucc=false);
+   };
+ 
+ class cMenuEditIntItem : public cMenuEditItem {

Added: vdr/vdr/trunk/debian/patches/opt-36_CutterQueue-AutoDelete.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-36_CutterQueue-AutoDelete.dpatch	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/opt-36_CutterQueue-AutoDelete.dpatch	2007-01-12 22:28:45 UTC (rev 3851)
@@ -0,0 +1,255 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## opt-36_CutterQueue-AutoDelete-0.5.dpatch by Petri.Hintukainen at hut.fi
+## http://www.hut.fi/~phintuka/vdr/vdr-1.3.23-CutterQueue_and_CutterAutoDelete.patch
+##
+## Thomas Günther <tom at toms-cafe.de>:
+##   - adapted to VDR-1.3.25
+##
+## Stefan Wagner <stefanwag at gmx.at>:
+##   - added german translation
+##     http://vdrportal.de/board/thread.php?postid=525334#post525334
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Patch to handle recordings that should be cutted in a queue. With this
+## DP: version the original recordings will be removed after cutting.
+
+ at DPATCH@
+--- vdr-1.3.19-orig/cutter.h	2002-06-22 13:03:15.000000000 +0300
++++ vdr-1.3.19/cutter.h	2005-01-26 18:23:48.000000000 +0200
+@@ -9,17 +9,19 @@
+ 
+ #ifndef __CUTTER_H
+ #define __CUTTER_H
+ 
+ class cCuttingThread;
++class cMutex;
+ 
+ class cCutter {
+ private:
+   static char *editedVersionName;
+   static cCuttingThread *cuttingThread;
+   static bool error;
+   static bool ended;
++  static cMutex *cutterLock;
+ public:
+   static bool Start(const char *FileName);
+   static void Stop(void);
+   static bool Active(void);
+   static bool Error(void);
+--- vdr-1.3.19-orig/cutter.c	2004-06-13 19:04:08.000000000 +0300
++++ vdr-1.3.19/cutter.c	2005-01-27 17:24:03.602233992 +0200
+@@ -11,10 +11,11 @@
+ #include "recording.h"
+ #include "remux.h"
+ #include "thread.h"
+ #include "videodir.h"
+ 
++
+ // --- cCuttingThread --------------------------------------------------------
+ 
+ class cCuttingThread : public cThread {
+ private:
+   const char *error;
+@@ -176,17 +177,59 @@
+      esyslog("no editing marks found!");
+ }
+ 
+ // --- cCutter ---------------------------------------------------------------
+ 
++#define WAIT_BEFORE_NEXT_CUT   (10*1000)  // 10 seconds
++
++#define CUTTER_QUEUE
++#define CUTTER_AUTO_DELETE
++
++class cStringListObject : public cListObject {
++  public:
++    cStringListObject(const char *s) { str = strdup(s); }
++    ~cStringListObject() { free(str); }
++
++    const char *Value() { return str; }
++    operator const char * () { return str; }
++
++  private:  
++    char *str;
++};
++
+ char *cCutter::editedVersionName = NULL;
+ cCuttingThread *cCutter::cuttingThread = NULL;
+ bool cCutter::error = false;
+ bool cCutter::ended = false;
++cMutex *cCutter::cutterLock = new cMutex();
++
++static uint64 /*cCutter::*/lastCuttingEndTime = 0;
++static cList<cStringListObject> /**cCutter::*/cutterQueue /*= new cList<cStringListObject>*/;
+ 
+ bool cCutter::Start(const char *FileName)
+ {
++  cMutexLock(cutterLock);
++
++#ifdef CUTTER_QUEUE
++  if(FileName) {
++    /* Add file to queue.
++     * If cutter is still active, next cutting will be started 
++     * when vdr.c:main calls cCutter::Active and previous cutting has 
++     * been stopped > 10 s before 
++     */
++    cutterQueue.Add(new cStringListObject(FileName));
++  }
++
++  if (cuttingThread) 
++    return true;
++
++  /* cut next file from queue */
++  if(!(cutterQueue.First()))
++    return false;
++  FileName = cutterQueue.First()->Value();
++#endif
++
+   if (!cuttingThread) {
+      error = false;
+      ended = false;
+      cRecording Recording(FileName);
+      const char *evn = Recording.PrefixFileName('%');
+@@ -215,6 +258,8 @@
+ 
+ void cCutter::Stop(void)
+ {
++  cMutexLock(cutterLock);
++
+   bool Interrupted = cuttingThread && cuttingThread->Active();
+   const char *Error = cuttingThread ? cuttingThread->Error() : NULL;
+   delete cuttingThread;
+@@ -224,37 +271,73 @@
+         isyslog("editing process has been interrupted");
+      if (Error)
+         esyslog("ERROR: '%s' during editing process", Error);
+      RemoveVideoFile(editedVersionName); //XXX what if this file is currently being replayed?
+      Recordings.DelByName(editedVersionName);
++#ifdef CUTTER_QUEUE
++     cutterQueue.Del(cutterQueue.First());
++#endif
+      }
++#ifdef CUTTER_QUEUE
++  lastCuttingEndTime = cTimeMs::Now();
++#endif
+ }
+ 
+ bool cCutter::Active(void)
+ {
++  cMutexLock(cutterLock);
++
+   if (cuttingThread) {
+      if (cuttingThread->Active())
+         return true;
+      error = cuttingThread->Error();
+      Stop();
+      if (!error)
+         cRecordingUserCommand::InvokeCommand(RUC_EDITEDRECORDING, editedVersionName);
+      free(editedVersionName);
+      editedVersionName = NULL;
+      ended = true;
++#ifdef CUTTER_AUTO_DELETE
++     /* Remove original (if cutting was successful) */
++     if(!error) {
++       cRecording *recording = Recordings.GetByName(*cutterQueue.First());
++       if (!recording) {
++	 esyslog("ERROR: Can't found '%s' after editing process", cutterQueue.First()->Value());
++       } else {
++	 if (recording->Delete()) 
++	   Recordings.Del(recording);
++	 else
++	   esyslog("ERROR: Can't delete '%s' after editing process", cutterQueue.First()->Value());
++       }
++     }
++    lastCuttingEndTime = cTimeMs::Now();
++#endif
++#ifdef CUTTER_QUEUE
++     cutterQueue.Del(cutterQueue.First());
++#endif
+      }
++#ifdef CUTTER_QUEUE
++  if(!cuttingThread && cutterQueue.First()) {
++    /* start next cutting from queue*/
++    if(cTimeMs::Now() > lastCuttingEndTime + WAIT_BEFORE_NEXT_CUT)
++      Start(NULL);
++  }
++#endif
++
+   return false;
+ }
+ 
+ bool cCutter::Error(void)
+ {
++  cMutexLock(cutterLock);
+   bool result = error;
+   error = false;
+   return result;
+ }
+ 
+ bool cCutter::Ended(void)
+ {
++  cMutexLock(cutterLock);
+   bool result = ended;
+   ended = false;
+   return result;
+ }
+--- vdr-1.3.12-orig/menu.c	2004-06-13 23:26:51.000000000 +0300
++++ vdr-1.3.12/menu.c	2004-10-01 21:00:42.000000000 +0300
+@@ -3277,20 +3557,25 @@
+
+ void cReplayControl::EditCut(void)
+ {
+   if (fileName) {
+      Hide();
++#if 0
+      if (!cCutter::Active()) {
++#else
++     if (!cCutter::Active() || Interface->Confirm(tr("Cutter already running - Add to cutting queue?"))) {
++#endif
+         if (!marks.Count())
+            Skins.Message(mtError, tr("No editing marks defined!"));
+         else if (!cCutter::Start(fileName))
+            Skins.Message(mtError, tr("Can't start editing process!"));
+         else
+            Skins.Message(mtInfo, tr("Editing process started"));
+         }
+-     else
++     else
+         Skins.Message(mtError, tr("Editing process already active!"));
++
+      ShowMode();
+      }
+ }
+
+ void cReplayControl::EditTest(void)
+--- vdr-1.4.2.orig/i18n.c	2006-05-05 15:26:09.000000000 +0200
++++ vdr-1.4.2/i18n.c	2006-08-29 14:28:34.000000000 +0200
+@@ -2422,6 +2422,28 @@
+     "Kan ikke starte Transfer Mode!",
+     "Nelze zaèít s pøenosem",
+   },
++  { "Cutter already running - Add to cutting queue?",
++    "Schnitt läuft bereits - Zur Warteschlange hinzufügen?",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
+   { "No editing marks defined!",
+     "Keine Schnittmarken gesetzt!",
+     "Nobena prekinitvena toèka ni definirana!",

Added: vdr/vdr/trunk/debian/patches/opt-36_CutterQueue.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-36_CutterQueue.dpatch	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/opt-36_CutterQueue.dpatch	2007-01-12 22:28:45 UTC (rev 3851)
@@ -0,0 +1,254 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## opt-36_CutterQueue-0.5.dpatch by Petri.Hintukainen at hut.fi
+## http://www.hut.fi/~phintuka/vdr/vdr-1.3.23-CutterQueue.patch
+##
+## Thomas Günther <tom at toms-cafe.de>:
+##   - adapted to VDR-1.3.25
+##
+## Stefan Wagner <stefanwag at gmx.at>:
+##   - added german translation
+##     http://vdrportal.de/board/thread.php?postid=525334#post525334
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Patch to handle recordings that should be cutted in a queue.
+
+ at DPATCH@
+--- vdr-1.3.19-orig/cutter.h	2002-06-22 13:03:15.000000000 +0300
++++ vdr-1.3.19/cutter.h	2005-01-26 18:23:48.000000000 +0200
+@@ -9,17 +9,19 @@
+ 
+ #ifndef __CUTTER_H
+ #define __CUTTER_H
+ 
+ class cCuttingThread;
++class cMutex;
+ 
+ class cCutter {
+ private:
+   static char *editedVersionName;
+   static cCuttingThread *cuttingThread;
+   static bool error;
+   static bool ended;
++  static cMutex *cutterLock;
+ public:
+   static bool Start(const char *FileName);
+   static void Stop(void);
+   static bool Active(void);
+   static bool Error(void);
+--- vdr-1.3.19-orig/cutter.c	2004-06-13 19:04:08.000000000 +0300
++++ vdr-1.3.19/cutter.c	2005-01-27 17:24:03.602233992 +0200
+@@ -11,10 +11,11 @@
+ #include "recording.h"
+ #include "remux.h"
+ #include "thread.h"
+ #include "videodir.h"
+ 
++
+ // --- cCuttingThread --------------------------------------------------------
+ 
+ class cCuttingThread : public cThread {
+ private:
+   const char *error;
+@@ -176,17 +177,59 @@
+      esyslog("no editing marks found!");
+ }
+ 
+ // --- cCutter ---------------------------------------------------------------
+ 
++#define WAIT_BEFORE_NEXT_CUT   (10*1000)  // 10 seconds
++
++#define CUTTER_QUEUE
++//#define CUTTER_AUTO_DELETE
++
++class cStringListObject : public cListObject {
++  public:
++    cStringListObject(const char *s) { str = strdup(s); }
++    ~cStringListObject() { free(str); }
++
++    const char *Value() { return str; }
++    operator const char * () { return str; }
++
++  private:  
++    char *str;
++};
++
+ char *cCutter::editedVersionName = NULL;
+ cCuttingThread *cCutter::cuttingThread = NULL;
+ bool cCutter::error = false;
+ bool cCutter::ended = false;
++cMutex *cCutter::cutterLock = new cMutex();
++
++static uint64 /*cCutter::*/lastCuttingEndTime = 0;
++static cList<cStringListObject> /**cCutter::*/cutterQueue /*= new cList<cStringListObject>*/;
+ 
+ bool cCutter::Start(const char *FileName)
+ {
++  cMutexLock(cutterLock);
++
++#ifdef CUTTER_QUEUE
++  if(FileName) {
++    /* Add file to queue.
++     * If cutter is still active, next cutting will be started 
++     * when vdr.c:main calls cCutter::Active and previous cutting has 
++     * been stopped > 10 s before 
++     */
++    cutterQueue.Add(new cStringListObject(FileName));
++  }
++
++  if (cuttingThread) 
++    return true;
++
++  /* cut next file from queue */
++  if(!(cutterQueue.First()))
++    return false;
++  FileName = cutterQueue.First()->Value();
++#endif
++
+   if (!cuttingThread) {
+      error = false;
+      ended = false;
+      cRecording Recording(FileName);
+      const char *evn = Recording.PrefixFileName('%');
+@@ -215,6 +258,8 @@
+ 
+ void cCutter::Stop(void)
+ {
++  cMutexLock(cutterLock);
++
+   bool Interrupted = cuttingThread && cuttingThread->Active();
+   const char *Error = cuttingThread ? cuttingThread->Error() : NULL;
+   delete cuttingThread;
+@@ -224,37 +271,73 @@
+         isyslog("editing process has been interrupted");
+      if (Error)
+         esyslog("ERROR: '%s' during editing process", Error);
+      RemoveVideoFile(editedVersionName); //XXX what if this file is currently being replayed?
+      Recordings.DelByName(editedVersionName);
++#ifdef CUTTER_QUEUE
++     cutterQueue.Del(cutterQueue.First());
++#endif
+      }
++#ifdef CUTTER_QUEUE
++  lastCuttingEndTime = cTimeMs::Now();
++#endif
+ }
+ 
+ bool cCutter::Active(void)
+ {
++  cMutexLock(cutterLock);
++
+   if (cuttingThread) {
+      if (cuttingThread->Active())
+         return true;
+      error = cuttingThread->Error();
+      Stop();
+      if (!error)
+         cRecordingUserCommand::InvokeCommand(RUC_EDITEDRECORDING, editedVersionName);
+      free(editedVersionName);
+      editedVersionName = NULL;
+      ended = true;
++#ifdef CUTTER_AUTO_DELETE
++     /* Remove original (if cutting was successful) */
++     if(!error) {
++       cRecording *recording = Recordings.GetByName(*cutterQueue.First());
++       if (!recording) {
++	 esyslog("ERROR: Can't found '%s' after editing process", cutterQueue.First()->Value());
++       } else {
++	 if (recording->Delete()) 
++	   Recordings.Del(recording);
++	 else
++	   esyslog("ERROR: Can't delete '%s' after editing process", cutterQueue.First()->Value());
++       }
++     }
++    lastCuttingEndTime = cTimeMs::Now();
++#endif
++#ifdef CUTTER_QUEUE
++     cutterQueue.Del(cutterQueue.First());
++#endif
+      }
++#ifdef CUTTER_QUEUE
++  if(!cuttingThread && cutterQueue.First()) {
++    /* start next cutting from queue*/
++    if(cTimeMs::Now() > lastCuttingEndTime + WAIT_BEFORE_NEXT_CUT)
++      Start(NULL);
++  }
++#endif
++
+   return false;
+ }
+ 
+ bool cCutter::Error(void)
+ {
++  cMutexLock(cutterLock);
+   bool result = error;
+   error = false;
+   return result;
+ }
+ 
+ bool cCutter::Ended(void)
+ {
++  cMutexLock(cutterLock);
+   bool result = ended;
+   ended = false;
+   return result;
+ }
+--- vdr-1.3.12-orig/menu.c	2004-06-13 23:26:51.000000000 +0300
++++ vdr-1.3.12/menu.c	2004-10-01 21:00:42.000000000 +0300
+@@ -3277,20 +3557,25 @@
+
+ void cReplayControl::EditCut(void)
+ {
+   if (fileName) {
+      Hide();
++#if 0
+      if (!cCutter::Active()) {
++#else
++     if (!cCutter::Active() || Interface->Confirm(tr("Cutter already running - Add to cutting queue?"))) {
++#endif
+         if (!marks.Count())
+            Skins.Message(mtError, tr("No editing marks defined!"));
+         else if (!cCutter::Start(fileName))
+            Skins.Message(mtError, tr("Can't start editing process!"));
+         else
+            Skins.Message(mtInfo, tr("Editing process started"));
+         }
+-     else
++     else
+         Skins.Message(mtError, tr("Editing process already active!"));
++
+      ShowMode();
+      }
+ }
+
+ void cReplayControl::EditTest(void)
+--- vdr-1.4.2.orig/i18n.c	2006-05-05 15:26:09.000000000 +0200
++++ vdr-1.4.2/i18n.c	2006-08-29 14:28:34.000000000 +0200
+@@ -2422,6 +2422,28 @@
+     "Kan ikke starte Transfer Mode!",
+     "Nelze zaèít s pøenosem",
+   },
++  { "Cutter already running - Add to cutting queue?",
++    "Schnitt läuft bereits - Zur Warteschlange hinzufügen?",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
+   { "No editing marks defined!",
+     "Keine Schnittmarken gesetzt!",
+     "Nobena prekinitvena toèka ni definirana!",

Added: vdr/vdr/trunk/debian/patches/opt-37_submenu.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-37_submenu.dpatch	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/opt-37_submenu.dpatch	2007-01-12 22:28:45 UTC (rev 3851)
@@ -0,0 +1,690 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## opt-37_submenu.dpatch by Jlac, Sad <sad at ntica.com> (submenu plugin)
+## extracted from submenu plugin 0.0.2
+## original filename: vdr-submenu-patch-1.3.1x-from-orig.diff
+##
+## Tobias Grimm <tg at e-tobi.net>:
+##   - free char buffers allocated by asprintf
+## Thomas Günther <tom at toms-cafe.de>:
+##   - made independend from enAIO patch
+##   - fixed current menu item
+##   - set count of submenu entries to 255
+##   - adapted to VDR-1.3.38
+##   - fixed problems with MenuCmdPosition=top (from liemikuutio (enAIO) patch)
+##   http://toms-cafe.de/vdr/download/vdr-submenu-0.7-1.3.38+.diff
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: This patch is needed for the submenu plugin.
+
+ at DPATCH@
+diff -Naur vdr-1.3.42/Makefile vdr-1.3.42-submenu-0.7/Makefile
+--- vdr-1.3.42/Makefile	2006-02-05 14:37:11.000000000 +0100
++++ vdr-1.3.42-submenu-0.7/Makefile	2006-02-07 14:53:28.000000000 +0100
+@@ -49,7 +49,7 @@
+        lirc.o menu.o menuitems.o nit.o osdbase.o osd.o pat.o player.o plugin.o rcu.o\
+        receiver.o recorder.o recording.o remote.o remux.o ringbuffer.o sdt.o sections.o\
+        skinclassic.o skins.o skinsttng.o sources.o spu.o status.o svdrp.o themes.o thread.o\
+-       timers.o tools.o transfer.o vdr.o videodir.o
++       timers.o tools.o transfer.o vdr.o videodir.o submenu.o
+ 
+ FIXFONT_ISO8859_1 = -adobe-courier-bold-r-normal--25-*-100-100-m-*-iso8859-1
+ OSDFONT_ISO8859_1 = -adobe-helvetica-medium-r-normal--23-*-100-100-p-*-iso8859-1
+diff -Naur vdr-1.3.42/menu.c vdr-1.3.42-submenu-0.7/menu.c
+--- vdr-1.3.42/menu.c	2006-02-05 14:31:08.000000000 +0100
++++ vdr-1.3.42-submenu-0.7/menu.c	2006-02-07 14:53:28.000000000 +0100
+@@ -2773,11 +2773,110 @@
+   SetTitle("VDR");
+   SetHasHotkeys();
+ 
+-  // Basic menu items:
+-
+-  Add(new cOsdItem(hk(tr("Schedule")),   osSchedule));
+-  Add(new cOsdItem(hk(tr("Channels")),   osChannels));
+-  Add(new cOsdItem(hk(tr("Timers")),     osTimers));
++//SubMenu Patch
++  bool SubMenuActive=cPluginManager::GetPlugin("submenu");
++  if (SubMenuActive)
++	submenu.offset = Count();
++
++if (SubMenuActive) // if ( SubmenuActive && !Plugin)
++{
++cPlugin *p;
++/*
++0::Schedule
++0::Channels
++0:1:Games
++1::games
++1::freecell
++1::solitaire
++*/
++
++// Parse info of current Menu
++// add item of menu
++	for( int i = 0; i < submenu.nbSubMenuItem; i++)
++	{
++		if( submenu.subMenuItem[i].menuLevel == submenu.currentMenuLevel )
++		{
++			if( submenu.subMenuItem[i].kindOfItem == 0 )
++			{
++			// Basic menu items:
++				if( strcmp(submenu.subMenuItem[i].name,"Schedule") == 0 )
++					Add(new cOsdItem(hk(tr("Schedule")),   osSchedule));
++
++				if( strcmp(submenu.subMenuItem[i].name,"Channels") == 0 )
++					Add(new cOsdItem(hk(tr("Channels")),   osChannels));
++
++				if( strcmp(submenu.subMenuItem[i].name,"Timers") == 0 )
++					Add(new cOsdItem(hk(tr("Timers")),     osTimers));
++
++				if( strcmp(submenu.subMenuItem[i].name,"Recordings") == 0 )
++					Add(new cOsdItem(hk(tr("Recordings")), osRecordings));
++                                if( strcmp(submenu.subMenuItem[i].name,"Setup") == 0 )
++					                                        Add(new cOsdItem(hk(tr("Setup")),      osSetup));
++
++				if( strcmp(submenu.subMenuItem[i].name,"Commands") == 0 )
++				{
++					if (Commands.Count())
++						Add(new cOsdItem(hk(tr("Commands")),  osCommands));
++				}
++				// Plugins Item:
++				int j=0;
++				do
++				{
++					p = cPluginManager::GetPlugin(j);
++					if( p != NULL )
++					{
++						const char *item = p->MainMenuEntry();
++						if (item)
++						{
++							if( strcmp( submenu.subMenuItem[i].name , p->Name() ) == 0 )
++							Add(new cMenuPluginItem(hk(item), j));
++						}
++				}
++				j++;
++		}
++		while( p != NULL);
++	}
++        else
++	{
++		Add(new cOsdItem(hk(submenu.subMenuItem[i].name), osUser9));
++	}
++    }
++}
++      /* Add all plugin entry not listed in config file  */
++if ( submenu.currentMenuLevel == 0 )
++{
++	int j=0;
++	do
++	{
++		p = cPluginManager::GetPlugin(j);
++		if( p != NULL )
++		{
++			const char *item = p->MainMenuEntry();
++			if (item)
++			{
++				int trv = 0;
++				for( int i = 0; i < submenu.nbSubMenuItem; i++)
++				{
++					if( strcmp( submenu.subMenuItem[i].name , p->Name() ) == 0 )
++						trv = 1;
++				}
++				if(trv == 0)
++					Add(new cMenuPluginItem(hk(item), j));
++			}
++		}
++		j++;
++	}
++	while( p != NULL);
++	}
++
++}
++else
++{
++// Basic menu items:
++
++Add(new cOsdItem(hk(tr("Schedule")),   osSchedule));
++Add(new cOsdItem(hk(tr("Channels")),   osChannels));
++Add(new cOsdItem(hk(tr("Timers")),     osTimers));
+   Add(new cOsdItem(hk(tr("Recordings")), osRecordings));
+ 
+   // Plugins:
+@@ -2798,6 +2897,7 @@
+   Add(new cOsdItem(hk(tr("Setup")),      osSetup));
+   if (Commands.Count())
+      Add(new cOsdItem(hk(tr("Commands")),  osCommands));
++}
+ 
+   Update(true);
+ 
+@@ -2809,6 +2909,10 @@
+ bool cMenuMain::Update(bool Force)
+ {
+   bool result = false;
++  bool SubMenuActive=cPluginManager::GetPlugin("submenu");
++  cOsdItem* first = NULL;
++  if (SubMenuActive)
++     first = Get(submenu.offset);
+ 
+   // Title with disk usage:
+   if (Force || time(NULL) - lastDiskSpaceCheck > DISKSPACECHEK) {
+@@ -2874,6 +2978,9 @@
+      result = true;
+      }
+ 
++  if (SubMenuActive && first)
++     submenu.offset = first->Index();
++
+   return result;
+ }
+ 
+@@ -2904,6 +3011,24 @@
+                           return osEnd;
+                           }
+                        break;
++    case osBack:
++		       if (submenu.nbLevelMenu > 0)
++		       {
++			       submenu.nbLevelMenu--;
++			       submenu.currentMenuLevel = submenu.oldNumberMenu[ submenu.nbLevelMenu ];
++			       Set();
++			       return osContinue;
++		       }	
++		       else
++			       return osEnd;
++		       break;
++    case osUser9:
++		       submenu.oldNumberMenu[ submenu.nbLevelMenu] = submenu.currentMenuLevel;
++		       submenu.nbLevelMenu++;
++		       submenu.currentMenuLevel = submenu.GetByLevel(submenu.currentMenuLevel,Current()-submenu.offset);
++		       Set();
++		       return osContinue;
++		       break;
+     case osPlugin:     {
+                          cMenuPluginItem *item = (cMenuPluginItem *)Get(Current());
+                          if (item) {
+diff -Naur vdr-1.3.42/menu.h vdr-1.3.42-submenu-0.7/menu.h
+--- vdr-1.3.42/menu.h	2006-01-22 15:24:31.000000000 +0100
++++ vdr-1.3.42-submenu-0.7/menu.h	2006-02-07 14:53:28.000000000 +0100
+@@ -18,6 +18,7 @@
+ #include "menuitems.h"
+ #include "recorder.h"
+ #include "skins.h"
++#include "submenu.h"
+ 
+ class cMenuText : public cOsdMenu {
+ private:
+@@ -55,6 +56,7 @@
+ 
+ class cMenuMain : public cOsdMenu {
+ private:
++  cSubMenu submenu;
+   time_t lastDiskSpaceCheck;
+   int lastFreeMB;
+   bool replaying;
+diff -Naur vdr-1.3.42/submenu.c vdr-1.3.42-submenu-0.7/submenu.c
+--- vdr-1.3.42/submenu.c	1970-01-01 01:00:00.000000000 +0100
++++ vdr-1.3.42-submenu-0.7/submenu.c	2006-02-07 14:53:28.000000000 +0100
+@@ -0,0 +1,397 @@
++#include "submenu.h"
++#include <string.h>
++#include <stdio.h>
++#include "plugin.h"
++
++cSubMenuItemInfo::cSubMenuItemInfo()
++	{
++	    menuLevel = 0;
++	    kindOfItem = 0;
++	    name[0] = 0;
++	}
++
++cSubMenuItemInfo::~cSubMenuItemInfo()
++{
++}
++
++void cSubMenuItemInfo::setname(const char *n)
++{
++	int i,l;
++	l = strlen(n);
++
++	for(i=0;i<SIZEMAXNAMESUBMENUITEMINFO;i++)
++	name[i] = 0;
++
++	if( l >= SIZEMAXNAMESUBMENUITEMINFO )
++	l = SIZEMAXNAMESUBMENUITEMINFO;
++
++	for(i=0;i<l;i++)
++	{
++		name[i] = n[i];
++	}
++    name[i]=0;
++    name[l]=0;
++} 
++
++
++void cSubMenu::LoadInfoSubMenu(void)
++{
++	FILE *f;
++	char *fichier;
++	char lig[80];
++	int j;
++
++	
++	nbSubMenuItem = 0;
++	asprintf(&fichier,"%s/MainMenu.conf",cPlugin::ConfigDirectory());
++	f = fopen(fichier,"rt");
++	if ( f != NULL)
++	{
++		while (fgets(lig,80,f) ) 
++		{
++			ParseOneLigOfFile( lig );
++		}
++		fclose(f);
++	}
++	else
++	{
++		/* -- create example file -- */
++		FILE *fo;
++		cPlugin *p;
++
++		fo=fopen(fichier,"wt");
++		if (fo!=NULL)
++		{
++			fprintf(fo,"0::Schedule\n");
++			fprintf(fo,"0::Channels\n");
++			fprintf(fo,"0:1:Recorder\n");
++			fprintf(fo,"0:2:Plugins\n");
++			fprintf(fo,"0:3:Games\n");
++			fprintf(fo,"0:4:Installation\n");
++
++			fprintf(fo,"1::Timers\n");
++			fprintf(fo,"1::Recordings\n");
++			fprintf(fo,"4::Setup\n");
++			fprintf(fo,"4::Commands\n");
++
++			// Plugins Item:
++			j=0;
++			do
++			{
++				p = cPluginManager::GetPlugin(j);
++				if ( p != NULL )
++				{
++					fprintf(fo,"2::%s\n",p->Name());
++				}
++				j++;
++			}
++			while (p !=NULL);
++
++			fclose(fo);
++			LoadInfoSubMenu();
++			Arbo.Populate(this);
++		}
++		/* -- Create example file -- */
++	}
++	free(fichier);
++}
++
++void cSubMenu::ParseOneLigOfFile(const char *lig)
++{
++	int level=-1;
++	int kind=-1;
++	int i,j,l;
++	char txt[SIZEMAXNAMESUBMENUITEMINFO];
++	char name[SIZEMAXNAMESUBMENUITEMINFO];
++	int fin,status = 0;
++	int namefound = 0;
++
++	l = strlen(lig);
++
++	name[0]= 0;
++
++	fin = 0;
++
++	i=0;j=0;
++
++	while( fin == 0)
++	{
++		switch(status)
++		{
++			case 0: //looking for level
++				txt[j++] = lig[i];
++				if ( lig[i] == ':' )
++				{
++					txt[j] = 0;
++					status ++;
++					level = atoi(txt);
++					j = 0;
++				}
++
++				break;
++			case 1:
++				txt[j++] = lig[i];
++				if (lig[i] == ':')
++				{
++					txt[j] = 0;
++					status ++;
++					kind = atoi(txt);
++					j = 0;
++				}
++				break;
++			case 2:
++				if (lig[i]>32 || lig[i]<0)
++					name[j++] = lig[i];
++				if(lig[i]== 0)
++				{
++					name[j]=0;
++					namefound=1;
++					status++;
++				}
++
++				break;
++			default:
++				break;
++
++		}
++		if (lig[i] == '/')
++			fin = 1;
++		if (lig[i] == 0)
++			fin = 1;
++		if ( i == l )
++			fin = 1;
++
++		i++;
++	}
++
++	if (level!=-1 && kind!=-1 && namefound==1)
++	{
++		name[j]=0;
++		subMenuItem[nbSubMenuItem].menuLevel = level;
++		subMenuItem[nbSubMenuItem].kindOfItem = kind;
++		subMenuItem[nbSubMenuItem].setname(name);
++		nbSubMenuItem++;
++	}
++}
++
++void cSubMenu::SaveInfoSubMenu()
++{
++	//Dump();
++	FILE *f;
++	char *fichier;
++	asprintf(&fichier,"%s/MainMenu.conf",cPlugin::ConfigDirectory());
++	f=fopen(fichier,"w");
++	if (f)
++	{
++	  for (int i=0;i<nbSubMenuItem;i++)
++	  {
++		  fprintf(f,"%i:%i:%s\n",subMenuItem[i].menuLevel,subMenuItem[i].kindOfItem,subMenuItem[i].name);
++	  }
++	  fclose(f);
++	}
++	free(fichier);
++}
++
++cSubMenu::~cSubMenu()
++{
++	delete [] subMenuItem;
++}
++
++cSubMenu::cSubMenu()
++{
++	subMenuItem = new cSubMenuItemInfo[NBMAXSUBMENUANDITEM];
++
++	nbLevelMenu = 0;
++	currentMenuLevel = 0;
++	LoadInfoSubMenu();
++	Arbo.Populate(this);
++	offset=0;
++}
++
++int cSubMenu::GetByLevel (int Level, int curr)
++{
++	int j=0;
++	int Index[NBMAXSUBMENUANDITEM];
++	for (int i=0;i<nbSubMenuItem;i++)
++	{
++		if (subMenuItem[i].menuLevel==Level)
++		{
++			Index[j]=i;
++			j++;
++		}
++	}
++	return subMenuItem[Index[curr]].kindOfItem;
++}
++int cSubMenu::GetByLevel (int Level)
++{
++	/*
++	int Index[NBMAXSUBMENUANDITEM];
++	int j=0;
++	for (int i=0;i<nbSubMenuItem;i++)
++	{
++		if (subMenuItem[i].menuLevel==Level)
++		{
++			Index[j]=i;
++			j++;
++		}
++	Index[j]=-1;
++	}
++	return Index;
++	*/
++	return 0;
++}
++
++void cSubMenu::CreateItem(int type,int position,int where,char *Name)
++{ 
++	int OldMenuLevel;
++	switch(type)
++	{
++		case 0:
++			switch(where)
++			{
++				case 0:
++					OldMenuLevel=subMenuItem[position].menuLevel;
++					InsertItem(position);
++					subMenuItem[position].setname(Name);
++					subMenuItem[position].menuLevel=OldMenuLevel;
++					subMenuItem[position].kindOfItem=Arbo.MaxLevel+1;
++					break;
++				case 1: 
++					OldMenuLevel=subMenuItem[position].menuLevel;
++					InsertItem(position);
++					subMenuItem[position+1].setname(Name);
++					subMenuItem[position+1].menuLevel=OldMenuLevel;
++					subMenuItem[position+1].kindOfItem=Arbo.MaxLevel+1;
++					break;
++				case 2:
++					OldMenuLevel=subMenuItem[position].kindOfItem;
++					InsertItem(position);
++					subMenuItem[position+1].setname(Name);
++					subMenuItem[position+1].menuLevel=OldMenuLevel;
++					subMenuItem[position+1].kindOfItem=Arbo.MaxLevel+1;
++					break;
++				default:
++					break;
++			}
++			Arbo.Populate(this);
++			break;
++		case 1 :
++			switch(where)
++			{
++				case 0:
++					OldMenuLevel=subMenuItem[position].menuLevel;
++					InsertItem(position);
++					subMenuItem[position].setname(Name);
++					subMenuItem[position].menuLevel=OldMenuLevel;
++					subMenuItem[position].kindOfItem=0;
++					break;
++				case 1:
++					OldMenuLevel=subMenuItem[position].menuLevel;
++					InsertItem(position);
++					subMenuItem[position+1].setname(Name);
++					subMenuItem[position+1].menuLevel=OldMenuLevel;
++					subMenuItem[position+1].kindOfItem=0;
++					break;
++				case 2:
++					OldMenuLevel=subMenuItem[position].kindOfItem;
++					InsertItem(position);
++					subMenuItem[position+1].setname(Name);
++					subMenuItem[position+1].menuLevel=OldMenuLevel;
++					subMenuItem[position+1].kindOfItem=0;
++					break;
++			}
++			Arbo.Populate(this);
++			break;
++		default :
++			break;
++	}
++}
++void cSubMenu::Dump(void)
++{
++	for (int i=0;i<nbSubMenuItem;i++)
++	{
++		fprintf(stderr,"%i Nom : %s Menu : %i Kind : %i\n",i,subMenuItem[i].name,subMenuItem[i].menuLevel,subMenuItem[i].kindOfItem);
++	}
++}
++
++void cSubMenu::DeleteItem(int position,int kindItem)
++{
++	int Kind;
++	if (kindItem!=-1)
++		Kind=kindItem;
++	else
++		Kind=subMenuItem[position].kindOfItem;
++	for(int i=position;i<nbSubMenuItem;i++)
++	{
++		subMenuItem[i]=subMenuItem[i+1];	
++	}
++	nbSubMenuItem--;
++	Arbo.Populate(this);
++	if (Kind!=0)
++	{
++		for(int i=position;i<nbSubMenuItem;i++)
++		{
++			if (subMenuItem[i].menuLevel==Kind)
++			{
++				DeleteItem(i,subMenuItem[i].kindOfItem);
++				i--;
++			}
++		}
++	}
++	Arbo.Populate(this);
++}
++
++void cSubMenu::InsertItem(int position)
++{
++	for (int i=nbSubMenuItem;i>position;i--)
++	{
++		subMenuItem[i]=subMenuItem[i-1];
++	}
++	nbSubMenuItem++;
++	Arbo.Populate(this);
++}
++
++
++cArbo::cArbo(void)
++{
++	MaxLevel=0;
++	for (int i=0;i<NBMAXSUBMENUANDITEM;i++)
++	{
++		MaxItem[i]=0;
++	}
++}
++
++void cArbo::Clear()
++{
++	MaxLevel=0;
++	for (int i=0;i<NBMAXSUBMENUANDITEM;i++)
++	{
++		MaxItem[i]=0;
++		for (int j=0;j<NBMAXSUBMENUANDITEM;j++)
++		{
++			Index[i][j]=0;
++		}
++	}
++}
++
++cArbo::~cArbo(void)
++{
++}
++
++void cArbo::Populate(cSubMenu *submenu)
++{
++  Clear();
++  for (int i=0;i<submenu->nbSubMenuItem;i++)
++  {
++  Index[ submenu->subMenuItem[i].menuLevel ][ submenu->Arbo.MaxItem[submenu->subMenuItem[i].menuLevel]] = i;
++  submenu->Arbo.MaxItem[submenu->subMenuItem[i].menuLevel]++;
++  if (submenu->subMenuItem[i].menuLevel > submenu->Arbo.MaxLevel) 
++	  {
++		  submenu->Arbo.MaxLevel = submenu->subMenuItem[i].menuLevel;
++	  }
++  if (submenu->subMenuItem[i].kindOfItem > submenu->Arbo.MaxLevel)
++	  {
++		  submenu->Arbo.MaxLevel = submenu->subMenuItem[i].kindOfItem;
++	  }
++  }
++}
+diff -Naur vdr-1.3.42/submenu.h vdr-1.3.42-submenu-0.7/submenu.h
+--- vdr-1.3.42/submenu.h	1970-01-01 01:00:00.000000000 +0100
++++ vdr-1.3.42-submenu-0.7/submenu.h	2006-02-07 14:53:28.000000000 +0100
+@@ -0,0 +1,62 @@
++#ifndef __SUBMENU_H
++#define __SUBMENU_H
++
++#define SIZEMAXNAMESUBMENUITEMINFO 30
++#define NBMAXSUBMENUANDITEM 255
++
++class cSubMenu;
++
++class cSubMenuItemInfo
++{
++	private:
++	public:
++		cSubMenuItemInfo();
++		~cSubMenuItemInfo();
++
++		int menuLevel;
++		int kindOfItem;
++		char name[SIZEMAXNAMESUBMENUITEMINFO];  //todo revoir ca(la taille en dur)
++
++		void setname(const char *n);
++};
++
++class cArbo
++{
++	private:
++	public:
++	      cArbo(void);
++	      ~cArbo(void);
++	      int Index[NBMAXSUBMENUANDITEM][NBMAXSUBMENUANDITEM];
++	      int CurrentIndex[NBMAXSUBMENUANDITEM];
++	      int MaxLevel;
++	      int MaxItem[NBMAXSUBMENUANDITEM];
++	      void Populate(cSubMenu *submenu);
++              void Clear(void);
++};
++
++class cSubMenu
++{
++	private:
++	public:
++		int currentMenuLevel;
++		cSubMenuItemInfo *subMenuItem;
++		cArbo Arbo;
++		int nbSubMenuItem;
++		int oldNumberMenu[ NBMAXSUBMENUANDITEM ];
++		int nbLevelMenu;
++
++		int offset; // For MenuCmdPosition issue
++
++		cSubMenu();
++		virtual ~cSubMenu();
++		void LoadInfoSubMenu(void);
++		void ParseOneLigOfFile (const char *lig);
++		void SaveInfoSubMenu(void);
++		int GetByLevel(int Level, int curr);
++		int GetByLevel(int Level);
++	        void CreateItem(int type,int position,int where,char *Name="");
++	        void DeleteItem(int position,int kindItem=-1);
++		void InsertItem(int position);
++		void Dump(void);
++};
++#endif //__SUBMENU_H

Added: vdr/vdr/trunk/debian/patches/opt-38_disableDoubleEpgEntrys.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-38_disableDoubleEpgEntrys.dpatch	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/opt-38_disableDoubleEpgEntrys.dpatch	2007-01-12 22:28:45 UTC (rev 3851)
@@ -0,0 +1,381 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## opt-38_disableDoubleEpgEntrys.dpatch by Emanuel Wontorra <hoerzu2vdr at wontorra.net>
+## http://vdrportal.de/board/thread.php?postid=316384#post316384
+##
+## Thomas Günther <tom at toms-cafe.de>:
+##   - adapted to VDR-1.3.32
+##
+## Stefan Wagner <stefanwag at gmx.at>:
+##   - adapted to VDR-1.3.43
+##
+## Tobias Grimm <tg at e-tobi.net>:
+##   - adapted to VDR-1.4.0 maintenance patch 1.4.0-2
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: This patch suppresses double EPG entries.
+
+ at DPATCH@
+diff -urNad vdr-1.4.0~/config.c vdr-1.4.0/config.c
+--- vdr-1.4.0~/config.c	2006-06-06 02:07:33.000000000 +0200
++++ vdr-1.4.0/config.c	2006-06-06 02:07:33.000000000 +0200
+@@ -303,6 +303,10 @@
+   MinUserInactivity = 300;
+   MultiSpeedMode = 0;
+   ShowReplayMode = 0;
++  DoubleEpgTimeDelta = 15;
++  DoubleEpgAction = 0;  
++  MixEpgAction = 0;
++  DisableVPS = 0;
+   ResumeID = 0;
+   JumpPlay = 0;
+   PlayJump = 0;
+@@ -473,6 +477,10 @@
+   else if (!strcasecmp(Name, "MinUserInactivity"))   MinUserInactivity  = atoi(Value);
+   else if (!strcasecmp(Name, "MultiSpeedMode"))      MultiSpeedMode     = atoi(Value);
+   else if (!strcasecmp(Name, "ShowReplayMode"))      ShowReplayMode     = atoi(Value);
++  else if (!strcasecmp(Name, "DoubleEpgTimeDelta"))  DoubleEpgTimeDelta = atoi(Value);
++  else if (!strcasecmp(Name, "DoubleEpgAction"))     DoubleEpgAction    = atoi(Value);
++  else if (!strcasecmp(Name, "MixEpgAction"))        MixEpgAction    	= atoi(Value);
++  else if (!strcasecmp(Name, "DisableVPS"))        DisableVPS    	= atoi(Value);
+   else if (!strcasecmp(Name, "ResumeID"))            ResumeID           = atoi(Value);
+   else if (!strcasecmp(Name, "JumpPlay"))            JumpPlay           = atoi(Value);
+   else if (!strcasecmp(Name, "PlayJump"))            PlayJump           = atoi(Value);
+@@ -548,6 +556,10 @@
+   Store("SplitEditedFiles",   SplitEditedFiles);
+   Store("MinEventTimeout",    MinEventTimeout);
+   Store("MinUserInactivity",  MinUserInactivity);
++  Store("DoubleEpgAction",    DoubleEpgAction);
++  Store("MixEpgAction",	      MixEpgAction);
++  Store("DisableVPS",	      DisableVPS);
++  Store("DoubleEpgTimeDelta", DoubleEpgTimeDelta);
+   Store("MultiSpeedMode",     MultiSpeedMode);
+   Store("ShowReplayMode",     ShowReplayMode);
+   Store("ResumeID",           ResumeID);
+diff -urNad vdr-1.4.0~/config.h vdr-1.4.0/config.h
+--- vdr-1.4.0~/config.h	2006-06-06 02:07:33.000000000 +0200
++++ vdr-1.4.0/config.h	2006-06-06 02:07:33.000000000 +0200
+@@ -268,6 +268,10 @@
+   int MinEventTimeout, MinUserInactivity;
+   int MultiSpeedMode;
+   int ShowReplayMode;
++  int DoubleEpgTimeDelta;
++  int DoubleEpgAction;
++  int MixEpgAction;
++  int DisableVPS;
+   int ResumeID;
+   int JumpPlay;
+   int PlayJump;
+diff -urNad vdr-1.4.0~/eit.c vdr-1.4.0/eit.c
+--- vdr-1.4.0~/eit.c	2006-06-06 02:07:33.000000000 +0200
++++ vdr-1.4.0/eit.c	2006-06-06 02:13:14.000000000 +0200
+@@ -72,7 +72,83 @@
+          // not be overwritten.
+          if (pEvent->TableID() == 0x00) {
+             if (pEvent->Version() == getVersionNumber())
+-               continue;
++          {
++          	if(Setup.MixEpgAction == 0)
++          		continue;
++          		
++          	//printf("in");
++          	//printf("%s", pEvent->GetTimeString());
++          	// to use the info of the original epg, update the extern one,
++          	// if it has less info
++          	SI::Descriptor *d;
++          	SI::ExtendedEventDescriptors *ExtendedEventDescriptors = NULL;
++          	//SI::ExtendedEventDescriptor *eed = NULL;
++          	SI::ShortEventDescriptor *ShortEventDescriptor = NULL;
++          	//SI::ShortEventDescriptor *sed = NULL;
++          	//SI::TimeShiftedEventDescriptor *tsed = NULL;
++          	//cLinkChannels *LinkChannels = NULL;
++          	for (SI::Loop::Iterator it2; (d = SiEitEvent.eventDescriptors.getNext(it2));)
++          	{
++          		if(d->getDescriptorTag() == SI::ShortEventDescriptorTag)
++          		{
++          			int LanguagePreferenceShort = -1;
++          			SI::ShortEventDescriptor *sed = (SI::ShortEventDescriptor *)d;
++          			if (I18nIsPreferredLanguage(Setup.EPGLanguages, sed->languageCode, LanguagePreferenceShort) || !ShortEventDescriptor)
++          			{
++          				delete ShortEventDescriptor;
++          				ShortEventDescriptor = sed;
++          				d = NULL; // so that it is not deleted
++          			}
++          		}
++          		else if(d->getDescriptorTag() == SI::ExtendedEventDescriptorTag)
++          		{
++          			int LanguagePreferenceExt = -1;
++          			bool UseExtendedEventDescriptor = false;
++          			SI::ExtendedEventDescriptor *eed = (SI::ExtendedEventDescriptor *)d;
++          			if (I18nIsPreferredLanguage(Setup.EPGLanguages, eed->languageCode, LanguagePreferenceExt) || !ExtendedEventDescriptors) 
++          			{
++          				delete ExtendedEventDescriptors;
++          				ExtendedEventDescriptors = new SI::ExtendedEventDescriptors;
++          				UseExtendedEventDescriptor = true;
++          			}
++          			if (UseExtendedEventDescriptor) 
++          			{
++          				ExtendedEventDescriptors->Add(eed);
++          				d = NULL; // so that it is not deleted
++          			}
++          			if (eed->getDescriptorNumber() == eed->getLastDescriptorNumber())
++          				UseExtendedEventDescriptor = false;
++          		}         		                 
++          		delete d;
++          	}
++          	if(pEvent)
++          	{
++          		
++             		if(ShortEventDescriptor)
++ 	             	{
++ 	             		char buffer[256];    		
++ 	             		if(ShortEventDescriptor->text.getText(buffer, sizeof(buffer)) && pEvent->ShortText() && (strlen(ShortEventDescriptor->text.getText(buffer, sizeof(buffer))) > strlen(pEvent->ShortText())))
++ 	             		{
++ 	             			pEvent->SetShortText(ShortEventDescriptor->text.getText(buffer, sizeof(buffer)));
++ 	             			pEvent->FixEpgBugs();
++ 				}
++ 			}
++ 			if(ExtendedEventDescriptors)
++ 			{
++ 				char buffer[ExtendedEventDescriptors->getMaximumTextLength(": ") + 1];
++ 				//pEvent->SetDescription(ExtendedEventDescriptors->getText(buffer, sizeof(buffer), ": "));
++             
++ 				if(ExtendedEventDescriptors->getText(buffer, sizeof(buffer), ": ") && pEvent->Description() && (strlen(ExtendedEventDescriptors->getText(buffer, sizeof(buffer), ": ")) > strlen(pEvent->Description())))
++ 				{
++ 		  			pEvent->SetDescription(ExtendedEventDescriptors->getText(buffer, sizeof(buffer), ": "));
++ 		  			pEvent->FixEpgBugs();
++ 		  		}
++ 		  	}
++ 		}
++ 	  	delete ExtendedEventDescriptors;
++ 	  	delete ShortEventDescriptor;
++          	continue;
++          }
+             HasExternalData = ExternalData = true;
+             }
+          // If the new event has a higher table ID, let's skip it.
+@@ -95,7 +171,7 @@
+          pEvent->SetDuration(SiEitEvent.getDuration());
+          }
+       if (Tid == 0x4E) { // we trust only the present/following info on the actual TS
+-         if (SiEitEvent.getRunningStatus() >= SI::RunningStatusNotRunning)
++         if (Setup.DisableVPS == 0 && SiEitEvent.getRunningStatus() >= SI::RunningStatusNotRunning)
+             pSchedule->SetRunningStatus(pEvent, SiEitEvent.getRunningStatus(), channel);
+          }
+       if (OnlyRunningStatus)
+@@ -249,6 +325,80 @@
+       if (LinkChannels)
+          channel->SetLinkChannels(LinkChannels);
+       Modified = true;
++       
++      //to avoid double epg-entrys from ext and int epg sources :EW
++      if (pEvent && pEvent->TableID() != 0x00)
++      {
++      	cEvent *pPreviousEvent = (cEvent *)pSchedule->GetPreviousEvent(pEvent);
++      	
++      	if (pPreviousEvent)
++       	{
++       		if(Setup.DoubleEpgAction == 0)
++       		{
++       			pPreviousEvent->SetStartTime(pEvent->StartTime());
++       			pPreviousEvent->SetDuration(pEvent->Duration());
++       			
++       			if(Setup.DisableVPS == 0)
++       			{
++       				if(channel)
++       					pPreviousEvent->SetRunningStatus(pEvent->RunningStatus(), channel);
++       				else
++       					pPreviousEvent->SetRunningStatus(pEvent->RunningStatus());
++       			}
++       			
++       			// to use the info of the original epg, update the extern one,
++       			// if it has less info
++       			char buffer_short_intern[256];
++       			char buffer_short_extern[256];
++       			int len_short_intern = 0;
++       			int len_short_extern = 0;
++       			
++       			if (pEvent->ShortText())
++       				len_short_intern = sprintf (buffer_short_intern, "%s", pEvent->ShortText());
++       				
++       			if (pPreviousEvent->ShortText())
++       				len_short_extern = sprintf (buffer_short_extern, "%s",pPreviousEvent->ShortText());
++ 			
++       			if(len_short_intern > 0)
++       			{
++       				if(len_short_extern < 1)
++       					pPreviousEvent->SetShortText(buffer_short_intern);
++       				else if (len_short_intern > len_short_extern)
++       						pPreviousEvent->SetShortText(buffer_short_intern);
++       			}
++       			
++       			if(pEvent->Description())
++       			{
++       				char buffer_title_intern[4096];
++       				char buffer_title_extern[4096];
++       				int len_title_intern = 0;
++       				int len_title_extern = 0;
++       				
++       				if (pEvent->Description())
++       					len_title_intern = sprintf (buffer_title_intern, "%s", pEvent->Description());
++       					
++       				if (pPreviousEvent->Description())
++       					len_title_extern = sprintf (buffer_title_extern, "%s", pPreviousEvent->Description());
++       				
++       				if(len_title_intern > 0)
++ 	      			{
++ 	      				if(len_title_extern < 1)
++ 	      					pPreviousEvent->SetDescription(buffer_title_intern);
++ 	      				else if (len_title_intern > len_title_extern)
++ 	      					pPreviousEvent->SetDescription(buffer_title_intern);
++ 	      			}
++ 	      		}
++ 	      		
++ 	      		if(pPreviousEvent->Vps() == 0 && pEvent->Vps() != 0)
++ 	      			pPreviousEvent->SetVps(pEvent->Vps());
++ 	      			
++ 	      		pSchedule->DelEvent(pEvent);
++ 	      		pPreviousEvent->FixEpgBugs();
++       		}
++       		else
++       			pSchedule->DelEvent(pPreviousEvent);
++       	}
++       }
+       }
+   if (Empty && Tid == 0x4E && getSectionNumber() == 0)
+      // ETR 211: an empty entry in section 0 of table 0x4E means there is currently no event running
+diff -urNad vdr-1.4.0~/epg.c vdr-1.4.0/epg.c
+--- vdr-1.4.0~/epg.c	2006-06-06 02:07:33.000000000 +0200
++++ vdr-1.4.0/epg.c	2006-06-06 02:07:33.000000000 +0200
+@@ -734,6 +734,29 @@
+   return pe;
+ }
+ 
++const cEvent *cSchedule::GetPreviousEvent(cEvent *Event) const
++{
++	
++	if(!Event || Event->Duration() == 0 || Event->StartTime() == 0)
++		return NULL;
++	// Returns either the event info to the previous/following event to the given EventID or, if that one can't be found NULL :EW
++	cEvent *pt = NULL;
++	int epgTimeDelta = Setup.DoubleEpgTimeDelta * 60 + 1;
++	for (pt = events.First(); pt; pt = events.Next(pt))
++		if(pt && pt->TableID() == 0x00)
++			if ((Event->StartTime() - pt->StartTime()) > -  epgTimeDelta && (Event->StartTime() - pt->StartTime()) < epgTimeDelta)
++			{
++				if((pt->Duration() + (pt->Duration()/ 5) + 1) > Event->Duration() && (pt->Duration() - (pt->Duration()/ 5) - 1) < Event->Duration())
++					return pt;
++				else if (pt->Title() && Event->Title() && (strcmp(pt->Title(), ".") != 0 && strcmp(Event->Title(), ".") != 0))
++				{
++					if (strstr(pt->Title(), Event->Title()) != NULL || strstr(Event->Title(), pt->Title()) != NULL)
++						return pt;
++				}
++			}
++	return NULL;
++}
++
+ void cSchedule::SetRunningStatus(cEvent *Event, int RunningStatus, cChannel *Channel)
+ {
+   for (cEvent *p = events.First(); p; p = events.Next(p)) {
+diff -urNad vdr-1.4.0~/epg.h vdr-1.4.0/epg.h
+--- vdr-1.4.0~/epg.h	2006-03-25 13:39:39.000000000 +0100
++++ vdr-1.4.0/epg.h	2006-06-06 02:07:33.000000000 +0200
+@@ -136,6 +136,7 @@
+   void DropOutdated(time_t SegmentStart, time_t SegmentEnd, uchar TableID, uchar Version);
+   void Cleanup(time_t Time);
+   void Cleanup(void);
++	const cEvent *GetPreviousEvent(cEvent *Event) const; //:EW
+   cEvent *AddEvent(cEvent *Event);
+   void DelEvent(cEvent *Event);
+   void HashEvent(cEvent *Event);
+diff -urNad vdr-1.4.0~/i18n.c vdr-1.4.0/i18n.c
+--- vdr-1.4.0~/i18n.c	2006-06-06 02:07:33.000000000 +0200
++++ vdr-1.4.0/i18n.c	2006-06-06 02:07:33.000000000 +0200
+@@ -4630,6 +4630,74 @@
+     "som før",
+     "jako naposledy",
+   },
++  { "Setup.EPG$Period for double EPG search(min)",
++    "Zeitspanne für dop. EPG-Suche(min)",
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++  },
++  { "Setup.EPG$extern double Epg entry",
++    "Doppelten externen EPG-Eintrag",
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++  },
++  { "Setup.EPG$Mix intern and extern EPG",
++    "Internen und externen EPG mischen",
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++  },
++  { "Setup.EPG$Disable running VPS event",
++    "Erk. des lauf. VPS-Events abschalten",
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++  },
+   // The days of the week:
+   { "MTWTFSS",
+     "MDMDFSS",
+diff -urNad vdr-1.4.0~/menu.c vdr-1.4.0/menu.c
+--- vdr-1.4.0~/menu.c	2006-06-06 02:07:33.000000000 +0200
++++ vdr-1.4.0/menu.c	2006-06-06 02:07:33.000000000 +0200
+@@ -2467,6 +2467,10 @@
+   Add(new cMenuEditIntItem( tr("Setup.EPG$Preferred languages"),       &numLanguages, 0, I18nNumLanguages));
+   for (int i = 0; i < numLanguages; i++)
+      Add(new cMenuEditStraItem(tr("Setup.EPG$Preferred language"),     &data.EPGLanguages[i], I18nNumLanguages, I18nLanguages()));
++  Add(new cMenuEditIntItem(tr("Setup.EPG$Period for double EPG search(min)"),         &data.DoubleEpgTimeDelta));
++  Add(new cMenuEditBoolItem(tr("Setup.EPG$extern double Epg entry"),         &data.DoubleEpgAction, "adjust", "delete"));
++  Add(new cMenuEditBoolItem(tr("Setup.EPG$Mix intern and extern EPG"),         &data.MixEpgAction));
++  Add(new cMenuEditBoolItem(tr("Setup.EPG$Disable running VPS event"),         &data.DisableVPS));
+ 
+   SetCurrent(Get(current));
+   Display();

Added: vdr/vdr/trunk/debian/patches/opt-39_noepg.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-39_noepg.dpatch	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/opt-39_noepg.dpatch	2007-01-12 22:28:45 UTC (rev 3851)
@@ -0,0 +1,102 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## opt-39_noepg.dpatch by Torsten Kunkel <vdr at tkunkel.de>
+## extracted from noepg plugin version 0.0.2 (vdr-1.3.41-plain.patch)
+##
+## Thomas Günther <tom at toms-cafe.de>:
+##   - solved conflicts with other patches
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: The patch allows to disable normal epg update for specified channels.
+## DP: This is useful if you get epg data of the channels from external sources.
+
+ at DPATCH@
+--- vdr-1.3.41/channels.c
++++ vdr-1.3.41/channels.c
+@@ -7,6 +7,7 @@
+  * $Id: channels.c 1.48 2006/01/14 15:51:02 kls Exp $
+  */
+ 
++#include "config.h"
+ #include "channels.h"
+ #include <linux/dvb/frontend.h>
+ #include <ctype.h>
+@@ -1030,6 +1031,17 @@
+   return NULL;
+ }
+ 
++//TK
++bool cChannels::keinEPGScan(tChannelID kanalID)
++{
++  bool rc=false;
++
++  if (strstr(::Setup.noEPG,kanalID.ToString())!=NULL){
++    rc=true;
++  }
++  return rc;
++}
++
+ cString ChannelString(const cChannel *Channel, int Number)
+ {
+   char buffer[256];
+--- vdr-1.3.41/channels.h
++++ vdr-1.3.41/channels.h
+@@ -248,6 +248,7 @@
+       ///< modification has been made, and 2 if the user has made a modification.
+       ///< Calling this function resets the 'modified' flag to 0.
+   cChannel *NewChannel(const cChannel *Transponder, const char *Name, const char *ShortName, const char *Provider, int Nid, int Tid, int Sid, int Rid = 0);
++  bool keinEPGScan(tChannelID kanalID);//TK
+   };
+ 
+ extern cChannels Channels;
+--- vdr-1.3.41/config.c
++++ vdr-1.3.41/config.c
+@@ -238,6 +238,7 @@
+   EPGScanTimeout = 5;
+   EPGBugfixLevel = 3;
+   EPGLinger = 0;
++  strcpy(noEPG, "");
+   SVDRPTimeout = 300;
+   ZapTimeout = 3;
+   SortTimers = 1;
+@@ -398,6 +399,7 @@
+   else if (!strcasecmp(Name, "EPGScanTimeout"))      EPGScanTimeout     = atoi(Value);
+   else if (!strcasecmp(Name, "EPGBugfixLevel"))      EPGBugfixLevel     = atoi(Value);
+   else if (!strcasecmp(Name, "EPGLinger"))           EPGLinger          = atoi(Value);
++  else if (!strcasecmp(Name, "noEPG"))               strn0cpy(noEPG, Value, 999);
+   else if (!strcasecmp(Name, "SVDRPTimeout"))        SVDRPTimeout       = atoi(Value);
+   else if (!strcasecmp(Name, "ZapTimeout"))          ZapTimeout         = atoi(Value);
+   else if (!strcasecmp(Name, "SortTimers"))          SortTimers         = atoi(Value);
+@@ -465,6 +467,7 @@
+   Store("EPGScanTimeout",     EPGScanTimeout);
+   Store("EPGBugfixLevel",     EPGBugfixLevel);
+   Store("EPGLinger",          EPGLinger);
++  Store("noEPG",              noEPG);
+   Store("SVDRPTimeout",       SVDRPTimeout);
+   Store("ZapTimeout",         ZapTimeout);
+   Store("SortTimers",         SortTimers);
+--- vdr-1.3.41/config.h
++++ vdr-1.3.41/config.h
+@@ -210,6 +210,7 @@
+   int EPGScanTimeout;
+   int EPGBugfixLevel;
+   int EPGLinger;
++  char noEPG[999];
+   int SVDRPTimeout;
+   int ZapTimeout;
+   int SortTimers;
+--- vdr-1.3.41/eit.c
++++ vdr-1.3.41/eit.c
+@@ -35,6 +35,13 @@
+   if (!channel)
+      return; // only collect data for known channels
+ 
++  //TK
++  tChannelID kanalID;
++  kanalID=channel->GetChannelID();
++  if (Channels.keinEPGScan(kanalID)){
++    return;
++  }
++
+   cSchedule *pSchedule = (cSchedule *)Schedules->GetSchedule(channel, true);
+ 
+   bool Empty = true;

Added: vdr/vdr/trunk/debian/patches/opt-40_wareagle-icons.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-40_wareagle-icons.dpatch	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/opt-40_wareagle-icons.dpatch	2007-01-12 22:28:45 UTC (rev 3851)
@@ -0,0 +1,1732 @@
+#!/bin/sh /usr/share/dpatch/dpatch-run
+
+## opt-40_wareagle-icons.dpatch by Torsten Kunkel <vdr at tkunkel.de> (http://vdr.sjur.de)
+##
+## downloaded from http://vdrportal.de/board/thread.php?postid=266960#post266960
+## original filename: wareagle-icon-patch-vdr1.3.20.diff.gz
+##
+## fixed and extended by Thomas Günther <tom at toms-cafe.de>:
+##   - fixed small symbols in fontsml-iso8859-15.c
+##   - fixed timers menu: show arrow symbol instead of '!'
+##   - added setup option WarEagleIcons to disable the icons (e.g. for skins
+##     with truetype fonts) - as default the icons are enabled
+##   http://toms-cafe.de/vdr/download/vdr-wareagle-icons+setup-1.3.22.diff
+##
+## Thomas Günther <tom at toms-cafe.de>:
+##   - adapted to sort-options patch
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Adds some icons to timer, recording and channel list.
+
+ at DPATCH@
+diff -Naur vdr-1.3.22/config.c vdr-1.3.22-icon/config.c
+--- vdr-1.3.22/config.c	2005-02-20 13:52:59.000000000 +0100
++++ vdr-1.3.22-icon/config.c	2005-03-06 01:54:41.000000000 +0100
+@@ -247,6 +247,7 @@
+   OSDLanguage = 0;
+   strcpy(OSDSkin, "sttng");
+   strcpy(OSDTheme, "default");
++  WarEagleIcons = 1;
+   PrimaryDVB = 1;
+   ShowInfoOnChSwitch = 1;
+   MenuScrollPage = 1;
+@@ -404,6 +405,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, "MenuScrollPage"))      MenuScrollPage     = atoi(Value);
+@@ -468,6 +470,7 @@
+   Store("OSDLanguage",        OSDLanguage);
+   Store("OSDSkin",            OSDSkin);
+   Store("OSDTheme",           OSDTheme);
++  Store("WarEagleIcons",      WarEagleIcons);
+   Store("PrimaryDVB",         PrimaryDVB);
+   Store("ShowInfoOnChSwitch", ShowInfoOnChSwitch);
+   Store("MenuScrollPage",     MenuScrollPage);
+diff -Naur vdr-1.3.22/config.h vdr-1.3.22-icon/config.h
+--- vdr-1.3.22/config.h	2005-02-20 13:50:37.000000000 +0100
++++ vdr-1.3.22-icon/config.h	2005-03-06 01:52:21.000000000 +0100
+@@ -208,6 +208,7 @@
+   int OSDLanguage;
+   char OSDSkin[MaxSkinName];
+   char OSDTheme[MaxThemeName];
++  int WarEagleIcons;
+   int PrimaryDVB;
+   int ShowInfoOnChSwitch;
+   int MenuScrollPage;
+diff -Naur vdr-1.3.22/fontosd-iso8859-15.c vdr-1.3.22-icon/fontosd-iso8859-15.c
+--- vdr-1.3.22/fontosd-iso8859-15.c	2004-12-18 17:14:49.000000000 +0100
++++ vdr-1.3.22-icon/fontosd-iso8859-15.c	2005-03-04 19:58:28.000000000 +0100
+@@ -6210,35 +6210,65 @@
+      0x00000000,  // ......
+   },
+   {             // 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,  // ......
+-  },
++       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,  // .............
+@@ -6360,65 +6390,125 @@
+      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,  // .............
+-  },
++    16, 27,
++    0x0,       // ................................
++    0x0,       // ................................
++    0x0,       // ................................
++    0x0,       // ................................
++    0x0,       // ................................
++    0x1c,      // ...........................###..
++    0x38,      // ..........................###...
++    0x70,      // .........................###....
++    0xe0,      // ........................###.....
++    0x1c0,     // .......................###......
++    0x380,     // ......................###.......
++    0x300,     // ......................##........
++    0x300,     // ......................##........
++    0x7ffe,    // .................##############.
++    0x7ffe,    // .................##############.
++    0x6006,    // .................##..........##.
++    0x6006,    // .................##..........##.
++    0x6006,    // .................##..........##.
++    0x6006,    // .................##..........##.
++    0x6006,    // .................##..........##.
++    0x6006,    // .................##..........##.
++    0x6006,    // .................##..........##.
++    0x7ffe,    // .................##############.
++    0x7ffe,    // .................##############.
++    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
+-     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,  // .............
+-  },
++    16, 27,
++    0x0,       // ................................
++    0x0,       // ................................
++    0x0,       // ................................
++    0x0,       // ................................
++    0x6006,    // .................##..........##.
++    0x700e,    // .................###........###.
++    0x381c,    // ..................###......###..
++    0x1c38,    // ...................###....###...
++    0xe70,     // ....................###..###....
++    0x7e0,     // .....................######.....
++    0x3ffc,    // ..................############..
++    0x7ffe,    // .................##############.
++    0x700e,    // .................###........###.
++    0x6006,    // .................##..........##.
++    0x6006,    // .................##..........##.
++    0x6006,    // .................##..........##.
++    0x6006,    // .................##..........##.
++    0x6006,    // .................##..........##.
++    0x6006,    // .................##..........##.
++    0x6006,    // .................##..........##.
++    0x6006,    // .................##..........##.
++    0x700e,    // .................###........###.
++    0x7ffe,    // .................##############.
++    0x3ffc,    // ..................############..
++    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 +6600,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 +6810,196 @@
+      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
+diff -Naur vdr-1.3.22/fontsml-iso8859-15.c vdr-1.3.22-icon/fontsml-iso8859-15.c
+--- vdr-1.3.22/fontsml-iso8859-15.c	2004-12-18 17:14:51.000000000 +0100
++++ vdr-1.3.22-icon/fontsml-iso8859-15.c	2005-03-07 03:48:59.000000000 +0100
+@@ -5175,30 +5175,55 @@
+      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,  // .....
+-  },
++       16, 22,
++       0x0,    // ................................
++       0x6006, // .................##..........##.
++       0x700e, // .................###........###.
++       0x381c, // ..................###......###..
++       0x1c38, // ...................###....###...
++       0xe70,  // ....................###..###....
++       0x7e0,  // .....................######.....
++       0x3ffc, // ..................############..
++       0x7ffe, // .................##############.
++       0x700e, // .................###........###.
++       0x6006, // .................##..........##.
++       0x6c06, // .................##.##.......##.
++       0x6ff6, // .................##.########.##.
++       0x6ff6, // .................##.########.##.
++       0x6db6, // .................##.##.##.##.##.
++       0x61b6, // .................##....##.##.##.
++       0x61b6, // .................##....##.##.##.
++       0x6006, // .................##..........##.
++       0x700e, // .................###........###.
++       0x7ffe, // .................##############.
++       0x3ffc, // ..................############..
++       0x0,    // ................................
++  },
++//  {             // 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,  // ...........
+-  },
++    16, 22,
++    0x0,        // ................................
++    0x0,        // ................................
++    0x1c,       // ...........................###..
++    0x38,       // ..........................###...
++    0x70,       // .........................###....
++    0xe0,       // ........................###.....
++    0x1c0,      // .......................###......
++    0x380,      // ......................###.......
++    0x300,      // ......................##........
++    0x300,      // ......................##........
++    0x7ffe,     // .................##############.
++    0x7ffe,     // .................##############.
++    0x6006,     // .................##..........##.
++    0x6006,     // .................##..........##.
++    0x6006,     // .................##..........##.
++    0x6006,     // .................##..........##.
++    0x6006,     // .................##..........##.
++    0x6006,     // .................##..........##.
++    0x6006,     // .................##..........##.
++    0x7ffe,     // .................##############.
++    0x7ffe,     // .................##############.
++    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
+-     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,        // ................................
++    0x6006,     // .................##..........##.
++    0x700e,     // .................###........###.
++    0x381c,     // ..................###......###..
++    0x1c38,     // ...................###....###...
++    0xe70,      // ....................###..###....
++    0x7e0,      // .....................######.....
++    0x3ffc,     // ..................############..
++    0x7ffe,     // .................##############.
++    0x700e,     // .................###........###.
++    0x6006,     // .................##..........##.
++    0x6006,     // .................##..........##.
++    0x6006,     // .................##..........##.
++    0x6006,     // .................##..........##.
++    0x6006,     // .................##..........##.
++    0x6006,     // .................##..........##.
++    0x6006,     // .................##..........##.
++    0x6006,     // .................##..........##.
++    0x700e,     // .................###........###.
++    0x7ffe,     // .................##############.
++    0x3ffc,     // ..................############..
++    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 -Naur vdr-1.3.22/i18n.c vdr-1.3.22-icon/i18n.c
+--- vdr-1.3.22/i18n.c	2005-02-27 10:45:57.000000000 +0100
++++ vdr-1.3.22-icon/i18n.c	2005-03-06 02:04:44.000000000 +0100
+@@ -2611,6 +2611,35 @@
+     "Teema",
+     "Tema",
+   },
++  { "Setup.OSD$WarEagle icons",
++    "WarEagle-Symbole",
++    "", // Slovenski                                                           
++    "", // Italiano                                                            
++    "", // Nederlands                                                          
++    "", // Português                                                           
++    "", // Français                                                            
++    "", // Norsk                                                               
++    "", // Suomi                                                               
++    "", // Polski                                                              
++    "", // Español                                                             
++    "", // Greek                                                               
++    "", // Svenska                                                             
++    "", // Romaneste                                                           
++    "", // Magyar                                                              
++    "", // Català                                                              
++#if VDRVERSNUM > 10302                                                         
++    "", // Russian                                                             
++#if VDRVERSNUM > 10307                                                         
++    "", // Hrvatski                                                            
++#if VDRVERSNUM > 10313                                                         
++    "", // Eesti                                                               
++#if VDRVERSNUM > 10316                                                         
++    "", // Dansk                                                               
++#endif                                                                         
++#endif                                                                         
++#endif                                                                         
++#endif                                                                         
++  },                                                                           
+   { "Setup.OSD$Left",
+     "Links",
+     "",// TODO
+diff -Naur vdr-1.3.22/iconpatch.h vdr-1.3.22-icon/iconpatch.h
+--- vdr-1.3.22/iconpatch.h	1970-01-01 01:00:00.000000000 +0100
++++ vdr-1.3.22-icon/iconpatch.h	2005-03-04 19:58:28.000000000 +0100
+@@ -0,0 +1,24 @@
++/*
++ * 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_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
+diff -Naur vdr-1.3.22/menu.c vdr-1.3.22-icon/menu.c
+--- vdr-1.3.22/menu.c	2005-02-27 15:09:00.000000000 +0100
++++ vdr-1.3.22-icon/menu.c	2005-03-07 03:57:22.000000000 +0100
+@@ -8,6 +8,7 @@
+  */
+ 
+ #include "menu.h"
++#include "iconpatch.h"
+ #include <ctype.h>
+ #include <limits.h>
+ #include <stdio.h>
+@@ -371,6 +372,14 @@
+        } else {
+         if (sortMode == csmProvider || sortMode == csmProviderNumber)
+            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());
++        }
+         else
+            asprintf(&buffer, "%d\t%s", channel->Number(), channel->Name());
+        }
+@@ -735,7 +744,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(),
+                     timer->IsSingleEvent() ? *WeekDayName(timer->StartTime()) : "",
+                     timer->IsSingleEvent() ? " " : "",
+@@ -1762,6 +1771,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));
+diff -Naur vdr-1.3.22/recording.c vdr-1.3.22-icon/recording.c
+--- vdr-1.3.22/recording.c	2005-02-12 11:17:47.000000000 +0100
++++ vdr-1.3.22-icon/recording.c	2005-03-04 20:03:31.000000000 +0100
+@@ -8,6 +8,7 @@
+  */
+ 
+ #include "recording.h"
++#include "iconpatch.h"
+ #include <dirent.h>
+ #include <errno.h>
+ #include <fcntl.h>
+@@ -492,7 +493,7 @@
+ 
+ const char *cRecording::Title(char Delimiter, bool NewIndicator, int Level) const
+ {
+-  char New = NewIndicator && IsNew() ? '*' : ' ';
++  char New = NewIndicator && IsNew() ? Setup.WarEagleIcons ? ICON_NEU : '*' : ' ';
+   free(titleBuffer);
+   titleBuffer = NULL;
+   if (Level < 0 || Level == HierarchyLevels()) {

Added: vdr/vdr/trunk/debian/patches/opt-41-x_timer-info.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-41-x_timer-info.dpatch	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/opt-41-x_timer-info.dpatch	2007-01-12 22:28:45 UTC (rev 3851)
@@ -0,0 +1,302 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## opt-41-x_timer-info.dpatch by Andreas Brugger <brougs78 at gmx.net>, Thomas Günther <tom at toms-cafe.de>
+## http://toms-cafe.de/vdr/download/vdr-timer-info-0.4-1.3.45.diff
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Shows info, if it is possible to record an event in the timer-info of
+## DP: vdr - see README.timer-info for details.
+
+ at DPATCH@
+diff -urNad vdr-1.3.45~/README.timer-info vdr-1.3.45/README.timer-info
+--- vdr-1.3.45~/README.timer-info	1970-01-01 01:00:00.000000000 +0100
++++ vdr-1.3.45/README.timer-info	2006-03-26 20:11:11.000000000 +0200
+@@ -0,0 +1,53 @@
+++------------------------------------------------------------------------------+
++|               Info about the timer-info-patch by Brougs78                    |
++|                brougs78 at gmx.net / home.pages.at/brougs78                     |
+++------------------------------------------------------------------------------+
++
++
++README timer-info:
++------------------
++
++Features:
++ - Shows info, if it is possible to record an event in the timer menu of vdr.
++   For calculations the free space incl. the deleted recordings is used,
++   considering an average consumtion of 25.75 MB/min (also used by vdr itself).
++   The first column in the timer-list shows:
++      ( + ) recording will be most probably possible (enough space)
++      (+/-) recording may be possible
++      ( - ) recording will most probably fail (to less space)
++   The calculations also consider repeating timers.
++ - It is possible to deactivate the patch in the OSD-menu of VDR.
++
++
++HISTORY timer-info:
++-------------------
++
++25.11.2004: v0.1
++ - Initial release
++
++11.01.2005: v0.1b
++ - Bugfixes for vdr-1.3.18
++ - In the menu the free recording-time no longer includes the space of the
++   deleted recordings, because this slowed the vdr down to much.
++
++08.07.2005: v0.1c
++ - Made the patch configurable
++
++29.01.2006: v0.2 - Thomas Günther <tom at toms-cafe.de>
++ - Rewritten great parts for vdr-1.3.38+
++   http://toms-cafe.de/vdr/download/vdr-timer-info-0.2-1.3.38+.diff
++
++05.02.2006: v0.3 - Thomas Günther <tom at toms-cafe.de>
++ - Fixed refresh of timer menu in cMenuTimers::OnOff
++ - Fixed check of repeating timers
++ - Syslog debug messages can be enabled with Define DEBUG_TIMER_INFO
++   http://toms-cafe.de/vdr/download/vdr-timer-info-0.3-1.3.38+.diff
++
++03.03.2006: v0.4 - Thomas Günther <tom at toms-cafe.de>
++ - Adapted to vdr-1.3.44
++ - Removed setup parameter "Show timer-info"
++   http://toms-cafe.de/vdr/download/vdr-timer-info-0.4-1.3.44.diff
++
++03.03.2006: v0.5 - Tobias Grimm <tg at e-tobi.net>
++ - Adapted to vdr-1.3.45
++   http://toms-cafe.de/vdr/download/vdr-timer-info-0.4-1.3.45.diff
+diff -urNad vdr-1.3.45~/menu.c vdr-1.3.45/menu.c
+--- vdr-1.3.45~/menu.c	2006-02-28 14:58:00.000000000 +0100
++++ vdr-1.3.45/menu.c	2006-03-26 20:10:17.000000000 +0200
+@@ -41,6 +41,8 @@
+ 
+ #define CHNUMWIDTH  (numdigits(Channels.MaxNumber()) + 1)
+ 
++#define MB_PER_MINUTE 25.75 // this is just an estimate!
++
+ // --- cMenuEditCaItem -------------------------------------------------------
+ 
+ class cMenuEditCaItem : public cMenuEditIntItem {
+@@ -713,8 +715,10 @@
+ class cMenuTimerItem : public cOsdItem {
+ private:
+   cTimer *timer;
++  char diskStatus;
+ public:
+   cMenuTimerItem(cTimer *Timer);
++  void SetDiskStatus(char DiskStatus);
+   virtual int Compare(const cListObject &ListObject) const;
+   virtual void Set(void);
+   cTimer *Timer(void) { return timer; }
+@@ -723,6 +727,7 @@
+ cMenuTimerItem::cMenuTimerItem(cTimer *Timer)
+ {
+   timer = Timer;
++  diskStatus = ' ';
+   Set();
+ }
+ 
+@@ -760,9 +765,64 @@
+                     timer->Stop() / 100,
+                     timer->Stop() % 100,
+                     timer->File());
++  char *buffer2 = buffer;
++  buffer = NULL;
++  asprintf(&buffer, "%c%s", diskStatus, buffer2);
++  free(buffer2);
+   SetText(buffer, false);
+ }
+ 
++void cMenuTimerItem::SetDiskStatus(char DiskStatus)
++{
++  diskStatus = DiskStatus;
++  Set();
++}
++
++// --- cTimerEntry -----------------------------------------------------------
++
++class cTimerEntry : public cListObject {
++private:
++  cMenuTimerItem *item;
++  const cTimer *timer;
++  time_t start;
++public:
++  cTimerEntry(cMenuTimerItem *item) : item(item), timer(item->Timer()), start(timer->StartTime()) {}
++  cTimerEntry(const cTimer *timer, time_t start) : item(NULL), timer(timer), start(start) {}
++  virtual int Compare(const cListObject &ListObject) const;
++  bool active(void) const { return timer->HasFlags(tfActive); }
++  time_t startTime(void) const { return start; }
++  int priority(void) const { return timer->Priority(); }
++  int duration(void) const;
++  bool repTimer(void) const { return !timer->IsSingleEvent(); }
++  bool isDummy(void) const { return item == NULL; }
++  const cTimer *Timer(void) const { return timer; }
++  void SetDiskStatus(char DiskStatus);
++  };
++
++int cTimerEntry::Compare(const cListObject &ListObject) const
++{
++  cTimerEntry *entry = (cTimerEntry *)&ListObject;
++  int r = startTime() - entry->startTime();
++  if (r == 0)
++     r = entry->priority() - priority();
++  return r;
++}
++
++int cTimerEntry::duration(void) const
++{
++  int dur = (timer->Stop()  / 100 * 60 + timer->Stop()  % 100) -
++            (timer->Start() / 100 * 60 + timer->Start() % 100);
++  if (dur < 0)
++     dur += 24 * 60;
++  return dur;
++}
++
++void cTimerEntry::SetDiskStatus(char DiskStatus)
++{
++  if (item)
++     item->SetDiskStatus(DiskStatus);
++}
++
+ // --- cMenuTimers -----------------------------------------------------------
+ 
+ class cMenuTimers : public cOsdMenu {
+@@ -775,14 +835,17 @@
+   eOSState Info(void);
+   cTimer *CurrentTimer(void);
+   void SetHelpKeys(void);
++  void ActualiseDiskStatus(void);
++  bool actualiseDiskStatus;
+ public:
+   cMenuTimers(void);
+   virtual ~cMenuTimers();
++  virtual void Display(void);
+   virtual eOSState ProcessKey(eKeys Key);
+   };
+ 
+ cMenuTimers::cMenuTimers(void)
+-:cOsdMenu(tr("Timers"), 2, CHNUMWIDTH, 10, 6, 6)
++:cOsdMenu(tr("Timers"), 3, CHNUMWIDTH, 10, 6, 6)
+ {
+   helpKeys = -1;
+   for (cTimer *timer = Timers.First(); timer; timer = Timers.Next(timer)) {
+@@ -793,6 +856,7 @@
+   SetCurrent(First());
+   SetHelpKeys();
+   Timers.IncBeingEdited();
++  actualiseDiskStatus = true;
+ }
+ 
+ cMenuTimers::~cMenuTimers()
+@@ -831,7 +895,7 @@
+      timer->OnOff();
+      timer->SetEventFromSchedule();
+      RefreshCurrent();
+-     DisplayCurrent(true);
++     Display();
+      if (timer->FirstDay())
+         isyslog("timer %s first day set to %s", *timer->ToDescr(), *timer->PrintFirstDay());
+      else
+@@ -890,6 +954,67 @@
+   return osContinue;
+ }
+ 
++void cMenuTimers::ActualiseDiskStatus(void)
++{
++  if (!actualiseDiskStatus || !Count())
++     return;
++
++  // compute free disk space
++  int freeMB, freeMinutes, runshortMinutes;
++  VideoDiskSpace(&freeMB);
++  freeMinutes = int(double(freeMB) * 1.1 / MB_PER_MINUTE); // overestimate by 10 percent
++  runshortMinutes = freeMinutes / 5; // 20 Percent
++
++  // fill entries list
++  cTimerEntry *entry;
++  cList<cTimerEntry> entries;
++  for (cOsdItem *item = First(); item; item = Next(item))
++     entries.Add(new cTimerEntry((cMenuTimerItem *)item));
++
++  // search last start time
++  time_t last = 0;
++  for (entry = entries.First(); entry; entry = entries.Next(entry))
++     last = max(entry->startTime(), last);
++
++  // add entries for repeating timers
++  for (entry = entries.First(); entry; entry = entries.Next(entry))
++     if (entry->repTimer() && !entry->isDummy())
++        for (time_t start = cTimer::IncDay(entry->startTime(), 1);
++             start <= last;
++             start = cTimer::IncDay(start, 1))
++           if (entry->Timer()->DayMatches(start))
++              entries.Add(new cTimerEntry(entry->Timer(), start));
++
++  // set the disk-status
++  entries.Sort();
++  for (entry = entries.First(); entry; entry = entries.Next(entry)) {
++     char status = ' ';
++     if (entry->active()) {
++        freeMinutes -= entry->duration();
++        status = freeMinutes > runshortMinutes ? '+' : freeMinutes > 0 ? 177 /* +/- */ : '-';
++        }
++     entry->SetDiskStatus(status);
++#ifdef DEBUG_TIMER_INFO
++     dsyslog("timer-info: %c | %d | %s | %s | %3d | %+5d -> %+5d",
++             status,
++             entry->startTime(),
++             entry->active() ? "aktiv " : "n.akt.",
++             entry->repTimer() ? entry->isDummy() ? "  dummy  " : "mehrmalig" : "einmalig ",
++             entry->duration(),
++             entry->active() ? freeMinutes + entry->duration() : freeMinutes,
++             freeMinutes);
++#endif
++     }
++
++  actualiseDiskStatus = false;
++}
++
++void cMenuTimers::Display(void)
++{
++  ActualiseDiskStatus();
++  cOsdMenu::Display();
++}
++
+ eOSState cMenuTimers::ProcessKey(eKeys Key)
+ {
+   int TimerNumber = HasSubMenu() ? Count() : -1;
+@@ -898,17 +1023,21 @@
+   if (state == osUnknown) {
+      switch (Key) {
+        case kOk:     return Edit();
+-       case kRed:    state = OnOff(); break; // must go through SetHelpKeys()!
++       case kRed:    actualiseDiskStatus = true;
++                     state = OnOff(); break; // must go through SetHelpKeys()!
+        case kGreen:  return New();
+-       case kYellow: state = Delete(); break;
++       case kYellow: actualiseDiskStatus = true;
++                     state = Delete(); break;
+        case kBlue:   return Info();
+                      break;
+        default: break;
+        }
+      }
+-  if (TimerNumber >= 0 && !HasSubMenu() && Timers.Get(TimerNumber)) {
+-     // a newly created timer was confirmed with Ok
+-     Add(new cMenuTimerItem(Timers.Get(TimerNumber)), true);
++  if (TimerNumber >= 0 && !HasSubMenu()) {
++     if (Timers.Get(TimerNumber)) // a newly created timer was confirmed with Ok
++        Add(new cMenuTimerItem(Timers.Get(TimerNumber)), true);
++     Sort();
++     actualiseDiskStatus = true;
+      Display();
+      }
+   if (Key != kNone)
+@@ -2814,8 +2943,6 @@
+   Display();
+ }
+ 
+-#define MB_PER_MINUTE 25.75 // this is just an estimate!
+-
+ bool cMenuMain::Update(bool Force)
+ {
+   bool result = false;

Added: vdr/vdr/trunk/debian/patches/opt-42-x_extrecmenu.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-42-x_extrecmenu.dpatch	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/opt-42-x_extrecmenu.dpatch	2007-01-12 22:28:45 UTC (rev 3851)
@@ -0,0 +1,41 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## opt-xx_extrecmenu.dpatch by Martin Prochnow <nordlicht at martins-kabuff.de>
+## From the vdr-extrecmenu plugin: http://martins-kabuff.de/extrecmenu.html
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: This patch allows the extrecmenu plugin to replace the recordings
+## DP: menu with it's own version.
+
+ at DPATCH@
+diff -urNad vdr-1.4.2~/menu.c vdr-1.4.2/menu.c
+--- vdr-1.4.2~/menu.c	2006-08-27 22:49:17.000000000 +0200
++++ vdr-1.4.2/menu.c	2006-08-27 22:49:17.000000000 +0200
+@@ -3133,7 +3133,11 @@
+     case osSchedule:   AddSubMenu(new cMenuSchedule); break;
+     case osChannels:   AddSubMenu(new cMenuChannels); break;
+     case osTimers:     AddSubMenu(new cMenuTimers); break;
+-    case osRecordings: AddSubMenu(new cMenuRecordings(NULL, 0, true)); break;
++    case osRecordings: {
++		        cPlugin *p = cPluginManager::GetPlugin("extrecmenu");
++    		        (p && !p->SetupParse("IsOrgRecMenu", "0")) ? AddSubMenu((cOsdMenu *)p->MainMenuAction()) : AddSubMenu(new cMenuRecordings(NULL, 0, true));
++		       }
++		       break;
+     case osSetup:      AddSubMenu(new cMenuSetup); break;
+     case osCommands:   AddSubMenu(new cMenuCommands(tr("Commands"), &Commands)); break;
+     default: break;
+@@ -3376,7 +3380,14 @@
+     case osSchedule:   return AddSubMenu(new cMenuSchedule);
+     case osChannels:   return AddSubMenu(new cMenuChannels);
+     case osTimers:     return AddSubMenu(new cMenuTimers);
+-    case osRecordings: return AddSubMenu(new cMenuRecordings);
++    case osRecordings: {
++			cPlugin *p = cPluginManager::GetPlugin("extrecmenu");
++            	        if (p && !p->SetupParse("IsOrgRecMenu", "0"))
++			    return AddSubMenu((cOsdMenu *)p->MainMenuAction());
++			else
++			    return AddSubMenu(new cMenuRecordings);
++		       }
++		       break;
+     case osSetup:      return AddSubMenu(new cMenuSetup);
+     case osCommands:   return AddSubMenu(new cMenuCommands(tr("Commands"), &Commands));
+     case osStopRecord: if (Interface->Confirm(tr("Stop recording?"))) {

Added: vdr/vdr/trunk/debian/patches/opt-43-x_epgsearch.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-43-x_epgsearch.dpatch	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/opt-43-x_epgsearch.dpatch	2007-01-12 22:28:45 UTC (rev 3851)
@@ -0,0 +1,43 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## opt-42_epgsearch.dpatch by Christian Wieninger <cwieninger at gmx.de>
+## From the vdr-epgsearch plugin: http://www.cwieninger.de.vu
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: This patch allows the epgsearch plugin to replace the schedule
+## DP: menu with it's own version.
+
+ at DPATCH@
+diff -urNad vdr-1.4.2~/menu.c vdr-1.4.2/menu.c
+--- vdr-1.4.2~/menu.c	2006-08-30 19:06:47.000000000 +0200
++++ vdr-1.4.2/menu.c	2006-08-30 19:06:47.000000000 +0200
+@@ -3130,7 +3130,11 @@
+   // Initial submenus:
+ 
+   switch (State) {
+-    case osSchedule:   AddSubMenu(new cMenuSchedule); break;
++    case osSchedule:   {
++			cPlugin *p = cPluginManager::GetPlugin("epgsearch");
++    			(p && !p->SetupParse("IsOrgSchedule", "0")) ? AddSubMenu((cOsdMenu *)p->MainMenuAction()) : AddSubMenu(new cMenuSchedule);
++		       }			
++		       break;
+     case osChannels:   AddSubMenu(new cMenuChannels); break;
+     case osTimers:     AddSubMenu(new cMenuTimers); break;
+     case osRecordings: {
+@@ -3377,7 +3381,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: {

Added: vdr/vdr/trunk/debian/patches/opt-44_rotor.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-44_rotor.dpatch	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/opt-44_rotor.dpatch	2007-01-12 22:28:45 UTC (rev 3851)
@@ -0,0 +1,115 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## opt-44_rotor.dpatch by Thomas Bergwinkl <Bergwinkl.Thomas at vr-web.de>
+## extracted from the rotor plugin 0.1.1
+## original filename: vdr-1.3.31-Rotor.diff
+##
+## Thomas Günther <tom at toms-cafe.de>:
+##   - adapted to VDR-1.3.38
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: This patch is needed for the rotor plugin.
+
+ at DPATCH@
+diff -urNad vdr-1.3.37~/device.h vdr-1.3.37/device.h
+--- vdr-1.3.37~/device.h	2005-11-27 23:56:28.000000000 +0100
++++ vdr-1.3.37/device.h	2005-11-27 23:56:28.000000000 +0100
+@@ -22,6 +22,7 @@
+ #include "spu.h"
+ #include "thread.h"
+ #include "tools.h"
++#include <linux/dvb/frontend.h>
+ 
+ #define MAXDEVICES         16 // the maximum number of devices in the system
+ #define MAXPIDHANDLES      64 // the maximum number of different PIDs per device
+@@ -245,6 +246,7 @@
+   virtual bool HasProgramme(void);
+          ///< Returns true if the device is currently showing any programme to
+          ///< the user, either through replaying or live.
++  virtual bool SendDiseqcCmd(dvb_diseqc_master_cmd cmd) {return false;}
+ 
+ // PID handle facilities
+ 
+diff -urNad vdr-1.3.37~/dvbdevice.c vdr-1.3.37/dvbdevice.c
+--- vdr-1.3.37~/dvbdevice.c	2005-11-27 23:56:28.000000000 +0100
++++ vdr-1.3.37/dvbdevice.c	2005-11-27 23:57:51.000000000 +0100
+@@ -71,6 +71,7 @@
+ class cDvbTuner : public cThread {
+ private:
+   enum eTunerStatus { tsIdle, tsSet, tsTuned, tsLocked };
++  bool SendDiseqc;
+   int fd_frontend;
+   int cardIndex;
+   fe_type_t frontendType;
+@@ -84,6 +85,7 @@
+   cMutex mutex;
+   cCondVar locked;
+   cCondVar newSet;
++  dvb_diseqc_master_cmd diseqc_cmd;
+   bool GetFrontendStatus(fe_status_t &Status, int TimeoutMs = 0);
+   bool SetFrontend(void);
+   virtual void Action(void);
+@@ -89,12 +91,14 @@
+   virtual ~cDvbTuner();
+   bool IsTunedTo(const cChannel *Channel) const;
+   void Set(const cChannel *Channel, bool Tune);
++  bool SendDiseqcCmd(dvb_diseqc_master_cmd cmd);
+   bool Locked(int TimeoutMs = 0);
+   };
+ 
+ cDvbTuner::cDvbTuner(int Fd_Frontend, int CardIndex, fe_type_t FrontendType, cCiHandler *CiHandler)
+ {
+   fd_frontend = Fd_Frontend;
++  SendDiseqc=false;
+   cardIndex = CardIndex;
+   frontendType = FrontendType;
+   ciHandler = CiHandler;
+@@ -147,6 +151,15 @@
+   return tunerStatus >= tsLocked;
+ }
+ 
++bool cDvbTuner::SendDiseqcCmd(dvb_diseqc_master_cmd cmd)
++{
++  if (frontendType!=FE_QPSK || SendDiseqc)
++    return false;
++  diseqc_cmd=cmd;
++  SendDiseqc=true;
++  return true;
++}
++
+ bool cDvbTuner::GetFrontendStatus(fe_status_t &Status, int TimeoutMs)
+ {
+   if (TimeoutMs) {
+@@ -291,6 +304,10 @@
+         bool hasEvent = GetFrontendEvent(event, 1);
+ 
+         cMutexLock MutexLock(&mutex);
++        if (SendDiseqc) {
++           CHECK(ioctl(fd_frontend, FE_DISEQC_SEND_MASTER_CMD, &diseqc_cmd));
++           SendDiseqc=false;
++           }
+         switch (tunerStatus) {
+           case tsIdle:
+                break;
+@@ -846,6 +863,11 @@
+   return dvbTuner ? dvbTuner->Locked(TimeoutMs) : false;
+ }
+ 
++bool cDvbDevice::SendDiseqcCmd(dvb_diseqc_master_cmd cmd)
++{
++  return dvbTuner->SendDiseqcCmd(cmd);
++}
++
+ int cDvbDevice::GetAudioChannelDevice(void)
+ {
+   if (HasDecoder()) {
+diff -urNad vdr-1.3.37~/dvbdevice.h vdr-1.3.37/dvbdevice.h
+--- vdr-1.3.37~/dvbdevice.h	2005-11-11 15:51:38.000000000 +0100
++++ vdr-1.3.37/dvbdevice.h	2005-11-27 23:56:28.000000000 +0100
+@@ -66,6 +66,7 @@
+   virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView);
+ public:
+   virtual bool HasLock(int TimeoutMs = 0);
++  virtual bool SendDiseqcCmd(dvb_diseqc_master_cmd cmd);
+ 
+ // PID handle facilities
+ 

Added: vdr/vdr/trunk/debian/patches/opt-45_yaepg.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-45_yaepg.dpatch	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/opt-45_yaepg.dpatch	2007-01-12 22:28:45 UTC (rev 3851)
@@ -0,0 +1,5507 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## opt-45_yaepg.dpatch by bball950 at yahoo.com
+## http://www.hoochvdr.info/yaepg/vdr-1.3.19-core-yaepg.diff
+##
+## Thomas Günther <tom at toms-cafe.de>:
+##   - replaced OSD_OpenRaw with OSD_Command(OSD_MoveWindow+1) to compile with
+##     Debian-Package linux-kernel-headers_2.5.999-test7-bk-17 (Sarge)
+##   - adapted to VDR-1.3.25
+##   - adapted to VDR-1.3.42
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: This patch is needed for the yaepg plugin.
+
+ at DPATCH@
+diff -ruN vdr-1.3.18/device.h vdr-1.3.18.yaepg/device.h
+--- vdr-1.3.18/device.h	2005-01-07 06:57:01.000000000 -0800
++++ vdr-1.3.18.yaepg/device.h	2005-01-10 10:47:15.000000000 -0800
+@@ -206,12 +206,12 @@
+          ///< Direction (only the sign of Direction is evaluated, positive values
+          ///< switch to higher channel numbers).
+ private:
+-  eSetChannelResult SetChannel(const cChannel *Channel, bool LiveView);
+-         ///< Sets the device to the given channel (general setup).
+ protected:
+   virtual bool SetChannelDevice(const cChannel *Channel, bool LiveView);
+          ///< Sets the device to the given channel (actual physical setup).
+ public:
++  eSetChannelResult SetChannel(const cChannel *Channel, bool LiveView);
++         ///< Sets the device to the given channel (general setup).
+   static int CurrentChannel(void) { return primaryDevice ? currentChannel : 0; }
+          ///< Returns the number of the current channel on the primary device.
+   virtual bool HasLock(int TimeoutMs = 0);//XXX PLUGINS.html
+diff -ruN vdr-1.3.18/dvbosd.c vdr-1.3.18.yaepg/dvbosd.c
+--- vdr-1.3.18/dvbosd.c	2004-11-20 06:29:25.000000000 -0800
++++ vdr-1.3.18.yaepg/dvbosd.c	2005-01-10 10:47:15.000000000 -0800
+@@ -67,6 +67,10 @@
+          Cmd(OSD_Close);
+          }
+      }
++     if (vidWin.bpp != 0) {
++         Cmd(OSD_SetWindow, 0, 5);
++         Cmd(OSD_Close);
++     }
+ }
+ 
+ eOsdError cDvbOsd::CanHandleAreas(const tArea *Areas, int NumAreas)
+@@ -164,6 +168,11 @@
+          Cmd(OSD_SetWindow, 0, i + 1);
+          Cmd(OSD_MoveWindow, 0, Left() + Bitmap->X0(), Top() + Bitmap->Y0());
+          }
++     if (vidWin.bpp != 0) {
++         Cmd(OSD_SetWindow, 0, 5);
++         Cmd(OSD_Command(OSD_MoveWindow+1), vidWin.bpp, vidWin.x1, vidWin.y1,
++         vidWin.x2, vidWin.y2, (void *)0);
++     }
+      shown = true;
+      }
+ }
+diff -ruN vdr-1.3.18/font.c vdr-1.3.18.yaepg/font.c
+--- vdr-1.3.18/font.c	2004-12-18 05:41:19.000000000 -0800
++++ vdr-1.3.18.yaepg/font.c	2005-01-10 10:47:42.000000000 -0800
+@@ -11,6 +11,7 @@
+ #include <ctype.h>
+ #include "font.h"
+ #include "tools.h"
++#include "fontyaepg.c"
+ 
+ #include "fontfix-iso8859-1.c"
+ #include "fontosd-iso8859-1.c"
+@@ -35,11 +36,11 @@
+ // --- cFont -----------------------------------------------------------------
+ 
+ static const void *const FontData[eDvbCodeSize][eDvbFontSize] = {
+-  { FontOsd_iso8859_1,  FontFix_iso8859_1,  FontSml_iso8859_1 },
+-  { FontOsd_iso8859_2,  FontFix_iso8859_2,  FontSml_iso8859_2 },
+-  { FontOsd_iso8859_5,  FontFix_iso8859_5,  FontSml_iso8859_5 },
+-  { FontOsd_iso8859_7,  FontFix_iso8859_7,  FontSml_iso8859_7 },
+-  { FontOsd_iso8859_13, FontFix_iso8859_13, FontSml_iso8859_13 },
+-  { FontOsd_iso8859_15, FontFix_iso8859_15, FontSml_iso8859_15 },
++  { FontOsd_iso8859_1,  FontFix_iso8859_1,  FontSml_iso8859_1,  FontYaepg },
++  { FontOsd_iso8859_2,  FontFix_iso8859_2,  FontSml_iso8859_2,  FontYaepg },
++  { FontOsd_iso8859_5,  FontFix_iso8859_5,  FontSml_iso8859_5,  FontYaepg },
++  { FontOsd_iso8859_7,  FontFix_iso8859_7,  FontSml_iso8859_7,  FontYaepg },
++  { FontOsd_iso8859_13, FontFix_iso8859_13, FontSml_iso8859_13, FontYaepg },
++  { FontOsd_iso8859_15, FontFix_iso8859_15, FontSml_iso8859_15, FontYaepg },
+   };
+ 
+ static const char *FontCode[eDvbCodeSize] = {
+diff -ruN vdr-1.3.18/font.h vdr-1.3.18.yaepg/font.h
+--- vdr-1.3.18/font.h	2004-10-23 07:06:37.000000000 -0700
++++ vdr-1.3.18.yaepg/font.h	2005-01-10 10:47:15.000000000 -0800
+@@ -15,8 +15,9 @@
+ enum eDvbFont {
+   fontOsd,
+   fontFix,
+-  fontSml
+-#define eDvbFontSize (fontSml + 1)
++  fontSml,
++  fontYaepg
++#define eDvbFontSize (fontYaepg + 1)
+   };
+ 
+ enum eDvbCode {
+diff -ruN vdr-1.3.18/fontyaepg.c vdr-1.3.18.yaepg/fontyaepg.c
+--- vdr-1.3.18/fontyaepg.c	1969-12-31 16:00:00.000000000 -0800
++++ vdr-1.3.18.yaepg/fontyaepg.c	2005-01-10 10:47:15.000000000 -0800
+@@ -0,0 +1,5378 @@
++cFont::tPixelData FontYaepg[][23] = {
++  {             // 32
++     5, 21,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++  },
++  {             // 33
++     6, 21,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x00000008,  // ...*..
++     0x00000008,  // ...*..
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 34
++     9, 21,
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x000001DC,  // .***.***.
++     0x000001DC,  // .***.***.
++     0x000001DC,  // .***.***.
++     0x000001DC,  // .***.***.
++     0x00000088,  // ..*...*..
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++  },
++  {             // 35
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000CC,  // ...**..**.
++     0x000000CC,  // ...**..**.
++     0x000000C8,  // ...**..*..
++     0x000003FE,  // .*********
++     0x000003FE,  // .*********
++     0x00000198,  // ..**..**..
++     0x00000198,  // ..**..**..
++     0x00000190,  // ..**..*...
++     0x000007FC,  // *********.
++     0x000007FC,  // *********.
++     0x00000330,  // .**..**...
++     0x00000330,  // .**..**...
++     0x00000320,  // .**..*....
++     0x00000360,  // .**.**....
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 36
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000040,  // ....*.....
++     0x000001F0,  // ..*****...
++     0x000003FC,  // .********.
++     0x0000075C,  // ***.*.***.
++     0x0000074E,  // ***.*..***
++     0x00000740,  // ***.*.....
++     0x000003C0,  // .****.....
++     0x000001F8,  // ..******..
++     0x0000007C,  // ....*****.
++     0x0000005E,  // ....*.****
++     0x0000074E,  // ***.*..***
++     0x0000074E,  // ***.*..***
++     0x000003FC,  // .********.
++     0x000001F8,  // ..******..
++     0x00000040,  // ....*.....
++     0x00000040,  // ....*.....
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 37
++     16, 21,
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00007020,  // ..***......*....
++     0x0000FC60,  // .******...**....
++     0x0001CE40,  // ***..***..*.....
++     0x0001CE80,  // ***..***.*......
++     0x0001CE80,  // ***..***.*......
++     0x0000FD00,  // .******.*.......
++     0x00007B00,  // ..****.**.......
++     0x00000278,  // .......*..****..
++     0x000006FC,  // ......**.******.
++     0x000005CE,  // ......*.***..***
++     0x00000DCE,  // .....**.***..***
++     0x000008FC,  // .....*...******.
++     0x00001878,  // ....**....****..
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++  },
++  {             // 38
++     13, 21,
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x000003C0,  // ....****.....
++     0x000007E0,  // ...******....
++     0x00000EE0,  // ..***.***....
++     0x00000EE0,  // ..***.***....
++     0x000007E0,  // ...******....
++     0x00000780,  // ...****......
++     0x00000F9C,  // ..*****..***.
++     0x00001FDC,  // .*******.***.
++     0x00001CFC,  // .***..******.
++     0x000018F8,  // .**...*****..
++     0x00001CF8,  // .***..*****..
++     0x00000FFC,  // ..**********.
++     0x0000079C,  // ...****..***.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 39
++     4, 21,
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x0000000E,  // .***
++     0x0000000E,  // .***
++     0x0000000E,  // .***
++     0x0000000E,  // .***
++     0x00000004,  // ..*.
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++  },
++  {             // 40
++     6, 21,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x0000000C,  // ...**.
++     0x0000000C,  // ...**.
++     0x00000018,  // ..**..
++     0x00000038,  // .***..
++     0x00000038,  // .***..
++     0x00000030,  // .**...
++     0x00000070,  // ***...
++     0x00000070,  // ***...
++     0x00000070,  // ***...
++     0x00000070,  // ***...
++     0x00000070,  // ***...
++     0x00000030,  // .**...
++     0x00000038,  // .***..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x0000000C,  // ...**.
++     0x00000004,  // ....*.
++  },
++  {             // 41
++     6, 21,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000030,  // .**...
++     0x00000030,  // .**...
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x0000001C,  // ..***.
++     0x0000000C,  // ...**.
++     0x0000000E,  // ...***
++     0x0000000E,  // ...***
++     0x0000000E,  // ...***
++     0x0000000E,  // ...***
++     0x0000000E,  // ...***
++     0x0000000C,  // ...**.
++     0x0000001C,  // ..***.
++     0x00000018,  // ..**..
++     0x00000038,  // .***..
++     0x00000030,  // .**...
++     0x00000060,  // **....
++  },
++  {             // 42
++     7, 21,
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000010,  // ...*...
++     0x00000052,  // .*.*..*
++     0x000000FC,  // ******.
++     0x00000038,  // ..***..
++     0x00000068,  // .**.*..
++     0x00000028,  // ..*.*..
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++  },
++  {             // 43
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000070,  // ....***...
++     0x00000070,  // ....***...
++     0x00000070,  // ....***...
++     0x000003FE,  // .*********
++     0x000003FE,  // .*********
++     0x00000070,  // ....***...
++     0x00000070,  // ....***...
++     0x00000070,  // ....***...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 44
++     5, 21,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x00000004,  // ...*.
++     0x0000000C,  // ..**.
++     0x00000018,  // .**..
++     0x00000000,  // .....
++  },
++  {             // 45
++     6, 21,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x0000007C,  // *****.
++     0x0000007C,  // *****.
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 46
++     5, 21,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++  },
++  {             // 47
++     5, 21,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000002,  // ....*
++     0x00000006,  // ...**
++     0x00000004,  // ...*.
++     0x00000004,  // ...*.
++     0x00000004,  // ...*.
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000018,  // .**..
++     0x00000010,  // .*...
++     0x00000010,  // .*...
++     0x00000010,  // .*...
++     0x00000020,  // *....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++  },
++  {             // 48
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000F0,  // ...****...
++     0x000003FC,  // .********.
++     0x0000039C,  // .***..***.
++     0x0000070E,  // ***....***
++     0x0000070E,  // ***....***
++     0x0000070E,  // ***....***
++     0x0000070E,  // ***....***
++     0x0000070E,  // ***....***
++     0x0000070E,  // ***....***
++     0x0000070E,  // ***....***
++     0x0000039C,  // .***..***.
++     0x000003FC,  // .********.
++     0x000000F0,  // ...****...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 49
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000030,  // .....**...
++     0x00000070,  // ....***...
++     0x000003F0,  // .******...
++     0x000003F0,  // .******...
++     0x00000070,  // ....***...
++     0x00000070,  // ....***...
++     0x00000070,  // ....***...
++     0x00000070,  // ....***...
++     0x00000070,  // ....***...
++     0x00000070,  // ....***...
++     0x00000070,  // ....***...
++     0x00000070,  // ....***...
++     0x00000070,  // ....***...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 50
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000F0,  // ...****...
++     0x000003F8,  // .*******..
++     0x0000039C,  // .***..***.
++     0x0000031C,  // .**...***.
++     0x0000071C,  // ***...***.
++     0x0000001C,  // ......***.
++     0x00000038,  // .....***..
++     0x00000070,  // ....***...
++     0x000000E0,  // ...***....
++     0x000001C0,  // ..***.....
++     0x00000380,  // .***......
++     0x000003FC,  // .********.
++     0x000003FC,  // .********.
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 51
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000F0,  // ...****...
++     0x000003F8,  // .*******..
++     0x0000039C,  // .***..***.
++     0x0000031C,  // .**...***.
++     0x0000001C,  // ......***.
++     0x00000078,  // ....****..
++     0x0000007C,  // ....*****.
++     0x0000003E,  // .....*****
++     0x0000000E,  // .......***
++     0x0000030E,  // .**....***
++     0x0000031E,  // .**...****
++     0x000003FC,  // .********.
++     0x000001F8,  // ..******..
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 52
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000038,  // .....***..
++     0x00000078,  // ....****..
++     0x000000F8,  // ...*****..
++     0x000000F8,  // ...*****..
++     0x000001B8,  // ..**.***..
++     0x000001B8,  // ..**.***..
++     0x00000338,  // .**..***..
++     0x00000638,  // **...***..
++     0x000007FC,  // *********.
++     0x000007FC,  // *********.
++     0x00000038,  // .....***..
++     0x00000038,  // .....***..
++     0x00000038,  // .....***..
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 53
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000001FE,  // ..********
++     0x000001FE,  // ..********
++     0x00000100,  // ..*.......
++     0x00000300,  // .**.......
++     0x00000370,  // .**.***...
++     0x000003FC,  // .********.
++     0x0000039C,  // .***..***.
++     0x0000000E,  // .......***
++     0x0000000E,  // .......***
++     0x0000000E,  // .......***
++     0x0000031E,  // .**...****
++     0x000003FC,  // .********.
++     0x000001F0,  // ..*****...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 54
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000F8,  // ...*****..
++     0x000003FC,  // .********.
++     0x0000039E,  // .***..****
++     0x00000700,  // ***.......
++     0x00000700,  // ***.......
++     0x00000778,  // ***.****..
++     0x000007FC,  // *********.
++     0x0000079E,  // ****..****
++     0x0000070E,  // ***....***
++     0x0000070E,  // ***....***
++     0x0000039E,  // .***..****
++     0x000003FC,  // .********.
++     0x000000F0,  // ...****...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 55
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000003FE,  // .*********
++     0x000003FE,  // .*********
++     0x0000000C,  // .......**.
++     0x0000001C,  // ......***.
++     0x00000018,  // ......**..
++     0x00000030,  // .....**...
++     0x00000030,  // .....**...
++     0x00000070,  // ....***...
++     0x00000060,  // ....**....
++     0x000000E0,  // ...***....
++     0x000000E0,  // ...***....
++     0x000000E0,  // ...***....
++     0x000000C0,  // ...**.....
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 56
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000001F0,  // ..*****...
++     0x000003F8,  // .*******..
++     0x0000079C,  // ****..***.
++     0x0000071C,  // ***...***.
++     0x0000071C,  // ***...***.
++     0x000003F8,  // .*******..
++     0x000003FC,  // .********.
++     0x0000079E,  // ****..****
++     0x0000070E,  // ***....***
++     0x0000070E,  // ***....***
++     0x0000071E,  // ***...****
++     0x000003FC,  // .********.
++     0x000001F8,  // ..******..
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 57
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000F0,  // ...****...
++     0x000003F8,  // .*******..
++     0x00000798,  // ****..**..
++     0x0000071C,  // ***...***.
++     0x0000071C,  // ***...***.
++     0x0000071C,  // ***...***.
++     0x0000079C,  // ****..***.
++     0x000003FC,  // .********.
++     0x000001FC,  // ..*******.
++     0x0000001C,  // ......***.
++     0x00000718,  // ***...**..
++     0x000003F8,  // .*******..
++     0x000001F0,  // ..*****...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 58
++     6, 21,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 59
++     6, 21,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x00000004,  // ....*.
++     0x0000000C,  // ...**.
++     0x00000018,  // ..**..
++     0x00000000,  // ......
++  },
++  {             // 60
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000002,  // .........*
++     0x0000000E,  // .......***
++     0x0000007C,  // ....*****.
++     0x000003E0,  // .*****....
++     0x00000380,  // .***......
++     0x000003C0,  // .****.....
++     0x000001F8,  // ..******..
++     0x0000003E,  // .....*****
++     0x00000006,  // ........**
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 61
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000003FE,  // .*********
++     0x000003FE,  // .*********
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000003FE,  // .*********
++     0x000003FE,  // .*********
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 62
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000200,  // .*........
++     0x00000300,  // .**.......
++     0x000003E0,  // .*****....
++     0x0000007C,  // ....*****.
++     0x0000000E,  // .......***
++     0x0000001E,  // ......****
++     0x000000F8,  // ...*****..
++     0x000003C0,  // .****.....
++     0x00000300,  // .**.......
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 63
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000001F0,  // ...*****...
++     0x000003F8,  // ..*******..
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000001C,  // .......***.
++     0x0000003C,  // ......****.
++     0x00000078,  // .....****..
++     0x00000070,  // .....***...
++     0x000000E0,  // ....***....
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000000E0,  // ....***....
++     0x000000E0,  // ....***....
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 64
++     18, 21,
++     0x00000000,  // ..................
++     0x00000000,  // ..................
++     0x00000000,  // ..................
++     0x00000000,  // ..................
++     0x00001FC0,  // ......*******.....
++     0x00007FF0,  // ....***********...
++     0x0000C038,  // ...**........***..
++     0x0001865C,  // ..**....**..*.***.
++     0x00031FCC,  // .**...*******..**.
++     0x000339CE,  // .**..***..***..***
++     0x0007308E,  // ***..**....*...***
++     0x0007708E,  // ***.***....*...***
++     0x0007718E,  // ***.***...**...***
++     0x0007719C,  // ***.***...**..***.
++     0x00033FFC,  // .**..************.
++     0x00031CF0,  // .**...***..****...
++     0x00018000,  // ..**..............
++     0x0000E040,  // ...***......*.....
++     0x00007FC0,  // ....*********.....
++     0x00001F80,  // ......******......
++     0x00000000,  // ..................
++  },
++  {             // 65
++     13, 21,
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x000001C0,  // .....***.....
++     0x000001E0,  // .....****....
++     0x000003E0,  // ....*****....
++     0x00000360,  // ....**.**....
++     0x00000770,  // ...***.***...
++     0x00000770,  // ...***.***...
++     0x00000630,  // ...**...**...
++     0x00000E38,  // ..***...***..
++     0x00000FF8,  // ..*********..
++     0x00000FF8,  // ..*********..
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x0000180C,  // .**.......**.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 66
++     13, 21,
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00001FF0,  // .*********...
++     0x00001FF8,  // .**********..
++     0x00001C18,  // .***.....**..
++     0x00001C1C,  // .***.....***.
++     0x00001C18,  // .***.....**..
++     0x00001FF0,  // .*********...
++     0x00001FF8,  // .**********..
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001FF8,  // .**********..
++     0x00001FF0,  // .*********...
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 67
++     13, 21,
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x000003E0,  // ....*****....
++     0x000007F8,  // ...********..
++     0x00000E1C,  // ..***....***.
++     0x00001E1C,  // .****....***.
++     0x00001C00,  // .***.........
++     0x00001C00,  // .***.........
++     0x00001C00,  // .***.........
++     0x00001C00,  // .***.........
++     0x00001C00,  // .***.........
++     0x00001C1C,  // .***.....***.
++     0x00000E1C,  // ..***....***.
++     0x000007F8,  // ...********..
++     0x000003F0,  // ....******...
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 68
++     13, 21,
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00001FE0,  // .********....
++     0x00001FF0,  // .*********...
++     0x00001C38,  // .***....***..
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C18,  // .***.....**..
++     0x00001C38,  // .***....***..
++     0x00001FF0,  // .*********...
++     0x00001FE0,  // .********....
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 69
++     12, 21,
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000FFC,  // .**********.
++     0x00000FFC,  // .**********.
++     0x00000E00,  // .***........
++     0x00000E00,  // .***........
++     0x00000F00,  // .****.......
++     0x00000FFC,  // .**********.
++     0x00000FFC,  // .**********.
++     0x00000E00,  // .***........
++     0x00000E00,  // .***........
++     0x00000F00,  // .****.......
++     0x00000F00,  // .****.......
++     0x00000FFC,  // .**********.
++     0x00000FFC,  // .**********.
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++  },
++  {             // 70
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000007FC,  // .*********.
++     0x000007FC,  // .*********.
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x000007F8,  // .********..
++     0x000007F8,  // .********..
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 71
++     14, 21,
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x000007E0,  // ....******....
++     0x00000FF8,  // ...*********..
++     0x00001C38,  // ..***....***..
++     0x00001C1C,  // ..***.....***.
++     0x00003800,  // .***..........
++     0x00003800,  // .***..........
++     0x0000387C,  // .***....*****.
++     0x0000387C,  // .***....*****.
++     0x0000380C,  // .***.......**.
++     0x00001C1C,  // ..***.....***.
++     0x00001E3C,  // ..****...****.
++     0x00000FFC,  // ...**********.
++     0x000007C4,  // ....*****...*.
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++  },
++  {             // 72
++     13, 21,
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001FFC,  // .***********.
++     0x00001FFC,  // .***********.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 73
++     5, 21,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++  },
++  {             // 74
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x0000001C,  // ......***.
++     0x0000001C,  // ......***.
++     0x0000001C,  // ......***.
++     0x0000001C,  // ......***.
++     0x0000001C,  // ......***.
++     0x0000001C,  // ......***.
++     0x0000001C,  // ......***.
++     0x0000001C,  // ......***.
++     0x0000071C,  // ***...***.
++     0x0000071C,  // ***...***.
++     0x0000071C,  // ***...***.
++     0x000003F8,  // .*******..
++     0x000001F0,  // ..*****...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 75
++     13, 21,
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00001C1C,  // .***.....***.
++     0x00001C38,  // .***....***..
++     0x00001C70,  // .***...***...
++     0x00001CE0,  // .***..***....
++     0x00001DC0,  // .***.***.....
++     0x00001F80,  // .******......
++     0x00001FC0,  // .*******.....
++     0x00001EE0,  // .****.***....
++     0x00001CE0,  // .***..***....
++     0x00001C70,  // .***...***...
++     0x00001C38,  // .***....***..
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 76
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x000007FC,  // .*********.
++     0x000007FC,  // .*********.
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 77
++     15, 21,
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x0000783C,  // .****.....****.
++     0x00007C3C,  // .*****....****.
++     0x00007C7C,  // .*****...*****.
++     0x00007C7C,  // .*****...*****.
++     0x00007C7C,  // .*****...*****.
++     0x0000747C,  // .***.*...*****.
++     0x000076DC,  // .***.**.**.***.
++     0x000076DC,  // .***.**.**.***.
++     0x000076DC,  // .***.**.**.***.
++     0x000076DC,  // .***.**.**.***.
++     0x000073DC,  // .***..****.***.
++     0x0000739C,  // .***..***..***.
++     0x0000739C,  // .***..***..***.
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++  },
++  {             // 78
++     13, 21,
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00001C1C,  // .***.....***.
++     0x00001E1C,  // .****....***.
++     0x00001E1C,  // .****....***.
++     0x00001F1C,  // .*****...***.
++     0x00001F9C,  // .******..***.
++     0x00001D9C,  // .***.**..***.
++     0x00001DDC,  // .***.***.***.
++     0x00001CDC,  // .***..**.***.
++     0x00001C7C,  // .***...*****.
++     0x00001C7C,  // .***...*****.
++     0x00001C3C,  // .***....****.
++     0x00001C3C,  // .***....****.
++     0x00001C1C,  // .***.....***.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 79
++     14, 21,
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x000003C0,  // .....****.....
++     0x00000FF0,  // ...********...
++     0x00001C38,  // ..***....***..
++     0x00001C38,  // ..***....***..
++     0x0000381C,  // .***......***.
++     0x0000381C,  // .***......***.
++     0x0000381C,  // .***......***.
++     0x0000381C,  // .***......***.
++     0x0000381C,  // .***......***.
++     0x00001C38,  // ..***....***..
++     0x00001C38,  // ..***....***..
++     0x00000FF0,  // ...********...
++     0x000003C0,  // .....****.....
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++  },
++  {             // 80
++     12, 21,
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000FF8,  // .*********..
++     0x00000FFC,  // .**********.
++     0x00000E1E,  // .***....****
++     0x00000E0E,  // .***.....***
++     0x00000E0E,  // .***.....***
++     0x00000E1E,  // .***....****
++     0x00000FFC,  // .**********.
++     0x00000FF8,  // .*********..
++     0x00000E00,  // .***........
++     0x00000E00,  // .***........
++     0x00000E00,  // .***........
++     0x00000E00,  // .***........
++     0x00000E00,  // .***........
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++  },
++  {             // 81
++     14, 21,
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x000003E0,  // .....*****....
++     0x00000FF8,  // ...*********..
++     0x00001C3C,  // ..***....****.
++     0x00001C1C,  // ..***.....***.
++     0x0000380E,  // .***.......***
++     0x0000380E,  // .***.......***
++     0x0000380E,  // .***.......***
++     0x0000380E,  // .***.......***
++     0x0000384E,  // .***....*..***
++     0x00001CFC,  // ..***..******.
++     0x00001C7C,  // ..***...*****.
++     0x00000FFC,  // ...**********.
++     0x000003EE,  // .....*****.***
++     0x00000004,  // ............*.
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++  },
++  {             // 82
++     13, 21,
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00001FF8,  // .**********..
++     0x00001FFC,  // .***********.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C3C,  // .***....****.
++     0x00001FF8,  // .**********..
++     0x00001FF8,  // .**********..
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 83
++     12, 21,
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x000003F0,  // ...******...
++     0x000007FC,  // ..*********.
++     0x00000E1C,  // .***....***.
++     0x00000E1E,  // .***....****
++     0x00000E00,  // .***........
++     0x00000FE0,  // .*******....
++     0x000007F8,  // ..********..
++     0x0000007C,  // ......*****.
++     0x0000000C,  // .........**.
++     0x00000E0C,  // .***.....**.
++     0x00000E1C,  // .***....***.
++     0x000007F8,  // ..********..
++     0x000003F0,  // ...******...
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++  },
++  {             // 84
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000FFC,  // **********.
++     0x00000FFC,  // **********.
++     0x000000E0,  // ....***....
++     0x000000E0,  // ....***....
++     0x000000E0,  // ....***....
++     0x000000E0,  // ....***....
++     0x000000E0,  // ....***....
++     0x000000E0,  // ....***....
++     0x000000E0,  // ....***....
++     0x000000E0,  // ....***....
++     0x000000E0,  // ....***....
++     0x000000E0,  // ....***....
++     0x000000E0,  // ....***....
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 85
++     13, 21,
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001E3C,  // .****...****.
++     0x00000FF8,  // ..*********..
++     0x000003E0,  // ....*****....
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 86
++     12, 21,
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000C0C,  // .**......**.
++     0x00000E1C,  // .***....***.
++     0x00000E1C,  // .***....***.
++     0x0000061C,  // ..**....***.
++     0x00000618,  // ..**....**..
++     0x00000738,  // ..***..***..
++     0x00000330,  // ...**..**...
++     0x00000330,  // ...**..**...
++     0x000003F0,  // ...******...
++     0x000001E0,  // ....****....
++     0x000001E0,  // ....****....
++     0x000001E0,  // ....****....
++     0x000000C0,  // .....**.....
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++  },
++  {             // 87
++     17, 21,
++     0x00000000,  // .................
++     0x00000000,  // .................
++     0x00000000,  // .................
++     0x00000000,  // .................
++     0x0003870C,  // ***....***....**.
++     0x0001870C,  // .**....***....**.
++     0x0001C71C,  // .***...***...***.
++     0x0001CD9C,  // .***..**.**..***.
++     0x0000CD9C,  // ..**..**.**..***.
++     0x0000CD98,  // ..**..**.**..**..
++     0x0000CD98,  // ..**..**.**..**..
++     0x0000ECB8,  // ..***.**..*.***..
++     0x000078F0,  // ...****...****...
++     0x000078F0,  // ...****...****...
++     0x000078F0,  // ...****...****...
++     0x000038F0,  // ....***...****...
++     0x00003060,  // ....**.....**....
++     0x00000000,  // .................
++     0x00000000,  // .................
++     0x00000000,  // .................
++     0x00000000,  // .................
++  },
++  {             // 88
++     12, 21,
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000E1C,  // .***....***.
++     0x00000F1C,  // .****...***.
++     0x00000738,  // ..***..***..
++     0x000003F8,  // ...*******..
++     0x000003F0,  // ...******...
++     0x000001E0,  // ....****....
++     0x000001E0,  // ....****....
++     0x000001E0,  // ....****....
++     0x000003F0,  // ...******...
++     0x00000738,  // ..***..***..
++     0x00000738,  // ..***..***..
++     0x00000E1C,  // .***....***.
++     0x00000E1C,  // .***....***.
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++  },
++  {             // 89
++     12, 21,
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000E1C,  // .***....***.
++     0x00000E1C,  // .***....***.
++     0x0000071C,  // ..***...***.
++     0x00000738,  // ..***..***..
++     0x000003B8,  // ...***.***..
++     0x000001F0,  // ....*****...
++     0x000001F0,  // ....*****...
++     0x000000E0,  // .....***....
++     0x000000E0,  // .....***....
++     0x000000E0,  // .....***....
++     0x000000E0,  // .....***....
++     0x000000E0,  // .....***....
++     0x000000E0,  // .....***....
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++  },
++  {             // 90
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000FFC,  // **********.
++     0x00000FFC,  // **********.
++     0x0000003C,  // ......****.
++     0x00000038,  // ......***..
++     0x00000070,  // .....***...
++     0x000000E0,  // ....***....
++     0x000001E0,  // ...****....
++     0x000001C0,  // ...***.....
++     0x00000380,  // ..***......
++     0x00000700,  // .***.......
++     0x00000F00,  // ****.......
++     0x00000FFC,  // **********.
++     0x00000FFC,  // **********.
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 91
++     6, 21,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x0000003C,  // .****.
++     0x0000003C,  // .****.
++     0x00000030,  // .**...
++     0x00000030,  // .**...
++     0x00000030,  // .**...
++     0x00000030,  // .**...
++     0x00000030,  // .**...
++     0x00000030,  // .**...
++     0x00000030,  // .**...
++     0x00000030,  // .**...
++     0x00000030,  // .**...
++     0x00000030,  // .**...
++     0x00000030,  // .**...
++     0x00000030,  // .**...
++     0x00000030,  // .**...
++     0x0000003C,  // .****.
++     0x0000003C,  // .****.
++  },
++  {             // 92
++     5, 21,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000020,  // *....
++     0x00000020,  // *....
++     0x00000010,  // .*...
++     0x00000010,  // .*...
++     0x00000010,  // .*...
++     0x00000018,  // .**..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x0000000C,  // ..**.
++     0x00000004,  // ...*.
++     0x00000004,  // ...*.
++     0x00000006,  // ...**
++     0x00000002,  // ....*
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++  },
++  {             // 93
++     6, 21,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x0000007C,  // *****.
++     0x0000007C,  // *****.
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x0000007C,  // *****.
++     0x0000007C,  // *****.
++  },
++  {             // 94
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000070,  // ....***...
++     0x000000F0,  // ...****...
++     0x000000F8,  // ...*****..
++     0x000000D8,  // ...**.**..
++     0x00000198,  // ..**..**..
++     0x0000018C,  // ..**...**.
++     0x0000030C,  // .**....**.
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 95
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000FFE,  // ***********
++     0x00000FFE,  // ***********
++  },
++  {             // 96
++     6, 21,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000070,  // ***...
++     0x00000030,  // .**...
++     0x00000018,  // ..**..
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 97
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000001F0,  // ..*****...
++     0x000003F8,  // .*******..
++     0x0000079C,  // ****..***.
++     0x0000001C,  // ......***.
++     0x000000FC,  // ...******.
++     0x000003FC,  // .********.
++     0x0000071C,  // ***...***.
++     0x0000071C,  // ***...***.
++     0x000007FC,  // *********.
++     0x000003DC,  // .****.***.
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 98
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x000007F0,  // .*******...
++     0x000007FC,  // .*********.
++     0x0000079C,  // .****..***.
++     0x0000070E,  // .***....***
++     0x0000070E,  // .***....***
++     0x0000070E,  // .***....***
++     0x0000070E,  // .***....***
++     0x0000079C,  // .****..***.
++     0x000007FC,  // .*********.
++     0x00000770,  // .***.***...
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 99
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000F0,  // ...****...
++     0x000003F8,  // .*******..
++     0x0000039C,  // .***..***.
++     0x0000070C,  // ***....**.
++     0x00000700,  // ***.......
++     0x00000700,  // ***.......
++     0x00000700,  // ***.......
++     0x0000078C,  // ****...**.
++     0x000003FC,  // .********.
++     0x000000F0,  // ...****...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 100
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x0000001C,  // .......***.
++     0x0000001C,  // .......***.
++     0x0000001C,  // .......***.
++     0x000001DC,  // ...***.***.
++     0x000007FC,  // .*********.
++     0x0000073C,  // .***..****.
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x00000F3C,  // ****..****.
++     0x000007FC,  // .*********.
++     0x000003DC,  // ..****.***.
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 101
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000001E0,  // ..****....
++     0x000003F8,  // .*******..
++     0x00000318,  // .**...**..
++     0x0000071C,  // ***...***.
++     0x000007FC,  // *********.
++     0x000007FC,  // *********.
++     0x00000700,  // ***.......
++     0x0000071C,  // ***...***.
++     0x000003F8,  // .*******..
++     0x000001F0,  // ..*****...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 102
++     6, 21,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x0000001C,  // ..***.
++     0x0000003C,  // .****.
++     0x00000038,  // .***..
++     0x0000007C,  // *****.
++     0x0000007C,  // *****.
++     0x00000038,  // .***..
++     0x00000038,  // .***..
++     0x00000038,  // .***..
++     0x00000038,  // .***..
++     0x00000038,  // .***..
++     0x00000038,  // .***..
++     0x00000038,  // .***..
++     0x00000038,  // .***..
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 103
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000001DC,  // ...***.***.
++     0x000003FC,  // ..********.
++     0x0000073C,  // .***..****.
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x00000F3C,  // ****..****.
++     0x000007FC,  // .*********.
++     0x000003FC,  // ..********.
++     0x0000001C,  // .......***.
++     0x00000F3C,  // ****..****.
++     0x000007F8,  // .********..
++     0x000003F0,  // ..******...
++  },
++  {             // 104
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000778,  // .***.****..
++     0x000007FC,  // .*********.
++     0x0000079C,  // .****..***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 105
++     5, 21,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x00000000,  // .....
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++  },
++  {             // 106
++     5, 21,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x00000000,  // .....
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000003C,  // ****.
++     0x00000038,  // ***..
++  },
++  {             // 107
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000380,  // .***......
++     0x00000380,  // .***......
++     0x00000380,  // .***......
++     0x0000039C,  // .***..***.
++     0x0000039C,  // .***..***.
++     0x000003B8,  // .***.***..
++     0x000003F0,  // .******...
++     0x000003F0,  // .******...
++     0x000003F0,  // .******...
++     0x000003B8,  // .***.***..
++     0x00000398,  // .***..**..
++     0x0000039C,  // .***..***.
++     0x0000038E,  // .***...***
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 108
++     5, 21,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++  },
++  {             // 109
++     16, 21,
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x0001DCF0,  // ***.***..****...
++     0x0001FFF8,  // **************..
++     0x0001E71C,  // ****..***...***.
++     0x0001C71C,  // ***...***...***.
++     0x0001C71C,  // ***...***...***.
++     0x0001C71C,  // ***...***...***.
++     0x0001C71C,  // ***...***...***.
++     0x0001C71C,  // ***...***...***.
++     0x0001C71C,  // ***...***...***.
++     0x0001C71C,  // ***...***...***.
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++  },
++  {             // 110
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000770,  // .***.***...
++     0x000007F8,  // .********..
++     0x0000079C,  // .****..***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 111
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000001F0,  // ...*****...
++     0x000003F8,  // ..*******..
++     0x00000738,  // .***..***..
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x0000071C,  // .***...***.
++     0x000007F8,  // .********..
++     0x000001F0,  // ...*****...
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 112
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000770,  // .***.***...
++     0x000007FC,  // .*********.
++     0x0000079C,  // .****..***.
++     0x0000070E,  // .***....***
++     0x0000070E,  // .***....***
++     0x0000070E,  // .***....***
++     0x0000070E,  // .***....***
++     0x0000079C,  // .****..***.
++     0x000007FC,  // .*********.
++     0x00000770,  // .***.***...
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++  },
++  {             // 113
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000001DC,  // ...***.***.
++     0x000007FC,  // .*********.
++     0x0000073C,  // .***..****.
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x00000F3C,  // ****..****.
++     0x000007FC,  // .*********.
++     0x000003DC,  // ..****.***.
++     0x0000001C,  // .......***.
++     0x0000001C,  // .......***.
++     0x0000001C,  // .......***.
++     0x0000001C,  // .......***.
++  },
++  {             // 114
++     7, 21,
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000076,  // .***.**
++     0x0000007E,  // .******
++     0x0000007A,  // .****.*
++     0x00000070,  // .***...
++     0x00000070,  // .***...
++     0x00000070,  // .***...
++     0x00000070,  // .***...
++     0x00000070,  // .***...
++     0x00000070,  // .***...
++     0x00000070,  // .***...
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++  },
++  {             // 115
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000F0,  // ...****...
++     0x000001F8,  // ..******..
++     0x0000039C,  // .***..***.
++     0x00000380,  // .***......
++     0x000003F0,  // .******...
++     0x000001FC,  // ..*******.
++     0x0000003E,  // .....*****
++     0x0000038E,  // .***...***
++     0x000003FC,  // .********.
++     0x000001F8,  // ..******..
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 116
++     6, 21,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000038,  // .***..
++     0x00000038,  // .***..
++     0x0000007C,  // *****.
++     0x0000007C,  // *****.
++     0x00000038,  // .***..
++     0x00000038,  // .***..
++     0x00000038,  // .***..
++     0x00000038,  // .***..
++     0x00000038,  // .***..
++     0x00000038,  // .***..
++     0x0000003A,  // .***.*
++     0x0000001C,  // ..***.
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 117
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x000007FC,  // .*********.
++     0x000003DC,  // ..****.***.
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 118
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x0000070C,  // ***....**.
++     0x0000030C,  // .**....**.
++     0x0000039C,  // .***..***.
++     0x0000039C,  // .***..***.
++     0x00000198,  // ..**..**..
++     0x00000198,  // ..**..**..
++     0x000001F8,  // ..******..
++     0x000000F0,  // ...****...
++     0x000000F0,  // ...****...
++     0x000000E0,  // ...***....
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 119
++     14, 21,
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x0000718C,  // ***...**...**.
++     0x000033CE,  // .**..****..***
++     0x000033CC,  // .**..****..**.
++     0x000033DC,  // .**..****.***.
++     0x00003BDC,  // .***.****.***.
++     0x00001AD8,  // ..**.*.**.**..
++     0x00001E78,  // ..****..****..
++     0x00001E78,  // ..****..****..
++     0x00001E70,  // ..****..***...
++     0x00000E70,  // ...***..***...
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++  },
++  {             // 120
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x0000039C,  // .***..***.
++     0x0000039C,  // .***..***.
++     0x000001F8,  // ..******..
++     0x000000F8,  // ...*****..
++     0x000000F0,  // ...****...
++     0x000000F0,  // ...****...
++     0x000001F0,  // ..*****...
++     0x000001F8,  // ..******..
++     0x0000039C,  // .***..***.
++     0x0000039C,  // .***..***.
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 121
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x0000070C,  // ***....**.
++     0x0000030C,  // .**....**.
++     0x0000039C,  // .***..***.
++     0x0000039C,  // .***..***.
++     0x00000198,  // ..**..**..
++     0x000001D8,  // ..***.**..
++     0x000001F8,  // ..******..
++     0x000000F0,  // ...****...
++     0x000000F0,  // ...****...
++     0x000000E0,  // ...***....
++     0x00000060,  // ....**....
++     0x000000E0,  // ...***....
++     0x000001C0,  // ..***.....
++     0x000001C0,  // ..***.....
++  },
++  {             // 122
++     9, 21,
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x000003FC,  // ********.
++     0x000003FC,  // ********.
++     0x0000001C,  // .....***.
++     0x00000038,  // ....***..
++     0x00000070,  // ...***...
++     0x000000E0,  // ..***....
++     0x000001C0,  // .***.....
++     0x000003C0,  // ****.....
++     0x000003FC,  // ********.
++     0x000003FC,  // ********.
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++  },
++  {             // 123
++     7, 21,
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x0000001C,  // ...***.
++     0x0000003C,  // ..****.
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000070,  // .***...
++     0x00000078,  // .****..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x0000003C,  // ..****.
++     0x0000001C,  // ...***.
++  },
++  {             // 124
++     5, 21,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++  },
++  {             // 125
++     7, 21,
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000070,  // .***...
++     0x00000078,  // .****..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x0000003C,  // ..****.
++     0x0000001C,  // ...***.
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000078,  // .****..
++     0x00000070,  // .***...
++  },
++  {             // 126
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000001C4,  // ..***...*.
++     0x000003EC,  // .*****.**.
++     0x0000037C,  // .**.*****.
++     0x00000118,  // ..*...**..
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 127
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 128
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 129
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 130
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 131
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 132
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 133
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 134
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 135
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 136
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 137
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 138
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 139
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 140
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 141
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 142
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 143
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 144
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 145
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 146
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 147
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 148
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 149
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 150
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 151
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 152
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 153
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 154
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 155
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 156
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 157
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 158
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 159
++     0, 21,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 160
++     5, 21,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++  },
++  {             // 161
++     6, 21,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000038,  // .***..
++     0x00000038,  // .***..
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000010,  // ..*...
++     0x00000010,  // ..*...
++     0x00000038,  // .***..
++     0x00000038,  // .***..
++     0x00000038,  // .***..
++     0x00000038,  // .***..
++     0x00000038,  // .***..
++     0x00000038,  // .***..
++     0x00000038,  // .***..
++     0x00000000,  // ......
++  },
++  {             // 162
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000020,  // .....*....
++     0x00000020,  // .....*....
++     0x000001F8,  // ..******..
++     0x000003FC,  // .********.
++     0x000003AC,  // .***.*.**.
++     0x0000072C,  // ***..*.**.
++     0x00000720,  // ***..*....
++     0x00000720,  // ***..*....
++     0x0000072C,  // ***..*.**.
++     0x000003BC,  // .***.****.
++     0x000001FC,  // ..*******.
++     0x000000F8,  // ...*****..
++     0x00000020,  // .....*....
++     0x00000020,  // .....*....
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 163
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000001F0,  // ..*****...
++     0x000003FC,  // .********.
++     0x0000079C,  // ****..***.
++     0x0000070C,  // ***....**.
++     0x00000700,  // ***.......
++     0x00000780,  // ****......
++     0x000003F0,  // .******...
++     0x000003D0,  // .****.*...
++     0x000001C0,  // ..***.....
++     0x000001C0,  // ..***.....
++     0x00000180,  // ..**......
++     0x000002FC,  // .*.******.
++     0x000003FC,  // .********.
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 164
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000104,  // ..*.....*.
++     0x000003FC,  // .********.
++     0x000003FC,  // .********.
++     0x0000039C,  // .***..***.
++     0x0000039C,  // .***..***.
++     0x0000039C,  // .***..***.
++     0x000001FC,  // ..*******.
++     0x000003FC,  // .********.
++     0x00000208,  // .*.....*..
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 165
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x0000070E,  // ***....***
++     0x0000030C,  // .**....**.
++     0x0000039C,  // .***..***.
++     0x00000198,  // ..**..**..
++     0x000001F0,  // ..*****...
++     0x000000F0,  // ...****...
++     0x000002FC,  // .*.******.
++     0x000003FC,  // .********.
++     0x000003FC,  // .********.
++     0x000003FC,  // .********.
++     0x00000070,  // ....***...
++     0x00000070,  // ....***...
++     0x00000070,  // ....***...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 166
++     5, 21,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++  },
++  {             // 167
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000F0,  // ...****...
++     0x000001FC,  // ..*******.
++     0x0000039C,  // .***..***.
++     0x0000039C,  // .***..***.
++     0x000003E0,  // .*****....
++     0x000001F8,  // ..******..
++     0x0000037C,  // .**.*****.
++     0x0000071E,  // ***...****
++     0x0000078E,  // ****...***
++     0x000003CE,  // .****..***
++     0x000001FC,  // ..*******.
++     0x0000007C,  // ....*****.
++     0x0000039E,  // .***..****
++     0x0000039C,  // .***..***.
++     0x0000019C,  // ..**..***.
++     0x000001F8,  // ..******..
++     0x000000F0,  // ...****...
++  },
++  {             // 168
++     6, 21,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x0000007E,  // ******
++     0x0000007E,  // ******
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 169
++     13, 21,
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x000003E0,  // ....*****....
++     0x00000FF8,  // ..*********..
++     0x00001DDC,  // .***.***.***.
++     0x000017E4,  // .*.******..*.
++     0x00002632,  // *..**...**..*
++     0x00002E02,  // *.***.......*
++     0x00002E02,  // *.***.......*
++     0x00002E02,  // *.***.......*
++     0x00002632,  // *..**...**..*
++     0x000017E4,  // .*.******..*.
++     0x00001DDC,  // .***.***.***.
++     0x00000FF8,  // ..*********..
++     0x000003E0,  // ....*****....
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 170
++     7, 21,
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000078,  // .****..
++     0x000000F8,  // *****..
++     0x00000038,  // ..***..
++     0x000000E8,  // ***.*..
++     0x000000F8,  // *****..
++     0x0000006C,  // .**.**.
++     0x00000000,  // .......
++     0x0000007C,  // .*****.
++     0x0000007C,  // .*****.
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++  },
++  {             // 171
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000048,  // ....*..*..
++     0x000000C8,  // ...**..*..
++     0x000001D8,  // ..***.**..
++     0x00000130,  // ..*..**...
++     0x00000130,  // ..*..**...
++     0x00000198,  // ..**..**..
++     0x000000C8,  // ...**..*..
++     0x00000048,  // ....*..*..
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 172
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000003FE,  // .*********
++     0x000003FE,  // .*********
++     0x00000002,  // .........*
++     0x00000002,  // .........*
++     0x00000002,  // .........*
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 173
++     6, 21,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x0000007C,  // *****.
++     0x0000007C,  // *****.
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 174
++     13, 21,
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x000003E0,  // ....*****....
++     0x00000FF8,  // ..*********..
++     0x00001FFC,  // .***********.
++     0x000017F4,  // .*.*******.*.
++     0x0000373A,  // **.***..***.*
++     0x0000273A,  // *..***..***.*
++     0x000027E2,  // *..******...*
++     0x000027F2,  // *..*******..*
++     0x00002732,  // *..***..**..*
++     0x00001774,  // .*.***.***.*.
++     0x00001C1C,  // .***.....***.
++     0x00000FF8,  // ..*********..
++     0x000003E0,  // ....*****....
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 175
++     6, 21,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x0000007C,  // *****.
++     0x0000007C,  // *****.
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 176
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000000E0,  // ....***....
++     0x000001E0,  // ...****....
++     0x00000110,  // ...*...*...
++     0x00000110,  // ...*...*...
++     0x00000110,  // ...*...*...
++     0x000000E0,  // ....***....
++     0x000000E0,  // ....***....
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 177
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000070,  // ....***...
++     0x00000070,  // ....***...
++     0x00000070,  // ....***...
++     0x000003FC,  // .********.
++     0x000003FC,  // .********.
++     0x00000070,  // ....***...
++     0x00000070,  // ....***...
++     0x00000070,  // ....***...
++     0x00000070,  // ....***...
++     0x000003FC,  // .********.
++     0x000003FC,  // .********.
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 178
++     6, 21,
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000078,  // .****..
++     0x000000FE,  // *******
++     0x000000EE,  // ***.***
++     0x0000000C,  // ....**.
++     0x00000018,  // ...**..
++     0x00000070,  // .***...
++     0x000000FE,  // *******
++     0x0000007E,  // .******
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++  },
++  {             // 179
++     6, 21,
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000078,  // .****..
++     0x0000007C,  // .*****.
++     0x000000DC,  // **.***.
++     0x0000003C,  // ..****.
++     0x0000003E,  // ..*****
++     0x0000000E,  // ....***
++     0x000000FE,  // *******
++     0x00000078,  // .****..
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++  },
++  {             // 180
++     6, 21,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x0000000E,  // ...***
++     0x0000000C,  // ...**.
++     0x00000018,  // ..**..
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 181
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x000007FC,  // .*********.
++     0x000007EC,  // .******.**.
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++  },
++  {             // 182
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000001FE,  // ..********
++     0x000003FE,  // .*********
++     0x000003FC,  // .********.
++     0x000007FC,  // *********.
++     0x000007FC,  // *********.
++     0x000007FC,  // *********.
++     0x000003FC,  // .********.
++     0x000003FC,  // .********.
++     0x000000FC,  // ...******.
++     0x000000FC,  // ...******.
++     0x000000FC,  // ...******.
++     0x000000FC,  // ...******.
++     0x000000FC,  // ...******.
++     0x000000FC,  // ...******.
++     0x000000FC,  // ...******.
++     0x000000FC,  // ...******.
++     0x00000000,  // ..........
++  },
++  {             // 183
++     5, 21,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++  },
++  {             // 184
++     6, 21,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000008,  // ...*..
++     0x0000001C,  // ..***.
++     0x0000000E,  // ...***
++     0x0000003C,  // .****.
++  },
++  {             // 185
++     6, 21,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x0000001C,  // ..***.
++     0x0000003C,  // .****.
++     0x0000003C,  // .****.
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x0000001C,  // ..***.
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 186
++     7, 21,
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000038,  // ..***..
++     0x0000007C,  // .*****.
++     0x000000CC,  // **..**.
++     0x000000CC,  // **..**.
++     0x000000FC,  // ******.
++     0x00000078,  // .****..
++     0x00000000,  // .......
++     0x0000007C,  // .*****.
++     0x0000007C,  // .*****.
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++  },
++  {             // 187
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000120,  // ..*..*....
++     0x00000130,  // ..*..**...
++     0x000001B8,  // ..**.***..
++     0x000000C8,  // ...**..*..
++     0x000000C8,  // ...**..*..
++     0x000001B8,  // ..**.***..
++     0x00000130,  // ..*..**...
++     0x00000120,  // ..*..*....
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 188
++     16, 21,
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00007060,  // ..***.....**....
++     0x0000F040,  // .****.....*.....
++     0x0000F0C0,  // .****....**.....
++     0x00007080,  // ..***....*......
++     0x00007180,  // ..***...**......
++     0x0000731C,  // ..***..**...***.
++     0x0000733C,  // ..***..**..****.
++     0x0000763C,  // ..***.**...****.
++     0x00000C6C,  // .....**...**.**.
++     0x00000CDC,  // .....**..**.***.
++     0x000018FC,  // ....**...******.
++     0x000018FC,  // ....**...******.
++     0x0000301C,  // ...**.......***.
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++  },
++  {             // 189
++     16, 21,
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00007020,  // ..***......*....
++     0x0000F040,  // .****.....*.....
++     0x0000F040,  // .****.....*.....
++     0x00007080,  // ..***....*......
++     0x00007180,  // ..***...**......
++     0x00007138,  // ..***...*..***..
++     0x000072FE,  // ..***..*.*******
++     0x000076EE,  // ..***.**.***.***
++     0x0000040E,  // ......*......***
++     0x00000C18,  // .....**.....**..
++     0x00001830,  // ....**.....**...
++     0x0000187E,  // ....**....******
++     0x0000307E,  // ...**.....******
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++  },
++  {             // 190
++     16, 21,
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x0000F020,  // .****......*....
++     0x0000F860,  // .*****....**....
++     0x0001B860,  // **.***....**....
++     0x000078C0,  // ..****...**.....
++     0x00007CC0,  // ..*****..**.....
++     0x00001D9C,  // ....***.**..***.
++     0x0001FD3C,  // *******.*..****.
++     0x0000F33C,  // .****..**..****.
++     0x0000066C,  // ......**..**.**.
++     0x000006DC,  // ......**.**.***.
++     0x00000CFC,  // .....**..******.
++     0x00000CFC,  // .....**..******.
++     0x0000181C,  // ....**......***.
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++  },
++  {             // 191
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000000E0,  // ....***....
++     0x000000E0,  // ....***....
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000000E0,  // ....***....
++     0x000000E0,  // ....***....
++     0x000001C0,  // ...***.....
++     0x00000380,  // ..***......
++     0x00000700,  // .***.......
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000073C,  // .***..****.
++     0x000003F8,  // ..*******..
++     0x000000F0,  // ....****...
++  },
++  {             // 192
++     13, 21,
++     0x00000300,  // ....**.......
++     0x00000180,  // .....**......
++     0x00000080,  // ......*......
++     0x00000000,  // .............
++     0x000001C0,  // .....***.....
++     0x000001E0,  // .....****....
++     0x000003E0,  // ....*****....
++     0x00000360,  // ....**.**....
++     0x00000770,  // ...***.***...
++     0x00000770,  // ...***.***...
++     0x00000630,  // ...**...**...
++     0x00000E38,  // ..***...***..
++     0x00000FF8,  // ..*********..
++     0x00000FF8,  // ..*********..
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x0000180C,  // .**.......**.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 193
++     13, 21,
++     0x00000060,  // .......**....
++     0x000000C0,  // ......**.....
++     0x00000080,  // ......*......
++     0x00000000,  // .............
++     0x000001C0,  // .....***.....
++     0x000001E0,  // .....****....
++     0x000003E0,  // ....*****....
++     0x00000360,  // ....**.**....
++     0x00000770,  // ...***.***...
++     0x00000770,  // ...***.***...
++     0x00000630,  // ...**...**...
++     0x00000E38,  // ..***...***..
++     0x00000FF8,  // ..*********..
++     0x00000FF8,  // ..*********..
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x0000180C,  // .**.......**.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 194
++     13, 21,
++     0x000001C0,  // .....***.....
++     0x00000140,  // .....*.*.....
++     0x00000220,  // ....*...*....
++     0x00000000,  // .............
++     0x000001C0,  // .....***.....
++     0x000001E0,  // .....****....
++     0x000003E0,  // ....*****....
++     0x00000360,  // ....**.**....
++     0x00000770,  // ...***.***...
++     0x00000770,  // ...***.***...
++     0x00000630,  // ...**...**...
++     0x00000E38,  // ..***...***..
++     0x00000FF8,  // ..*********..
++     0x00000FF8,  // ..*********..
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x0000180C,  // .**.......**.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 195
++     13, 21,
++     0x00000310,  // ....**...*...
++     0x000003F0,  // ....******...
++     0x00000660,  // ...**..**....
++     0x00000000,  // .............
++     0x000001C0,  // .....***.....
++     0x000001E0,  // .....****....
++     0x000003E0,  // ....*****....
++     0x00000360,  // ....**.**....
++     0x00000770,  // ...***.***...
++     0x00000770,  // ...***.***...
++     0x00000630,  // ...**...**...
++     0x00000E38,  // ..***...***..
++     0x00000FF8,  // ..*********..
++     0x00000FF8,  // ..*********..
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x0000180C,  // .**.......**.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 196
++     13, 21,
++     0x00000000,  // .............
++     0x00000770,  // ...***.***...
++     0x00000770,  // ...***.***...
++     0x00000000,  // .............
++     0x000001C0,  // .....***.....
++     0x000001E0,  // .....****....
++     0x000003E0,  // ....*****....
++     0x00000360,  // ....**.**....
++     0x00000770,  // ...***.***...
++     0x00000770,  // ...***.***...
++     0x00000630,  // ...**...**...
++     0x00000E38,  // ..***...***..
++     0x00000FF8,  // ..*********..
++     0x00000FF8,  // ..*********..
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x0000180C,  // .**.......**.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 197
++     13, 21,
++     0x000001C0,  // .....***.....
++     0x00000140,  // .....*.*.....
++     0x000001C0,  // .....***.....
++     0x00000000,  // .............
++     0x000001C0,  // .....***.....
++     0x000001E0,  // .....****....
++     0x000003E0,  // ....*****....
++     0x00000360,  // ....**.**....
++     0x00000770,  // ...***.***...
++     0x00000770,  // ...***.***...
++     0x00000630,  // ...**...**...
++     0x00000E38,  // ..***...***..
++     0x00000FF8,  // ..*********..
++     0x00000FF8,  // ..*********..
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x0000180C,  // .**.......**.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 198
++     18, 21,
++     0x00000000,  // ..................
++     0x00000000,  // ..................
++     0x00000000,  // ..................
++     0x00000000,  // ..................
++     0x00003FFC,  // .....************.
++     0x00007FFC,  // ....*************.
++     0x00006700,  // ....**..***.......
++     0x0000E700,  // ...***..***.......
++     0x0000E700,  // ...***..***.......
++     0x0000C7FC,  // ...**...*********.
++     0x0001C7FC,  // ..***...*********.
++     0x0001C700,  // ..***...***.......
++     0x0001FF00,  // ..*********.......
++     0x0003FF00,  // .**********.......
++     0x00038700,  // .***....***.......
++     0x000307FE,  // .**.....**********
++     0x000707FE,  // ***.....**********
++     0x00000000,  // ..................
++     0x00000000,  // ..................
++     0x00000000,  // ..................
++     0x00000000,  // ..................
++  },
++  {             // 199
++     13, 21,
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x000003E0,  // ....*****....
++     0x000007F8,  // ...********..
++     0x00000E1C,  // ..***....***.
++     0x00001E1C,  // .****....***.
++     0x00001C00,  // .***.........
++     0x00001C00,  // .***.........
++     0x00001C00,  // .***.........
++     0x00001C00,  // .***.........
++     0x00001C00,  // .***.........
++     0x00000C1C,  // ..**.....***.
++     0x00000E1C,  // ..***....***.
++     0x000007F8,  // ...********..
++     0x000003F0,  // ....******...
++     0x00000080,  // ......*......
++     0x000001C0,  // .....***.....
++     0x000000E0,  // ......***....
++     0x000003C0,  // ....****.....
++  },
++  {             // 200
++     12, 21,
++     0x00000180,  // ....**......
++     0x000000C0,  // .....**.....
++     0x00000040,  // ......*.....
++     0x00000000,  // ............
++     0x00000FFC,  // .**********.
++     0x00000FFC,  // .**********.
++     0x00000E00,  // .***........
++     0x00000E00,  // .***........
++     0x00000F00,  // .****.......
++     0x00000FFC,  // .**********.
++     0x00000FFC,  // .**********.
++     0x00000E00,  // .***........
++     0x00000E00,  // .***........
++     0x00000F00,  // .****.......
++     0x00000F00,  // .****.......
++     0x00000FFC,  // .**********.
++     0x00000FFC,  // .**********.
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++  },
++  {             // 201
++     12, 21,
++     0x00000060,  // ......**....
++     0x00000060,  // ......**....
++     0x000000C0,  // .....**.....
++     0x00000000,  // ............
++     0x00000FFC,  // .**********.
++     0x00000FFC,  // .**********.
++     0x00000E00,  // .***........
++     0x00000E00,  // .***........
++     0x00000F00,  // .****.......
++     0x00000FFC,  // .**********.
++     0x00000FFC,  // .**********.
++     0x00000E00,  // .***........
++     0x00000E00,  // .***........
++     0x00000F00,  // .****.......
++     0x00000F00,  // .****.......
++     0x00000FFC,  // .**********.
++     0x00000FFC,  // .**********.
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++  },
++  {             // 202
++     12, 21,
++     0x000000C0,  // .....**.....
++     0x000001A0,  // ....**.*....
++     0x00000130,  // ....*..**...
++     0x00000000,  // ............
++     0x00000FFC,  // .**********.
++     0x00000FFC,  // .**********.
++     0x00000E00,  // .***........
++     0x00000E00,  // .***........
++     0x00000F00,  // .****.......
++     0x00000FFC,  // .**********.
++     0x00000FFC,  // .**********.
++     0x00000E00,  // .***........
++     0x00000E00,  // .***........
++     0x00000F00,  // .****.......
++     0x00000F00,  // .****.......
++     0x00000FFC,  // .**********.
++     0x00000FFC,  // .**********.
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++  },
++  {             // 203
++     12, 21,
++     0x00000000,  // ............
++     0x000003F0,  // ...******...
++     0x000003F0,  // ...******...
++     0x00000000,  // ............
++     0x00000FFC,  // .**********.
++     0x00000FFC,  // .**********.
++     0x00000E00,  // .***........
++     0x00000E00,  // .***........
++     0x00000F00,  // .****.......
++     0x00000FFC,  // .**********.
++     0x00000FFC,  // .**********.
++     0x00000E00,  // .***........
++     0x00000E00,  // .***........
++     0x00000F00,  // .****.......
++     0x00000F00,  // .****.......
++     0x00000FFC,  // .**********.
++     0x00000FFC,  // .**********.
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++  },
++  {             // 204
++     5, 21,
++     0x00000030,  // **...
++     0x00000018,  // .**..
++     0x00000008,  // ..*..
++     0x00000000,  // .....
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++  },
++  {             // 205
++     5, 21,
++     0x00000006,  // ...**
++     0x0000000C,  // ..**.
++     0x00000008,  // ..*..
++     0x00000000,  // .....
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++  },
++  {             // 206
++     5, 21,
++     0x0000001C,  // .***.
++     0x00000014,  // .*.*.
++     0x00000022,  // *...*
++     0x00000000,  // .....
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++  },
++  {             // 207
++     5, 21,
++     0x00000000,  // ......
++     0x000000EE,  // ***.***
++     0x000000EE,  // ***.***
++     0x00000000,  // .......
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 208
++     13, 21,
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00001FE0,  // .********....
++     0x00001FF0,  // .*********...
++     0x00001C38,  // .***....***..
++     0x00001C18,  // .***.....**..
++     0x00001C1C,  // .***.....***.
++     0x00003F9C,  // *******..***.
++     0x00003F9C,  // *******..***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C18,  // .***.....**..
++     0x00001C38,  // .***....***..
++     0x00001FF0,  // .*********...
++     0x00001FE0,  // .********....
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 209
++     13, 21,
++     0x00000310,  // ....**...*...
++     0x000003F0,  // ....******...
++     0x00000260,  // ....*..**....
++     0x00000000,  // .............
++     0x00001C1C,  // .***.....***.
++     0x00001E1C,  // .****....***.
++     0x00001E1C,  // .****....***.
++     0x00001F1C,  // .*****...***.
++     0x00001F9C,  // .******..***.
++     0x00001D9C,  // .***.**..***.
++     0x00001DDC,  // .***.***.***.
++     0x00001CDC,  // .***..**.***.
++     0x00001C7C,  // .***...*****.
++     0x00001C7C,  // .***...*****.
++     0x00001C3C,  // .***....****.
++     0x00001C3C,  // .***....****.
++     0x00001C1C,  // .***.....***.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 210
++     14, 21,
++     0x00000300,  // .....**.......
++     0x00000100,  // ......*.......
++     0x00000080,  // .......*......
++     0x00000000,  // ..............
++     0x000003C0,  // .....****.....
++     0x00000FF0,  // ...********...
++     0x00001C38,  // ..***....***..
++     0x00001C38,  // ..***....***..
++     0x0000381C,  // .***......***.
++     0x0000381C,  // .***......***.
++     0x0000381C,  // .***......***.
++     0x0000381C,  // .***......***.
++     0x0000381C,  // .***......***.
++     0x00001C38,  // ..***....***..
++     0x00001C38,  // ..***....***..
++     0x00000FF0,  // ...********...
++     0x000003C0,  // .....****.....
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++  },
++  {             // 211
++     14, 21,
++     0x000000C0,  // .......**.....
++     0x00000080,  // .......*......
++     0x00000180,  // ......**......
++     0x00000000,  // ..............
++     0x000003C0,  // .....****.....
++     0x00000FF0,  // ...********...
++     0x00001C38,  // ..***....***..
++     0x00001C38,  // ..***....***..
++     0x0000381C,  // .***......***.
++     0x0000381C,  // .***......***.
++     0x0000381C,  // .***......***.
++     0x0000381C,  // .***......***.
++     0x0000381C,  // .***......***.
++     0x00001C38,  // ..***....***..
++     0x00001C38,  // ..***....***..
++     0x00000FF0,  // ...********...
++     0x000003C0,  // .....****.....
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++  },
++  {             // 212
++     14, 21,
++     0x00000180,  // ......**......
++     0x000003C0,  // .....****.....
++     0x00000660,  // ....**..**....
++     0x00000000,  // ..............
++     0x000003C0,  // .....****.....
++     0x00000FF0,  // ...********...
++     0x00001C38,  // ..***....***..
++     0x00001C38,  // ..***....***..
++     0x0000381C,  // .***......***.
++     0x0000381C,  // .***......***.
++     0x0000381C,  // .***......***.
++     0x0000381C,  // .***......***.
++     0x0000381C,  // .***......***.
++     0x00001C38,  // ..***....***..
++     0x00001C38,  // ..***....***..
++     0x00000FF0,  // ...********...
++     0x000003C0,  // .....****.....
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++  },
++  {             // 213
++     14, 21,
++     0x00000220,  // .....*...*....
++     0x000007E0,  // ....******....
++     0x00000460,  // ....*...**....
++     0x00000000,  // ..............
++     0x000003C0,  // .....****.....
++     0x00000FF0,  // ...********...
++     0x00001C38,  // ..***....***..
++     0x00001C38,  // ..***....***..
++     0x0000381C,  // .***......***.
++     0x0000381C,  // .***......***.
++     0x0000381C,  // .***......***.
++     0x0000381C,  // .***......***.
++     0x0000381C,  // .***......***.
++     0x00001C38,  // ..***....***..
++     0x00001C38,  // ..***....***..
++     0x00000FF0,  // ...********...
++     0x000003C0,  // .....****.....
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++  },
++  {             // 214
++     14, 21,
++     0x00000000,  // ..............
++     0x000007E0,  // ....******....
++     0x000007E0,  // ....******....
++     0x00000000,  // ..............
++     0x000003C0,  // .....****.....
++     0x00000FF0,  // ...********...
++     0x00001C38,  // ..***....***..
++     0x00001C38,  // ..***....***..
++     0x0000381C,  // .***......***.
++     0x0000381C,  // .***......***.
++     0x0000381C,  // .***......***.
++     0x0000381C,  // .***......***.
++     0x0000381C,  // .***......***.
++     0x00001C38,  // ..***....***..
++     0x00001C38,  // ..***....***..
++     0x00000FF0,  // ...********...
++     0x000003C0,  // .....****.....
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++  },
++  {             // 215
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000108,  // ..*....*..
++     0x0000039C,  // .***..***.
++     0x000001F8,  // ..******..
++     0x000000F0,  // ...****...
++     0x000000F0,  // ...****...
++     0x000001F8,  // ..******..
++     0x0000019C,  // ..**..***.
++     0x00000088,  // ...*...*..
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 216
++     14, 21,
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x000007CC,  // ....*****..**.
++     0x00001FF8,  // ..**********..
++     0x00003C38,  // .****....***..
++     0x00003838,  // .***.....***..
++     0x0000707C,  // ***.....*****.
++     0x000070DC,  // ***....**.***.
++     0x0000719C,  // ***...**..***.
++     0x0000731C,  // ***..**...***.
++     0x00007A1C,  // ****.*....***.
++     0x00003C38,  // .****....***..
++     0x00003C38,  // .****....***..
++     0x00003FF0,  // .**********...
++     0x000027C0,  // .*..*****.....
++     0x00002000,  // .*............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++  },
++  {             // 217
++     13, 21,
++     0x00000380,  // ....***......
++     0x00000180,  // .....**......
++     0x00000080,  // ......*......
++     0x00000000,  // .............
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001E3C,  // .****...****.
++     0x00000FF8,  // ..*********..
++     0x000003E0,  // ....*****....
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 218
++     13, 21,
++     0x00000060,  // .......**....
++     0x000000C0,  // ......**.....
++     0x00000080,  // ......*......
++     0x00000000,  // .............
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001E3C,  // .****...****.
++     0x00000FF8,  // ..*********..
++     0x000003E0,  // ....*****....
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 219
++     13, 21,
++     0x000001C0,  // .....***.....
++     0x00000140,  // .....*.*.....
++     0x00000220,  // ....*...*....
++     0x00000000,  // .............
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001E3C,  // .****...****.
++     0x00000FF8,  // ..*********..
++     0x000003E0,  // ....*****....
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 220
++     13, 21,
++     0x00000000,  // .............
++     0x00000770,  // ...***.***...
++     0x00000770,  // ...***.***...
++     0x00000000,  // .............
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001C1C,  // .***.....***.
++     0x00001E3C,  // .****...****.
++     0x00000FF8,  // ..*********..
++     0x000003E0,  // ....*****....
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 221
++     12, 21,
++     0x00000060,  // ......**....
++     0x00000040,  // ......*.....
++     0x000000C0,  // .....**.....
++     0x00000000,  // ............
++     0x00000E1C,  // .***....***.
++     0x00000E1C,  // .***....***.
++     0x0000071C,  // ..***...***.
++     0x00000738,  // ..***..***..
++     0x000003B8,  // ...***.***..
++     0x000001F0,  // ....*****...
++     0x000001F0,  // ....*****...
++     0x000000E0,  // .....***....
++     0x000000E0,  // .....***....
++     0x000000E0,  // .....***....
++     0x000000E0,  // .....***....
++     0x000000E0,  // .....***....
++     0x000000E0,  // .....***....
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++  },
++  {             // 222
++     12, 21,
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000E00,  // .***........
++     0x00000E00,  // .***........
++     0x00000FF8,  // .*********..
++     0x00000FFC,  // .**********.
++     0x00000E1E,  // .***....****
++     0x00000E0E,  // .***.....***
++     0x00000E0E,  // .***.....***
++     0x00000E1E,  // .***....****
++     0x00000FFC,  // .**********.
++     0x00000FF8,  // .*********..
++     0x00000E00,  // .***........
++     0x00000E00,  // .***........
++     0x00000E00,  // .***........
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++  },
++  {             // 223
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000001F0,  // ...*****...
++     0x000003F8,  // ..*******..
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x00000778,  // .***.****..
++     0x0000077C,  // .***.*****.
++     0x0000071E,  // .***...****
++     0x0000070E,  // .***....***
++     0x0000070E,  // .***....***
++     0x0000071E,  // .***...****
++     0x0000077C,  // .***.*****.
++     0x00000778,  // .***.****..
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 224
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000001C0,  // ..***.....
++     0x000000C0,  // ...**.....
++     0x00000060,  // ....**....
++     0x00000000,  // ..........
++     0x000001F0,  // ..*****...
++     0x000003F8,  // .*******..
++     0x0000079C,  // ****..***.
++     0x0000001C,  // ......***.
++     0x000000FC,  // ...******.
++     0x000003FC,  // .********.
++     0x0000071C,  // ***...***.
++     0x0000071C,  // ***...***.
++     0x000007FC,  // *********.
++     0x000003DC,  // .****.***.
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 225
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000030,  // .....**...
++     0x00000020,  // .....*....
++     0x00000060,  // ....**....
++     0x00000000,  // ..........
++     0x000001F0,  // ..*****...
++     0x000003F8,  // .*******..
++     0x0000079C,  // ****..***.
++     0x0000001C,  // ......***.
++     0x000000FC,  // ...******.
++     0x000003FC,  // .********.
++     0x0000071C,  // ***...***.
++     0x0000071C,  // ***...***.
++     0x000007FC,  // *********.
++     0x000003DC,  // .****.***.
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 226
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000060,  // ....**....
++     0x000000F0,  // ...****...
++     0x00000190,  // ..**..*...
++     0x00000000,  // ..........
++     0x000001F0,  // ..*****...
++     0x000003F8,  // .*******..
++     0x0000079C,  // ****..***.
++     0x0000001C,  // ......***.
++     0x000000FC,  // ...******.
++     0x000003FC,  // .********.
++     0x0000071C,  // ***...***.
++     0x0000071C,  // ***...***.
++     0x000007FC,  // *********.
++     0x000003DC,  // .****.***.
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 227
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000001F8,  // ..******..
++     0x000001B0,  // ..**.**...
++     0x00000000,  // ..........
++     0x000001F0,  // ..*****...
++     0x000003F8,  // .*******..
++     0x0000079C,  // ****..***.
++     0x0000001C,  // ......***.
++     0x000000FC,  // ...******.
++     0x000003FC,  // .********.
++     0x0000071C,  // ***...***.
++     0x0000071C,  // ***...***.
++     0x000007FC,  // *********.
++     0x000003DC,  // .****.***.
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 228
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000001F8,  // ..******..
++     0x000001F8,  // ..******..
++     0x00000000,  // ..........
++     0x000001F0,  // ..*****...
++     0x000003F8,  // .*******..
++     0x0000079C,  // ****..***.
++     0x0000001C,  // ......***.
++     0x000000FC,  // ...******.
++     0x000003FC,  // .********.
++     0x0000071C,  // ***...***.
++     0x0000071C,  // ***...***.
++     0x000007FC,  // *********.
++     0x000003DC,  // .****.***.
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 229
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000060,  // ....**....
++     0x00000090,  // ...*..*...
++     0x000000E0,  // ...***....
++     0x00000000,  // ..........
++     0x000001F0,  // ..*****...
++     0x000003F8,  // .*******..
++     0x0000079C,  // ****..***.
++     0x0000001C,  // ......***.
++     0x000000FC,  // ...******.
++     0x000003FC,  // .********.
++     0x0000071C,  // ***...***.
++     0x0000071C,  // ***...***.
++     0x000007FC,  // *********.
++     0x000003DC,  // .****.***.
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 230
++     16, 21,
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00007CF0,  // ..*****..****...
++     0x0000FFF8,  // .*************..
++     0x0001E71C,  // ****..***...***.
++     0x0000070C,  // ......***....**.
++     0x00007FFC,  // ..*************.
++     0x0000FFFC,  // .**************.
++     0x0001C700,  // ***...***.......
++     0x0001C70C,  // ***...***....**.
++     0x0001FBFC,  // ******.********.
++     0x0000F1F0,  // .****...*****...
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++  },
++  {             // 231
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000F0,  // ...****...
++     0x000003F8,  // .*******..
++     0x0000039C,  // .***..***.
++     0x0000071C,  // ***...***.
++     0x00000700,  // ***.......
++     0x00000700,  // ***.......
++     0x00000700,  // ***.......
++     0x0000078C,  // ****...**.
++     0x000003FC,  // .********.
++     0x000000F0,  // ...****...
++     0x00000040,  // ....*.....
++     0x00000070,  // ....***...
++     0x00000038,  // .....***..
++     0x000001F0,  // ..*****...
++  },
++  {             // 232
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000001C0,  // ..***.....
++     0x000000C0,  // ...**.....
++     0x00000060,  // ....**....
++     0x00000000,  // ..........
++     0x000001E0,  // ..****....
++     0x000003F8,  // .*******..
++     0x00000318,  // .**...**..
++     0x0000071C,  // ***...***.
++     0x000007FC,  // *********.
++     0x000007FC,  // *********.
++     0x00000700,  // ***.......
++     0x0000071C,  // ***...***.
++     0x000003F8,  // .*******..
++     0x000001F0,  // ..*****...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 233
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000030,  // .....**...
++     0x00000030,  // .....**...
++     0x00000060,  // ....**....
++     0x00000000,  // ..........
++     0x000001E0,  // ..****....
++     0x000003F8,  // .*******..
++     0x00000318,  // .**...**..
++     0x0000071C,  // ***...***.
++     0x000007FC,  // *********.
++     0x000007FC,  // *********.
++     0x00000700,  // ***.......
++     0x0000071C,  // ***...***.
++     0x000003F8,  // .*******..
++     0x000001F0,  // ..*****...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 234
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000060,  // ....**....
++     0x000000F0,  // ...****...
++     0x00000090,  // ...*..*...
++     0x00000000,  // ..........
++     0x000001E0,  // ..****....
++     0x000003F8,  // .*******..
++     0x00000318,  // .**...**..
++     0x0000071C,  // ***...***.
++     0x000007FC,  // *********.
++     0x000007FC,  // *********.
++     0x00000700,  // ***.......
++     0x0000071C,  // ***...***.
++     0x000003F8,  // .*******..
++     0x000001F0,  // ..*****...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 235
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000001F8,  // ..******..
++     0x000001F8,  // ..******..
++     0x00000000,  // ..........
++     0x000001E0,  // ..****....
++     0x000003F8,  // .*******..
++     0x00000318,  // .**...**..
++     0x0000071C,  // ***...***.
++     0x000007FC,  // *********.
++     0x000007FC,  // *********.
++     0x00000700,  // ***.......
++     0x0000071C,  // ***...***.
++     0x000003F8,  // .*******..
++     0x000001F0,  // ..*****...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 236
++     5, 21,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000030,  // **...
++     0x00000018,  // .**..
++     0x00000008,  // ..*..
++     0x00000000,  // .....
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++  },
++  {             // 237
++     5, 21,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000006,  // ...**
++     0x0000000C,  // ..**.
++     0x00000008,  // ..*..
++     0x00000000,  // .....
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++  },
++  {             // 238
++     5, 21,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x0000000C,  // ..**.
++     0x00000014,  // .*.*.
++     0x00000036,  // **.**
++     0x00000000,  // .....
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x0000001C,  // .***.
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++  },
++  {             // 239
++     5, 21,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x000000EE,  // ***.***
++     0x000000EE,  // ***.***
++     0x00000000,  // .......
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000038,  // ..***..
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 240
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000003E0,  // ..*****....
++     0x000000E0,  // ....***....
++     0x00000130,  // ...*..**...
++     0x000003F8,  // ..*******..
++     0x000007F8,  // .********..
++     0x0000073C,  // .***..****.
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x0000071C,  // .***...***.
++     0x000007F8,  // .********..
++     0x000001F0,  // ...*****...
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 241
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000001F0,  // ...*****...
++     0x00000330,  // ..**..**...
++     0x00000000,  // ...........
++     0x00000770,  // .***.***...
++     0x000007F8,  // .********..
++     0x0000079C,  // .****..***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 242
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000180,  // ...**......
++     0x000000C0,  // ....**.....
++     0x00000040,  // .....*.....
++     0x00000000,  // ...........
++     0x000001F0,  // ...*****...
++     0x000003F8,  // ..*******..
++     0x00000738,  // .***..***..
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x0000071C,  // .***...***.
++     0x000007F8,  // .********..
++     0x000001F0,  // ...*****...
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 243
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000030,  // ......**...
++     0x00000060,  // .....**....
++     0x00000040,  // .....*.....
++     0x00000000,  // ...........
++     0x000001F0,  // ...*****...
++     0x000003F8,  // ..*******..
++     0x00000738,  // .***..***..
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x0000071C,  // .***...***.
++     0x000007F8,  // .********..
++     0x000001F0,  // ...*****...
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 244
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000000E0,  // ....***....
++     0x000000A0,  // ....*.*....
++     0x00000130,  // ...*..**...
++     0x00000000,  // ...........
++     0x000001F0,  // ...*****...
++     0x000003F8,  // ..*******..
++     0x00000738,  // .***..***..
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x0000071C,  // .***...***.
++     0x000007F8,  // .********..
++     0x000001F0,  // ...*****...
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 245
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000001F8,  // ...******..
++     0x00000330,  // ..**..**...
++     0x00000000,  // ...........
++     0x000001F0,  // ...*****...
++     0x000003F8,  // ..*******..
++     0x00000738,  // .***..***..
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x0000071C,  // .***...***.
++     0x000007F8,  // .********..
++     0x000001F0,  // ...*****...
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 246
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000003B8,  // ..***.***..
++     0x000003B8,  // ..***.***..
++     0x00000000,  // ...........
++     0x000001F0,  // ...*****...
++     0x000003F8,  // ..*******..
++     0x00000738,  // .***..***..
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x00000E1C,  // ***....***.
++     0x0000071C,  // .***...***.
++     0x000007F8,  // .********..
++     0x000001F0,  // ...*****...
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 247
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000070,  // ....***...
++     0x00000070,  // ....***...
++     0x00000000,  // ..........
++     0x000003FE,  // .*********
++     0x000003FE,  // .*********
++     0x00000000,  // ..........
++     0x00000070,  // ....***...
++     0x00000070,  // ....***...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 248
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000001F2,  // ...*****..*
++     0x000003FC,  // ..********.
++     0x0000071C,  // .***...***.
++     0x00000E1E,  // ***....****
++     0x00000E2E,  // ***...*.***
++     0x00000E4E,  // ***..*..***
++     0x00000E8E,  // ***.*...***
++     0x0000071C,  // .***...***.
++     0x000007FC,  // .*********.
++     0x00000DF0,  // **.*****...
++     0x00000800,  // *..........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 249
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000180,  // ...**......
++     0x000000C0,  // ....**.....
++     0x00000040,  // .....*.....
++     0x00000000,  // ...........
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x000007FC,  // .*********.
++     0x000003DC,  // ..****.***.
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 250
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000030,  // ......**...
++     0x00000060,  // .....**....
++     0x00000040,  // .....*.....
++     0x00000000,  // ...........
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x000007FC,  // .*********.
++     0x000003DC,  // ..****.***.
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 251
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000000C0,  // ....**.....
++     0x000000A0,  // ....*.*....
++     0x00000130,  // ...*..**...
++     0x00000000,  // ...........
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x000007FC,  // .*********.
++     0x000003DC,  // ..****.***.
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 252
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000003B8,  // ..***.***..
++     0x000003B8,  // ..***.***..
++     0x00000000,  // ...........
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x0000071C,  // .***...***.
++     0x000007FC,  // .*********.
++     0x000003DC,  // ..****.***.
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 253
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000030,  // .....**...
++     0x00000020,  // .....*....
++     0x00000060,  // ....**....
++     0x00000000,  // ..........
++     0x0000070C,  // ***....**.
++     0x0000030C,  // .**....**.
++     0x0000039C,  // .***..***.
++     0x0000039C,  // .***..***.
++     0x00000198,  // ..**..**..
++     0x000001D8,  // ..***.**..
++     0x000001F8,  // ..******..
++     0x000000F0,  // ...****...
++     0x000000F0,  // ...****...
++     0x000000E0,  // ...***....
++     0x00000060,  // ....**....
++     0x000000E0,  // ...***....
++     0x000001C0,  // ..***.....
++     0x000001C0,  // ..***.....
++  },
++  {             // 254
++     11, 21,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000770,  // .***.***...
++     0x000007F8,  // .********..
++     0x0000079C,  // .****..***.
++     0x0000070E,  // .***....***
++     0x0000070E,  // .***....***
++     0x0000070E,  // .***....***
++     0x0000070E,  // .***....***
++     0x0000079C,  // .****..***.
++     0x000007FC,  // .*********.
++     0x00000770,  // .***.***...
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++     0x00000700,  // .***.......
++  },
++  {             // 255
++     10, 21,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000001F8,  // ..******..
++     0x000001F8,  // ..******..
++     0x00000000,  // ..........
++     0x0000070C,  // ***....**.
++     0x0000030C,  // .**....**.
++     0x0000039C,  // .***..***.
++     0x0000039C,  // .***..***.
++     0x00000198,  // ..**..**..
++     0x000001D8,  // ..***.**..
++     0x000001F8,  // ..******..
++     0x000000F0,  // ...****...
++     0x000000F0,  // ...****...
++     0x000000E0,  // ...***....
++     0x00000060,  // ....**....
++     0x000000E0,  // ...***....
++     0x000001C0,  // ..***.....
++     0x000001C0,  // ..***.....
++  },
++  };
+diff -ruN vdr-1.3.18/osd.c vdr-1.3.18.yaepg/osd.c
+--- vdr-1.3.18/osd.c	2004-12-19 04:27:38.000000000 -0800
++++ vdr-1.3.18.yaepg/osd.c	2005-01-10 10:47:15.000000000 -0800
+@@ -586,6 +586,7 @@
+   top = Top;
+   width = height = 0;
+   isOpen++;
++  vidWin.bpp = 0;
+ }
+ 
+ cOsd::~cOsd()
+diff -ruN vdr-1.3.18/osd.h vdr-1.3.18.yaepg/osd.h
+--- vdr-1.3.18/osd.h	2004-10-16 03:33:44.000000000 -0700
++++ vdr-1.3.18.yaepg/osd.h	2005-01-10 10:47:15.000000000 -0800
+@@ -314,6 +314,7 @@
+        ///< 7: vertical,   falling, upper
+   virtual void Flush(void);
+        ///< Actually commits all data to the OSD hardware.
++  tArea vidWin;
+   };
+ 
+ class cOsdProvider {

Added: vdr/vdr/trunk/debian/patches/opt-46-x_dmh-dvd-archive-debian.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-46-x_dmh-dvd-archive-debian.dpatch	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/opt-46-x_dmh-dvd-archive-debian.dpatch	2007-01-12 22:28:45 UTC (rev 3851)
@@ -0,0 +1,78 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## opt-46_dmh-dvd-archive-debian.dpatch by Tobias Grimm <tg at e-tobi.net>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Modifies some defaults from opt-46_dmh-dvd-archive-debian:
+## DP: - DvdDisplayMode = 0 (no display of archive number in recordings list)
+## DP: - DVD-Device = /dev/dvd, mount path = /media/dvd
+## DP: - mount using fstab (to allow user "vdr" to mount the dvd)
+
+ at DPATCH@
+diff -urNad vdr-1.4.3~/config.c vdr-1.4.3/config.c
+--- vdr-1.4.3~/config.c	2006-09-29 21:36:27.000000000 +0200
++++ vdr-1.4.3/config.c	2006-09-29 21:36:27.000000000 +0200
+@@ -326,7 +326,7 @@
+   ShowRecLength = 0;
+   ShowProgressBar = 0;
+   MenuCmdPosition = 0;
+-  DvdDisplayMode = 1;
++  DvdDisplayMode = 0;
+   DvdDisplayZeros = 1;
+   DvdTrayMode = 0;
+   DvdSpeedLimit = 0;
+diff -urNad vdr-1.4.3~/recording.c vdr-1.4.3/recording.c
+--- vdr-1.4.3~/recording.c	2006-09-29 21:36:27.000000000 +0200
++++ vdr-1.4.3/recording.c	2006-09-29 21:39:17.000000000 +0200
+@@ -954,7 +954,7 @@
+ {
+   char cmd[BUFSIZ];
+   if(Setup.DvdSpeedLimit > 0) {
+-    sprintf(cmd, "speedcontrol -x %d %s", Setup.DvdSpeedLimit, DVD_DEVICE);
++    sprintf(cmd, "eject -x %d %s", Setup.DvdSpeedLimit, DVD_DEVICE);
+     SystemExec(cmd);
+     }
+ 
+@@ -981,10 +981,7 @@
+     if(Interface->Confirm(msg, 300)) {
+       Skins.Message(mtStatus, tr("Please wait. Checking DVD..."));
+       Skins.Flush();
+-      sprintf(cmd, "eject -t %s; mkdir -p %s; mount -o ro -t %s %s %s",
+-		    DVD_DEVICE, DVD_MOUNT_PATH,
+-		    (dvdtrack ? "udf" : "iso9660"),
+-		    DVD_DEVICE, DVD_MOUNT_PATH);
++      sprintf(cmd, "eject -t %s; mount %s", DVD_DEVICE, DVD_MOUNT_PATH);
+       SystemExec(cmd);
+     
+       bool correctDvd = true;
+@@ -1056,7 +1053,7 @@
+ 		    sprintf(msg, tr("No index-file found. Creating may take minutes. Create one?"));
+ 		    if(Interface->Confirm(msg, 300)) {
+ 		      Skins.Message(mtStatus, tr("Please wait. Creating index-file..."));
+-		      sprintf(cmd, "speedcontrol -x 999 %s; cd %s && genindex &", DVD_DEVICE, FileName());
++		      sprintf(cmd, "eject -x 999 %s; cd %s && genindex &", DVD_DEVICE, FileName());
+ 		      SystemExec(cmd);
+ 		      return MOUNT_DVD_ABORT;
+ 		    }
+@@ -1980,7 +1977,7 @@
+     SystemExec(cmd);
+     
+     if(Setup.DvdSpeedLimit > 0) {
+-      sprintf(cmd, "speedcontrol -x 999 %s", DVD_DEVICE);
++      sprintf(cmd, "eject -x 999 %s", DVD_DEVICE);
+       SystemExec(cmd);
+       }
+     }
+diff -urNad vdr-1.4.3~/recording.h vdr-1.4.3/recording.h
+--- vdr-1.4.3~/recording.h	2006-09-29 21:36:27.000000000 +0200
++++ vdr-1.4.3/recording.h	2006-09-29 21:36:27.000000000 +0200
+@@ -64,8 +64,8 @@
+ #define MOUNT_DVD_ABORT             0
+ #define MOUNT_DVD_REPLAY            1
+ #define MOUNT_DVD_LAUNCH_DVD_PLUGIN 2
+-#define DVD_DEVICE		    "/dev/cdrom"
+-#define DVD_MOUNT_PATH		    "/tmp/vdr.dvd"
++#define DVD_DEVICE		    "/dev/dvd"
++#define DVD_MOUNT_PATH		    "/media/dvd"
+ 
+ #define DVD_TYPE_UNKNOWN	    -1
+ #define DVD_TYPE_NOT_READ	    0

Added: vdr/vdr/trunk/debian/patches/opt-46_dmh-dvd-archive.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-46_dmh-dvd-archive.dpatch	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/opt-46_dmh-dvd-archive.dpatch	2007-01-12 22:28:45 UTC (rev 3851)
@@ -0,0 +1,1448 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## opt_46_dmh-dvd-archive.dpatch by Marius "DMH" Heidenstecker <marius at heidenstecker.de>
+## vdr-1.3.44-bp-dmh-dvd-archive-version5.diff downloaded from:
+## http://www.vdr-portal.de/board/thread.php?threadid=46861
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Extends Andreas Kool's dvdarchive patch, to allow normal Video-DVD's 
+## DP: (playable on standalone video players) to be handled like archive DVD.
+
+ at DPATCH@
+diff -urNad vdr-1.4.3~/HISTORY-dmh-dvd-archive vdr-1.4.3/HISTORY-dmh-dvd-archive
+--- vdr-1.4.3~/HISTORY-dmh-dvd-archive	1970-01-01 01:00:00.000000000 +0100
++++ vdr-1.4.3/HISTORY-dmh-dvd-archive	2006-09-24 13:12:04.000000000 +0200
+@@ -0,0 +1,35 @@
++DMH DVD-Archive Patch History
++-----------------------------
++
++
++2006-04-24: Version 5 (vdr: 1.3.44, BigPatch: test1)
++
++- fixed problem of nonterminating find (Reported by vdrchuck at vdr-portal)
++
++
++2006-03-07: Version 4 (vdr: 1.3.44, BigPatch: test1)
++
++- if libdvdread is installed one can jump through dvd chapters bei pressing
++  "4" or "6" while watching a recording. The handling is then the same as in
++  dvd-plugin. It works only for Video-Archive-DVDs. In order to use it one has
++  to compile vdr with "DVDCHAPJUMP=1". The header-files should be installed in
++  /usr/include/libdvdread.
++
++
++2006-03-02: Version 3 (vdr: 1.3.44, BigPatch: test1)
++
++- changed the setup options
++
++- added possibility to remove leading zeros of dvd number (Suggested by
++  clausmuus at vdr-portal)
++
++- fixed problem that playing of archived recording does not start if "Show
++  DVD-No." is set to "no" in setup (Reported by Wolfi at vdr-portal)
++
++- added reloading of recordings when "DVD display mode" is turned to "Length /
++  Number" or "Number" in setup (Suggested by pat at vdr-portal)
++  
++- added this history ;o)
++
++
++2005-??-??: Initial Version
+diff -urNad vdr-1.4.3~/Makefile vdr-1.4.3/Makefile
+--- vdr-1.4.3~/Makefile	2006-09-24 13:12:04.000000000 +0200
++++ vdr-1.4.3/Makefile	2006-09-24 13:36:08.000000000 +0200
+@@ -18,6 +18,9 @@
+ MANDIR   = /usr/local/man
+ BINDIR   = /usr/local/bin
+ LIBS     = -ljpeg -lpthread -ldl -lcap
++ifdef DVDCHAPJUMP
++   LIBS += -ldvdread
++endif
+ INCLUDES =
+ 
+ PLUGINDIR= ./PLUGINS
+@@ -31,6 +34,10 @@
+ 
+ -include Make.config
+ 
++ifdef DVDCHAPJUMP
++   INCLUDES += -I/usr/include/libdvdread
++endif
++
+ SILIB    = $(LSIDIR)/libsi.a
+ 
+ OBJS = audio.o channels.o ci.o config.o cutter.o device.o diseqc.o dvbdevice.o dvbosd.o\
+@@ -71,6 +78,9 @@
+ ifdef VDR_USER
+ DEFINES += -DVDR_USER=\"$(VDR_USER)\"
+ endif
++ifdef DVDCHAPJUMP
++   DEFINES += -DDVDCHAPJUMP
++endif
+ 
+ LIRC_DEVICE ?= /dev/lircd
+ RCU_DEVICE  ?= /dev/ttyS1
+diff -urNad vdr-1.4.3~/config.c vdr-1.4.3/config.c
+--- vdr-1.4.3~/config.c	2006-09-24 13:12:04.000000000 +0200
++++ vdr-1.4.3/config.c	2006-09-24 13:15:42.000000000 +0200
+@@ -305,10 +305,6 @@
+   SplitEditedFiles = 0;
+   MinEventTimeout = 30;
+   MinUserInactivity = 300;
+-#ifdef DVDARCHIVE
+-  TrayOpenOnBegin = 0;
+-  TrayOpenOnEnd = 0;
+-#endif /* DVDARCHIVE */
+   MultiSpeedMode = 0;
+   ShowReplayMode = 0;
+   DoubleEpgTimeDelta = 15;
+@@ -330,6 +326,10 @@
+   ShowRecLength = 0;
+   ShowProgressBar = 0;
+   MenuCmdPosition = 0;
++  DvdDisplayMode = 1;
++  DvdDisplayZeros = 1;
++  DvdTrayMode = 0;
++  DvdSpeedLimit = 0;
+ }
+ 
+ cSetup& cSetup::operator= (const cSetup &s)
+@@ -486,10 +486,6 @@
+   else if (!strcasecmp(Name, "SplitEditedFiles"))    SplitEditedFiles   = atoi(Value);
+   else if (!strcasecmp(Name, "MinEventTimeout"))     MinEventTimeout    = atoi(Value);
+   else if (!strcasecmp(Name, "MinUserInactivity"))   MinUserInactivity  = atoi(Value);
+-#ifdef DVDARCHIVE
+-  else if (!strcasecmp(Name, "TrayOpenOnBegin"))     TrayOpenOnBegin    = atoi(Value);
+-  else if (!strcasecmp(Name, "TrayOpenOnEnd"))       TrayOpenOnEnd      = atoi(Value);
+-#endif /* DVDARCHIVE */
+   else if (!strcasecmp(Name, "MultiSpeedMode"))      MultiSpeedMode     = atoi(Value);
+   else if (!strcasecmp(Name, "ShowReplayMode"))      ShowReplayMode     = atoi(Value);
+   else if (!strcasecmp(Name, "DoubleEpgTimeDelta"))  DoubleEpgTimeDelta = atoi(Value);
+@@ -511,6 +507,10 @@
+   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, "DvdDisplayMode"))      DvdDisplayMode     = atoi(Value);
++  else if (!strcasecmp(Name, "DvdDisplayZeros"))     DvdDisplayZeros    = atoi(Value);
++  else if (!strcasecmp(Name, "DvdTrayMode"))         DvdTrayMode        = atoi(Value);
++  else if (!strcasecmp(Name, "DvdSpeedLimit"))       DvdSpeedLimit      = atoi(Value);
+   else
+      return false;
+   return true;
+@@ -580,10 +580,6 @@
+   Store("DoubleEpgTimeDelta", DoubleEpgTimeDelta);
+   Store("MultiSpeedMode",     MultiSpeedMode);
+   Store("ShowReplayMode",     ShowReplayMode);
+-#ifdef DVDARCHIVE
+-  Store("TrayOpenOnBegin",    TrayOpenOnBegin);
+-  Store("TrayOpenOnEnd",      TrayOpenOnEnd);
+-#endif /* DVDARCHIVE */
+   Store("ResumeID",           ResumeID);
+   Store("JumpPlay",           JumpPlay);
+   Store("PlayJump",           PlayJump);
+@@ -599,11 +595,16 @@
+   Store("ShowRecLength",      ShowRecLength);
+   Store("ShowProgressBar",    ShowProgressBar);
+   Store("MenuCmdPosition",    MenuCmdPosition);
++  Store("DvdDisplayMode",     DvdDisplayMode);
++  Store("DvdDisplayZeros",    DvdDisplayZeros);
++  Store("DvdTrayMode",        DvdTrayMode);
++  Store("DvdSpeedLimit",      DvdSpeedLimit);
+ 
+   Sort();
+ 
+   if (cConfig<cSetupLine>::Save()) {
+      isyslog("saved setup to %s", FileName());
++     if(DvdDisplayMode >= 1) ::Recordings.Load();		// DVDARCHIVE Patch
+      return true;
+      }
+   return false;
+diff -urNad vdr-1.4.3~/config.h vdr-1.4.3/config.h
+--- vdr-1.4.3~/config.h	2006-09-24 13:12:04.000000000 +0200
++++ vdr-1.4.3/config.h	2006-09-24 13:16:19.000000000 +0200
+@@ -267,8 +267,6 @@
+   int MaxVideoFileSize;
+   int SplitEditedFiles;
+   int MinEventTimeout, MinUserInactivity;
+-  int TrayOpenOnBegin;
+-  int TrayOpenOnEnd;
+   int MultiSpeedMode;
+   int ShowReplayMode;
+   int DoubleEpgTimeDelta;
+@@ -283,6 +281,10 @@
+   int CurrentChannel;
+   int CurrentVolume;
+   int CurrentDolby;
++  int DvdDisplayMode;
++  int DvdDisplayZeros;
++  int DvdTrayMode;
++  int DvdSpeedLimit;
+   int InitialChannel;
+   int InitialVolume;
+   int ShowRecDate, ShowRecTime, ShowRecLength, ShowProgressBar, MenuCmdPosition;
+diff -urNad vdr-1.4.3~/i18n.c vdr-1.4.3/i18n.c
+--- vdr-1.4.3~/i18n.c	2006-09-24 13:12:04.000000000 +0200
++++ vdr-1.4.3/i18n.c	2006-09-24 13:19:08.000000000 +0200
+@@ -2577,8 +2577,187 @@
+     "Otevírá se menu CAM...",
+   },
+ #ifdef DVDARCHIVE
+-  { "Please mount DVD %s",
+-    "Bitte DVD %s einlegen",
++  { "Please mount %s", // English
++    "Bitte %s einlegen", // Deutsch / German
++    "", // Slovenski / Slovenian
++    "", // Italiano / Italian
++    "", // Nederlands / Dutch
++    "", // Português / Portuguese
++    "Mettez %s dans le lecteur", // Français / French
++    "", // Norsk / Norwegian
++    "", // suomi / Finnish
++    "", // Polski / Polish
++    "", // Español / Spanish
++    "", // ÅëëçíéêÜ / Greek
++    "", // Svenska / Swedish
++    "", // Românã / Romanian
++    "", // Magyar / Hungarian
++    "", // Català / Catalanian
++    "", // ÀãááÚØÙ / Russian
++    "", // Hrvatski / Croatian
++    "", // Eesti / Estonian
++    "", // Dansk / Danish
++    "", // Èesky / Czech
++  },
++  { "Please mount DVD %04d", // English
++    "Bitte DVD %04d einlegen", // Deutsch / German
++    "", // Slovenski / Slovenian
++    "", // Italiano / Italian
++    "", // Nederlands / Dutch
++    "", // Português / Portuguese
++    "Mettez le DVD %04d dans le lecteur", // Français / French
++    "", // Norsk / Norwegian
++    "", // suomi / Finnish
++    "", // Polski / Polish
++    "", // Español / Spanish
++    "", // ÅëëçíéêÜ / Greek
++    "", // Svenska / Swedish
++    "", // Românã / Romanian
++    "", // Magyar / Hungarian
++    "", // Català / Catalanian
++    "", // ÀãááÚØÙ / Russian
++    "", // Hrvatski / Croatian
++    "", // Eesti / Estonian
++    "", // Dansk / Danish
++    "", // Èesky / Czech
++  },
++  { "Please mount DVD %d", // English
++    "Bitte DVD %d einlegen", // Deutsch / German
++    "", // Slovenski / Slovenian
++    "", // Italiano / Italian
++    "", // Nederlands / Dutch
++    "", // Português / Portuguese
++    "Mettez le DVD %d dans le lecteur", // Français / French
++    "", // Norsk / Norwegian
++    "", // suomi / Finnish
++    "", // Polski / Polish
++    "", // Español / Spanish
++    "", // ÅëëçíéêÜ / Greek
++    "", // Svenska / Swedish
++    "", // Românã / Romanian
++    "", // Magyar / Hungarian
++    "", // Català / Catalanian
++    "", // ÀãááÚØÙ / Russian
++    "", // Hrvatski / Croatian
++    "", // Eesti / Estonian
++    "", // Dansk / Danish
++    "", // Èesky / Czech
++  },
++  { "Please wait. Checking DVD...", // English
++    "Bitte warten. Überprüfe DVD...", // Deutsch / German
++    "", // Slovenski / Slovenian
++    "", // Italiano / Italian
++    "", // Nederlands / Dutch
++    "", // Português / Portuguese
++    "Un moment SVP. Vérification DVD...", // Français / French
++    "", // Norsk / Norwegian
++    "", // suomi / Finnish
++    "", // Polski / Polish
++    "", // Español / Spanish
++    "", // ÅëëçíéêÜ / Greek
++    "", // Svenska / Swedish
++    "", // Românã / Romanian
++    "", // Magyar / Hungarian
++    "", // Català / Catalanian
++    "", // ÀãááÚØÙ / Russian
++    "", // Hrvatski / Croatian
++    "", // Eesti / Estonian
++    "", // Dansk / Danish
++    "", // Èesky / Czech
++  },
++  { "Wrong DVD!", // English
++    "Falsche DVD!", // Deutsch / German
++    "", // Slovenski / Slovenian
++    "", // Italiano / Italian
++    "", // Nederlands / Dutch
++    "", // Português / Portuguese
++    "Faux DVD!", // Français / French
++    "", // Norsk / Norwegian
++    "", // suomi / Finnish
++    "", // Polski / Polish
++    "", // Español / Spanish
++    "", // ÅëëçíéêÜ / Greek
++    "", // Svenska / Swedish
++    "", // Românã / Romanian
++    "", // Magyar / Hungarian
++    "", // Català / Catalanian
++    "", // ÀãááÚØÙ / Russian
++    "", // Hrvatski / Croatian
++    "", // Eesti / Estonian
++    "", // Dansk / Danish
++    "", // Èesky / Czech
++  },
++  { "DVD plugin is not installed!", // English
++    "Das DVD-Plugin ist nicht installiert!", // Deutsch / German
++    "", // Slovenski / Slovenian
++    "", // Italiano / Italian
++    "", // Nederlands / Dutch
++    "", // Português / Portuguese
++    "Le DVD-plugin n'est pas installé!", // Français / French
++    "", // Norsk / Norwegian
++    "", // suomi / Finnish
++    "", // Polski / Polish
++    "", // Español / Spanish
++    "", // ÅëëçíéêÜ / Greek
++    "", // Svenska / Swedish
++    "", // Românã / Romanian
++    "", // Magyar / Hungarian
++    "", // Català / Catalanian
++    "", // ÀãááÚØÙ / Russian
++    "", // Hrvatski / Croatian
++    "", // Eesti / Estonian
++    "", // Dansk / Danish
++    "", // Èesky / Czech
++  },
++  { "Please wait. Creating index-file...", // English
++    "Bitte warten. Index-Datei wird erstellt...", // Deutsch / German
++    "", // Slovenski / Slovenian
++    "", // Italiano / Italian
++    "", // Nederlands / Dutch
++    "", // Português / Portuguese
++    "Attendez, merci. Le fichier index est en création...", // Français / French
++    "", // Norsk / Norwegian
++    "", // suomi / Finnish
++    "", // Polski / Polish
++    "", // Español / Spanish
++    "", // ÅëëçíéêÜ / Greek
++    "", // Svenska / Swedish
++    "", // Românã / Romanian
++    "", // Magyar / Hungarian
++    "", // Català / Catalanian
++    "", // ÀãááÚØÙ / Russian
++    "", // Hrvatski / Croatian
++    "", // Eesti / Estonian
++    "", // Dansk / Danish
++    "", // Èesky / Czech
++  },
++  { "No index-file found. Creating may take minutes. Create one?", // English
++    "Keine Index-Datei gefunden. Erstellung kann Minuten dauern. Erstellen?", // Deutsch / German
++    "", // Slovenski / Slovenian
++    "", // Italiano / Italian
++    "", // Nederlands / Dutch
++    "", // Português / Portuguese
++    "Pas trouvé de fichiers index. Création du ficher prend quelques minutes. Créer?", // Français / French
++    "", // Norsk / Norwegian
++    "", // suomi / Finnish
++    "", // Polski / Polish
++    "", // Español / Spanish
++    "", // ÅëëçíéêÜ / Greek
++    "", // Svenska / Swedish
++    "", // Românã / Romanian
++    "", // Magyar / Hungarian
++    "", // Català / Catalanian
++    "", // ÀãááÚØÙ / Russian
++    "", // Hrvatski / Croatian
++    "", // Eesti / Estonian
++    "", // Dansk / Danish
++    "", // Èesky / Czech
++  },
++  { "Setup.BigPatch$DVD display mode",
++    "DVD Anzeige",
++    "",//TODO
++    "",//TODO
++    "",//TODO
+     "",//TODO
+     "",//TODO
+     "",//TODO
+@@ -2596,8 +2775,8 @@
+     "",//TODO
+     "",//TODO
+   },
+-  { "Wrong DVD!",
+-    "Falsche DVD!",
++  { "Setup.BigPatch$Length",
++    "Länge",
+     "",//TODO
+     "",//TODO
+     "",//TODO
+@@ -2615,8 +2794,8 @@
+     "",//TODO
+     "",//TODO
+   },
+-  { "Setup.Replay$Tray open on begin",
+-    "DVD-Schublade zu Beginn öffnen",
++  { "Setup.BigPatch$Length / Number",
++    "Länge / Nummer",
+     "",//TODO
+     "",//TODO
+     "",//TODO
+@@ -2634,8 +2813,27 @@
+     "",//TODO
+     "",//TODO
+   },
+-  { "Setup.Replay$Tray open on end",
+-    "DVD-Schublade am Ende öffnen",
++  { "Setup.BigPatch$Number",
++    "Nummer",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.BigPatch$DVD display leading zeros",
++    "DVD führende Nullen anzeigen",
+     "",//TODO
+     "",//TODO
+     "",//TODO
+@@ -6771,6 +6969,138 @@
+     "",//TODO
+     "",//TODO
+   },
++  { "Setup.BigPatch$Tray open", // English
++    "DVD-Schublade öffnen", // Deutsch / German
++    "", // Slovenski / Slovenian
++    "", // Italiano / Italian
++    "", // Nederlands / Dutch
++    "", // Português / Portuguese
++    "Ouvrir le tiroir du lecteur DVD", // Français / French
++    "", // Norsk / Norwegian
++    "", // suomi / Finnish
++    "", // Polski / Polish
++    "", // Español / Spanish
++    "", // ÅëëçíéêÜ / Greek
++    "", // Svenska / Swedish
++    "", // Românã / Romanian
++    "", // Magyar / Hungarian
++    "", // Català / Catalanian
++    "", // ÀãááÚØÙ / Russian
++    "", // Hrvatski / Croatian
++    "", // Eesti / Estonian
++    "", // Dansk / Danish
++    "", // Èesky / Czech
++  },
++  { "Setup.BigPatch$never", // English
++    "nie", // Deutsch / German
++    "", // Slovenski / Slovenian
++    "", // Italiano / Italian
++    "", // Nederlands / Dutch
++    "", // Português / Portuguese
++    "", // Français / French
++    "", // Norsk / Norwegian
++    "", // suomi / Finnish
++    "", // Polski / Polish
++    "", // Español / Spanish
++    "", // ÅëëçíéêÜ / Greek
++    "", // Svenska / Swedish
++    "", // Românã / Romanian
++    "", // Magyar / Hungarian
++    "", // Català / Catalanian
++    "", // ÀãááÚØÙ / Russian
++    "", // Hrvatski / Croatian
++    "", // Eesti / Estonian
++    "", // Dansk / Danish
++    "", // Èesky / Czech
++  },
++  { "Setup.BigPatch$on begin", // English
++    "am Anfang", // Deutsch / German
++    "", // Slovenski / Slovenian
++    "", // Italiano / Italian
++    "", // Nederlands / Dutch
++    "", // Português / Portuguese
++    "", // Français / French
++    "", // Norsk / Norwegian
++    "", // suomi / Finnish
++    "", // Polski / Polish
++    "", // Español / Spanish
++    "", // ÅëëçíéêÜ / Greek
++    "", // Svenska / Swedish
++    "", // Românã / Romanian
++    "", // Magyar / Hungarian
++    "", // Català / Catalanian
++    "", // ÀãááÚØÙ / Russian
++    "", // Hrvatski / Croatian
++    "", // Eesti / Estonian
++    "", // Dansk / Danish
++    "", // Èesky / Czech
++  },
++  { "Setup.BigPatch$on end", // English
++    "am Ende", // Deutsch / German
++    "", // Slovenski / Slovenian
++    "", // Italiano / Italian
++    "", // Nederlands / Dutch
++    "", // Português / Portuguese
++    "", // Français / French
++    "", // Norsk / Norwegian
++    "", // suomi / Finnish
++    "", // Polski / Polish
++    "", // Español / Spanish
++    "", // ÅëëçíéêÜ / Greek
++    "", // Svenska / Swedish
++    "", // Românã / Romanian
++    "", // Magyar / Hungarian
++    "", // Català / Catalanian
++    "", // ÀãááÚØÙ / Russian
++    "", // Hrvatski / Croatian
++    "", // Eesti / Estonian
++    "", // Dansk / Danish
++    "", // Èesky / Czech
++  },
++  { "Setup.BigPatch$on begin and end", // English
++    "am Anfang und Ende", // Deutsch / German
++    "", // Slovenski / Slovenian
++    "", // Italiano / Italian
++    "", // Nederlands / Dutch
++    "", // Português / Portuguese
++    "", // Français / French
++    "", // Norsk / Norwegian
++    "", // suomi / Finnish
++    "", // Polski / Polish
++    "", // Español / Spanish
++    "", // ÅëëçíéêÜ / Greek
++    "", // Svenska / Swedish
++    "", // Românã / Romanian
++    "", // Magyar / Hungarian
++    "", // Català / Catalanian
++    "", // ÀãááÚØÙ / Russian
++    "", // Hrvatski / Croatian
++    "", // Eesti / Estonian
++    "", // Dansk / Danish
++    "", // Èesky / Czech
++  },
++  { "Setup.BigPatch$Limit DVD to speed", // English
++    "DVD drosseln auf", // Deutsch / German
++    "", // Slovenski / Slovenian
++    "", // Italiano / Italian
++    "", // Nederlands / Dutch
++    "", // Português / Portuguese
++    "Ralentir la vitesse du DVD sur", // Français / French
++    "", // Norsk / Norwegian
++    "", // suomi / Finnish
++    "", // Polski / Polish
++    "", // Español / Spanish
++    "", // ÅëëçíéêÜ / Greek
++    "", // Svenska / Swedish
++    "", // Românã / Romanian
++    "", // Magyar / Hungarian
++    "", // Català / Catalanian
++    "", // ÀãááÚØÙ / Russian
++    "", // Hrvatski / Croatian
++    "", // Eesti / Estonian
++    "", // Dansk / Danish
++    "", // Èesky / Czech
++  },
+   { NULL }
+   };
+ 
+diff -urNad vdr-1.4.3~/keys.h vdr-1.4.3/keys.h
+--- vdr-1.4.3~/keys.h	2006-04-15 15:56:03.000000000 +0200
++++ vdr-1.4.3/keys.h	2006-09-24 13:12:04.000000000 +0200
+@@ -70,6 +70,10 @@
+ #define kEditCut         k2
+ #define kEditTest        k8
+ 
++// DVDARCHIVE Patch
++#define kDvdChapterJumpForward k6
++#define kDvdChapterJumpBack    k4
++
+ #define RAWKEY(k)        (eKeys((k) & ~k_Flags))
+ #define ISRAWKEY(k)      ((k) != kNone && ((k) & k_Flags) == 0)
+ #define NORMALKEY(k)     (eKeys((k) & ~k_Repeat))
+diff -urNad vdr-1.4.3~/menu.c vdr-1.4.3/menu.c
+--- vdr-1.4.3~/menu.c	2006-09-24 13:12:04.000000000 +0200
++++ vdr-1.4.3/menu.c	2006-09-24 13:23:13.000000000 +0200
+@@ -2347,8 +2347,27 @@
+      else {
+         cRecording *recording = GetRecording(ri);
+         if (recording) {
+-           cReplayControl::SetRecording(recording->FileName(), recording->Title());
+-           return osReplay;
++	   int mountRet = MOUNT_DVD_REPLAY;
++	   if (recording->IsOnlyOnDvd()) {
++	     mountRet = recording->MountDvd();
++	   }
++	   if(mountRet == MOUNT_DVD_REPLAY) {
++	     cReplayControl::SetRecording(recording->FileName(), recording->Title());
++             return osReplay;
++	   } else if (mountRet == MOUNT_DVD_LAUNCH_DVD_PLUGIN) {
++	     //launch DVD plugin here
++	     cPlugin *p = cPluginManager::GetPlugin("dvd");
++	     cOsdObject *osd = NULL;
++	     if(p) {
++	       osd = p->MainMenuAction();
++	       delete osd;
++	       osd = NULL;
++	       return osEnd;
++	     } else {
++	       Skins.Message(mtError, tr("DVD plugin is not installed!"));
++	       Skins.Flush();
++	       }
++	     }
+            }
+         }
+      }
+@@ -2996,8 +3015,19 @@
+   SetSection(tr("Replay"));
+   Add(new cMenuEditBoolItem(tr("Setup.Replay$Multi speed mode"), &data.MultiSpeedMode));
+   Add(new cMenuEditBoolItem(tr("Setup.Replay$Show replay mode"), &data.ShowReplayMode));
+-  Add(new cMenuEditBoolItem(tr("Setup.Replay$Tray open on begin"), &data.TrayOpenOnBegin));
+-  Add(new cMenuEditBoolItem(tr("Setup.Replay$Tray open on end"),   &data.TrayOpenOnEnd));
++  static const char *dvddisplaymode[3];
++  dvddisplaymode[0]=tr("Setup.BigPatch$Length");
++  dvddisplaymode[1]=tr("Setup.BigPatch$Length / Number");
++  dvddisplaymode[2]=tr("Setup.BigPatch$Number");
++  Add(new cMenuEditStraItem(tr("Setup.BigPatch$DVD display mode"),                &data.DvdDisplayMode,3,dvddisplaymode));
++  Add(new cMenuEditBoolItem(tr("Setup.BigPatch$DVD display leading zeros"),       &data.DvdDisplayZeros));
++  static const char *dvdtraymode[4];
++  dvdtraymode[0]=tr("Setup.BigPatch$never");
++  dvdtraymode[1]=tr("Setup.BigPatch$on begin");
++  dvdtraymode[2]=tr("Setup.BigPatch$on end");
++  dvdtraymode[3]=tr("Setup.BigPatch$on begin and end");
++  Add(new cMenuEditStraItem(tr("Setup.BigPatch$Tray open"),                       &data.DvdTrayMode,4,dvdtraymode));
++  Add(new cMenuEditIntItem(tr("Setup.BigPatch$Limit DVD to speed"),               &data.DvdSpeedLimit, 0, 50));
+   Add(new cMenuEditIntItem(tr("Setup.Replay$Resume ID"), &data.ResumeID, 0, 99));
+   Add(new cMenuEditBoolItem(tr("Setup.Replay$Jump&Play"), &data.JumpPlay));
+   Add(new cMenuEditBoolItem(tr("Setup.Replay$Play&Jump"), &data.PlayJump));
+@@ -4387,6 +4417,16 @@
+   timeoutShow = 0;
+   timeSearchActive = false;
+   cRecording Recording(fileName);
++  canJumpChapters = (Recording.GetDvdType() == DVD_VIDEO_ARCHIVE_TYPE);
++  dvdchapters = NULL;
++  if(canJumpChapters) {
++    const char *ret = Recording.GetDvdChapters();
++    if(ret) {
++      dvdchapters = strdup(ret);
++    } else {
++      canJumpChapters=false;
++      }
++    }
+   cStatus::MsgReplaying(this, Recording.Name(), Recording.FileName(), true);
+   SetTrackDescriptions(false);
+ }
+@@ -4394,6 +4434,7 @@
+ cReplayControl::~cReplayControl()
+ {
+   Hide();
++  free(dvdchapters);
+   cStatus::MsgReplaying(this, NULL, fileName, false);
+   Stop();
+ }
+@@ -4659,6 +4700,32 @@
+      }
+ }
+ 
++void cReplayControl::ChaptersJump(bool Forward)
++{
++     int Current, Total;
++     if (GetIndex(Current, Total)) {
++        int position = -1;
++        char *buf, *pos, *old1, *old2;
++	old1 = "-1";
++	old2 = "-1";
++	buf = strdup(dvdchapters);
++	pos = strtok(buf, ",");
++	while(pos != NULL && position == -1) {
++	  if(pos && atoi(pos) > Current)
++	    position = Forward ? atoi(pos) : ((Current - atoi(old1)) <= (3*FRAMESPERSEC)) ? atoi(old2) : atoi(old1);
++	  old2 = old1;
++	  old1 = strdup(pos);
++	  if(position == -1) pos = strtok(NULL, ",");
++	  } 
++	if(!pos && !Forward)
++	  position = ((Current - atoi(old1)) <= (3*FRAMESPERSEC)) ? atoi(old2) : atoi(old1);
++        if(position >= 0) {
++	  Goto(position);
++	  Play();
++        }
++     }
++}
++
+ void cReplayControl::EditCut(void)
+ {
+   if (fileName) {
+@@ -4725,6 +4792,13 @@
+      TimeSearchProcess(Key);
+      return osContinue;
+      }
++  bool isOnMark = false;
++  if(canJumpChapters) {
++    int Current, Total;
++    GetIndex(Current, Total);
++    cMark *m = marks.Get(Current);
++    if(m && (m->position == Current)) isOnMark = true;
++    }
+   bool DoShowMode = true;
+   switch (Key) {
+     // Positioning:
+@@ -4755,6 +4829,22 @@
+     case kBlue:    Hide();
+                    Stop();
+                    return osEnd;
++    case kDvdChapterJumpForward|k_Repeat:			// DVDARCHIVE Patch
++    case kDvdChapterJumpForward: if(canJumpChapters && !isOnMark) {
++                                   ChaptersJump(true);
++				 } else {
++				   DoShowMode = false;
++				   MarkMove(true);
++				   }
++				 break;  
++    case kDvdChapterJumpBack|k_Repeat:
++    case kDvdChapterJumpBack: if(canJumpChapters && !isOnMark) {
++                                ChaptersJump(false);
++			      } else {
++			        DoShowMode = false;
++				MarkMove(false);
++				}
++			      break;  
+     default: {
+       DoShowMode = false;
+       switch (Key) {
+diff -urNad vdr-1.4.3~/menu.h vdr-1.4.3/menu.h
+--- vdr-1.4.3~/menu.h	2006-09-24 13:12:04.000000000 +0200
++++ vdr-1.4.3/menu.h	2006-09-24 13:28:12.000000000 +0200
+@@ -247,6 +247,9 @@
+   void MarkMove(bool Forward);
+   void EditCut(void);
+   void EditTest(void);
++  void ChaptersJump(bool Forward);
++  bool canJumpChapters;
++  char *dvdchapters;
+ public:
+   cReplayControl(void);
+   virtual ~cReplayControl();
+diff -urNad vdr-1.4.3~/recording.c vdr-1.4.3/recording.c
+--- vdr-1.4.3~/recording.c	2006-09-24 13:12:04.000000000 +0200
++++ vdr-1.4.3/recording.c	2006-09-24 13:33:24.000000000 +0200
+@@ -24,6 +24,15 @@
+ #include "tools.h"
+ #include "videodir.h"
+ 
++// DVD-ARCHIVE Patch
++#if defined(DVDCHAPJUMP)
++#include <assert.h>
++/* libdvdread stuff */
++#include <dvdread/dvd_reader.h>
++#include <dvdread/ifo_types.h>
++#include <dvdread/ifo_read.h>
++#endif
++
+ #define SUMMARYFALLBACK
+ 
+ #define RECEXT       ".rec"
+@@ -47,6 +56,7 @@
+ #define INFOFILESUFFIX    "/info.vdr"
+ #define MARKSFILESUFFIX   "/marks.vdr"
+ #define INDEXFILESUFFIX   "/index.vdr"
++#define DVDARCHIVEFILENAME "/dvd.vdr"
+ 
+ #define MINDISKSPACE 1024 // MB
+ 
+@@ -491,6 +501,12 @@
+   sortBuffer = NULL;
+   fileName = NULL;
+   name = NULL;
++  dvdname = NULL;
++  dvdtrack = NULL;
++  dvdchapters = NULL;
++  isArchived = false;
++  isOnlyOnDvd = false;
++  dvdtype = DVD_TYPE_UNKNOWN;
+   fileSizeMB = -1; // unknown
+   deleted = 0;
+   // set up the actual name:
+@@ -551,6 +567,12 @@
+   char *p = strrchr(FileName, '/');
+ 
+   name = NULL;
++  dvdname = NULL;
++  dvdtrack = NULL;
++  dvdchapters = NULL;
++  isArchived = false;
++  isOnlyOnDvd = false;
++  dvdtype = DVD_TYPE_NOT_READ;
+   info = new cRecordingInfo;
+   if (p) {
+      time_t now = time(NULL);
+@@ -634,6 +656,13 @@
+         free(SummaryFileName);
+         }
+ #endif
++     if(CheckFileExistence("dvd.vdr")) {
++       GetDvdName(fileName);
++       isArchived = true;
++       if(!CheckFileExistence("001.vdr")) {
++         isOnlyOnDvd = true;  
++         }
++       }
+      }
+ }
+ 
+@@ -643,6 +672,9 @@
+   free(sortBuffer);
+   free(fileName);
+   free(name);
++  free(dvdname);
++  free(dvdtrack);
++  free(dvdchapters);
+   delete info;
+ }
+ 
+@@ -708,6 +740,352 @@
+   return fileName;
+ }
+ 
++bool cRecording::CheckFileExistence(const char* FileNameToTest, const bool useVideoDir) const
++{
++  if (!useVideoDir || (useVideoDir && FileName())) {
++    char filename[BUFSIZ];
++    
++    sprintf(filename, "%s%s%s", useVideoDir ? FileName() : "",
++				useVideoDir ? "/" : "",
++				FileNameToTest);
++    struct stat statBuf;
++    if(lstat(filename, &statBuf) == -1) return false;
++    return S_ISREG(statBuf.st_mode) || S_ISLNK(statBuf.st_mode);
++    }
++  return false;
++}
++
++bool cRecording::GetDvdName(const char* Directory) const
++{
++  char* filename = (char*)alloca(strlen(Directory) + strlen(DVDARCHIVEFILENAME) + 1);
++  if (filename) {
++    strcpy(filename, Directory);
++    char *end = filename + strlen(filename);
++    strcpy(end, DVDARCHIVEFILENAME);
++    FILE* file;
++    if((file = fopen(filename, "r"))) {
++      cReadLine ReadLine;
++      char* buffer = (char*)alloca(BUFSIZ);
++      if(buffer) {
++        buffer = ReadLine.Read(file);
++        if(buffer) {
++	  ((cRecording*)this)->dvdname = strdup(buffer);
++	} else {
++	  ((cRecording*)this)->dvdname = NULL;
++	  }
++	    
++        buffer = ReadLine.Read(file);
++        if(buffer) {
++	  ((cRecording*)this)->dvdtrack = strdup(buffer);
++	  if(atoi(buffer) == 0) {
++	    ((cRecording*)this)->dvdtype = DVD_VIDEO_TYPE;
++	  } else {
++	    ((cRecording*)this)->dvdtype = DVD_VIDEO_ARCHIVE_TYPE;
++	    }
++	} else {
++	  ((cRecording*)this)->dvdtrack = NULL;
++	  ((cRecording*)this)->dvdtype = DVD_ARCHIVE_TYPE;
++	  }
++	    
++        fclose(file);
++        return true;
++        }
++      }
++    }
++  return false;
++}
++
++bool cRecording::GetDvdChaptersFromDvd(int title) const
++{
++#if defined(DVDCHAPJUMP)
++  char* buf = (char*)alloca(BUFSIZ);
++  if(!buf) return false;
++  
++  dvd_reader_t *dvd;
++  ifo_handle_t *ifo_file;
++  tt_srpt_t *tt_srpt;
++  ifo_handle_t *vts_file;
++  pgc_t *cur_pgc;
++  
++  dvd = DVDOpen(DVD_DEVICE);
++  if(!dvd) {
++    esyslog("DVD-ARCHIVE: Couldn't open DVD device %s!", DVD_DEVICE);
++    return false;
++    }
++  
++  /* open title manager */
++  ifo_file = ifoOpen(dvd,0);
++  if(!ifo_file) {
++    esyslog("DVD-ARCHIVE: Can't open VMG info.");
++    DVDClose(dvd);
++    return false;
++    }
++
++  /* read total_title */
++  tt_srpt = ifo_file->tt_srpt;
++  
++  /* get total chapters */
++  int title_set_nr   = tt_srpt->title[title-1].title_set_nr;
++  int total_chap     = tt_srpt->title[title-1].nr_of_ptts;
++  int local_title_id = tt_srpt->title[title-1].vts_ttn - 1;
++  
++  /* access title set file */
++  vts_file = ifoOpen(dvd,title_set_nr);
++  if(!vts_file) {
++    esyslog("DVD-ARCHIVE: Can't open info file for title set %d!",title_set_nr);
++    DVDClose(dvd);
++    return false;
++  }
++
++  /* find program chain and check programs 
++     all chapters should be in the same prog chain and
++     should be numbered from 1 to <total_chap>
++  */
++  {
++    vts_ptt_srpt_t *vts_ptt_srpt = vts_file->vts_ptt_srpt;
++    int pgc_nr = vts_ptt_srpt->title[local_title_id].ptt[0].pgcn;
++    int pg     = vts_ptt_srpt->title[local_title_id].ptt[0].pgn;
++    int p;
++
++    assert(pg==1);
++    for(p=1;p<total_chap;p++) {
++      int next_pg;
++      int this_pgc;
++      this_pgc = vts_ptt_srpt->title[local_title_id].ptt[p].pgcn;
++      assert(pgc_nr==this_pgc);
++      next_pg = vts_ptt_srpt->title[local_title_id].ptt[p].pgn;
++      assert(pg+1==next_pg);
++      pg = next_pg;
++    }
++    
++    /* fetch program chain */
++    cur_pgc = vts_file->vts_pgcit->pgci_srp[pgc_nr-1].pgc;
++    assert(cur_pgc->nr_of_programs==total_chap);
++  }
++
++  /* --- main cell loop --- */
++  {
++    pgc_program_map_t *chap_cell;
++    cell_playback_t *cell_pb;
++    int c;
++    int chap;
++
++    /* total cells in chain */
++    int total_cell = cur_pgc->nr_of_cells;
++
++    /* get info */
++    chap_cell = cur_pgc->program_map;
++    cell_pb   = cur_pgc->cell_playback;
++
++    /* loop through all cells */
++    chap = -1;
++    int position = 0;
++    for(c=0;c<total_cell;c++) {
++      int cell_mode;
++      char *mode;
++      
++      dvd_time_t *time = (dvd_time_t *)&cell_pb->playback_time;
++      
++      int framerate = time->frame_u>>6;
++      assert(framerate == 1 || framerate == 3);
++      int frames_per_sec = (framerate == 1) ? 25 : 30;
++      
++      /* upper 4 bits are first digit, down 4 bits are second digit */
++      int hour = (time->hour>>4) * 10 + (time->hour&15);
++      int minute = (time->minute>>4) * 10 + (time->minute&15);
++      int second = (time->second>>4) * 10 + (time->second&15);
++      /* upper 4 bits are first digit, down 4 bits are second digit */
++      int frame = (time->frame_u>>4&3) * 10 + (time->frame_u&15);
++      
++      int frames = ((hour * 3600) + (minute * 60) + second) * frames_per_sec + frame;
++
++      /* this cell is the begin of a new chapter! */
++      if(chap_cell[chap+1]==c+1) {
++        char oldbuf[BUFSIZ];
++        sprintf(oldbuf, "%s", buf);
++        sprintf(buf, "%s%d%s", oldbuf, position,
++    			       ((chap+2) < total_chap) ? "," : "");
++	chap++;
++        }
++      
++      /* cell_mode: 0=normal, 1=first of angle, 2=in angle, 3=last of angle */
++      cell_mode = cell_pb->block_mode;
++      if((cell_mode==0)||(cell_mode==1)) {
++	/* only account for normal or begin of angle cells */
++        position += frames;
++	mode = "counted";
++      } else {
++	mode = "skipped";
++      }
++
++      cell_pb++;
++    }
++  }
++
++  ifoClose(ifo_file);
++  ifoClose(vts_file);
++  DVDClose(dvd);
++  
++  ((cRecording*)this)->dvdchapters = strdup(buf);
++  
++  return true;
++#else
++  return false;
++#endif
++}
++
++const char *cRecording::GetDvdChapters(void) const
++{
++  // Read chapters from dvd
++  if(dvdtype == DVD_VIDEO_ARCHIVE_TYPE) {
++    if(dvdtrack) {
++      if(!GetDvdChaptersFromDvd(atoi(dvdtrack))) {
++        ((cRecording*)this)->dvdchapters = NULL;
++      } else {
++        isyslog("DVD-ARCHIVE: Using following positions for chapter jumping: %s", dvdchapters);
++	}
++      return dvdchapters;
++      }
++    }  
++  return NULL;
++}
++
++int cRecording::MountDvd(void) const
++{
++  char cmd[BUFSIZ];
++  if(Setup.DvdSpeedLimit > 0) {
++    sprintf(cmd, "speedcontrol -x %d %s", Setup.DvdSpeedLimit, DVD_DEVICE);
++    SystemExec(cmd);
++    }
++
++  char msg[BUFSIZ];
++  if(atoi(dvdname) == 0) {
++    sprintf(msg, tr("Please mount %s"), dvdname);
++  } else {
++    if(Setup.DvdDisplayZeros) {
++      sprintf(msg, tr("Please mount DVD %04d"), atoi(dvdname));
++    } else {
++      sprintf(msg, tr("Please mount DVD %d"), atoi(dvdname));
++      }  
++    }
++  
++  bool rep = true;
++  while(rep) {
++    if(Setup.DvdTrayMode==1 || Setup.DvdTrayMode==3) {
++      sprintf(cmd, "umount %s; eject %s", DVD_DEVICE, DVD_DEVICE);
++    } else {
++      sprintf(cmd, "umount %s", DVD_DEVICE);
++      }
++    SystemExec(cmd);
++  
++    if(Interface->Confirm(msg, 300)) {
++      Skins.Message(mtStatus, tr("Please wait. Checking DVD..."));
++      Skins.Flush();
++      sprintf(cmd, "eject -t %s; mkdir -p %s; mount -o ro -t %s %s %s",
++		    DVD_DEVICE, DVD_MOUNT_PATH,
++		    (dvdtrack ? "udf" : "iso9660"),
++		    DVD_DEVICE, DVD_MOUNT_PATH);
++      SystemExec(cmd);
++    
++      bool correctDvd = true;
++    
++      char *olddvdname, *olddvdtrack;
++      int olddvdtype;
++      olddvdname = dvdname;
++      olddvdtrack = dvdtrack;
++      olddvdtype = dvdtype;
++      if(GetDvdName(DVD_MOUNT_PATH)) {
++        if(atoi(dvdname) != atoi(olddvdname)) correctDvd = false;
++        }
++      ((cRecording*)this)->dvdname = olddvdname;
++      ((cRecording*)this)->dvdtrack = olddvdtrack;
++      ((cRecording*)this)->dvdtype = olddvdtype;
++    
++      if(correctDvd) {
++        if(dvdtrack == NULL) {
++          // Archived DVD in VDR format
++	  char fn[BUFSIZ];
++	  strcpy(fn, FileName());
++	  char *p = strrchr(fn, '/');
++	  sprintf(cmd, "find '%s' -name '%s'", DVD_MOUNT_PATH, p+1);
++        } else {
++          // Either archived DVD in DVD-Video format or DVD-Video which
++	  // should be played with the DVD plugin
++	  sprintf(cmd, "find '%s' -iname 'VIDEO_TS'", DVD_MOUNT_PATH);
++          }
++	
++        cReadLine pipe;
++        FILE* file;
++        char *dirname = NULL;
++        if((file = popen(cmd, "r")) != (FILE *)NULL) {
++          if((dirname = pipe.Read(file)) != NULL) {
++	    pclose(file);
++	    if(dvdtrack != NULL && atoi(dvdtrack) == 0) {
++	      // It is a valid Video-DVD and DVD plugin can be started
++	      return MOUNT_DVD_LAUNCH_DVD_PLUGIN;
++	    } else {
++	      // It is a valid Archive-DVD or an archived Video-DVD
++	      // and the links can now be established
++	      char srcFn[BUFSIZ];
++	      int n = 1;
++	    
++	      do {
++	        if(dvdtrack == NULL) {
++	          sprintf(srcFn, "%s/%03d.vdr", dirname, n);
++		} else {
++	          sprintf(srcFn, "%s/VTS_%02d_%d.VOB", dirname, atoi(dvdtrack), n);
++		  }
++	    
++	        if(!access(srcFn, R_OK)) {
++	          sprintf(cmd, "ln -sf '%s' '%s/%03d.vdr'", srcFn, FileName(), n);
++	          SystemExec(cmd);
++	          isyslog("DVD-ARCHIVE: Linking %s/%03d.vdr -> %s", FileName(), n, srcFn);
++	        } else {
++	          break;
++	          }
++	        } while( ++n < 999);
++	      
++	        if(!CheckFileExistence("index.vdr")) {
++		  if(dvdtrack == NULL) {
++	            sprintf(srcFn, "%s/index.vdr", dirname);
++		  } else {
++	            sprintf(srcFn, "%s/index_%02d.vdr", dirname, atoi(dvdtrack));
++		    }
++		    
++	          if(!CheckFileExistence(srcFn, false)) {
++		    sprintf(msg, tr("No index-file found. Creating may take minutes. Create one?"));
++		    if(Interface->Confirm(msg, 300)) {
++		      Skins.Message(mtStatus, tr("Please wait. Creating index-file..."));
++		      sprintf(cmd, "speedcontrol -x 999 %s; cd %s && genindex &", DVD_DEVICE, FileName());
++		      SystemExec(cmd);
++		      return MOUNT_DVD_ABORT;
++		    }
++		  } else {
++		    sprintf(cmd, "ln -sf '%s' '%s/index.vdr'", srcFn, FileName());
++	            SystemExec(cmd);
++	            isyslog("DVD-ARCHIVE: Linking %s/index.vdr -> %s", FileName(), srcFn);
++		    }
++	          }
++	      return MOUNT_DVD_REPLAY;
++	      }
++	  } else {
++            Skins.Message(mtError, tr("Wrong DVD!"), 3);
++            Skins.Flush();
++	    }
++          }
++        pclose(file);
++	
++      } else {
++        Skins.Message(mtError, tr("Wrong DVD!"), 3);
++        Skins.Flush();
++        }
++    } else {
++      rep = false;
++    }
++  }
++  return MOUNT_DVD_ABORT;
++}
++
+ const char *cRecording::Title(char Delimiter, bool NewIndicator, int Level, bool Original) const
+ {
+   char New = NewIndicator && IsNew() ? Setup.WarEagleIcons ? ICON_NEU : '*' : ' ';
+@@ -755,6 +1133,42 @@
+               free(filename);
+               }
+            }
++	
++	if(isArchived && !isOnlyOnDvd) New = '~';
++        
++	if (isOnlyOnDvd && Setup.DvdDisplayMode >= 1) {
++	   char oldLength[21];
++	   
++	   if(strrchr(RecLength, '\'')) {
++	     snprintf(oldLength, sizeof(oldLength), "%s", RecLength);
++	   } else {
++	     oldLength[0] = 0;
++	   }
++
++	   if(dvdname) {
++	     char tmp[BUFSIZ];
++	     if(atoi(dvdname) != 0) {
++	       if(Setup.DvdDisplayZeros) {
++	         snprintf(tmp, sizeof(tmp), "%04d", atoi(dvdname));
++	       } else {
++	         int num = atoi(dvdname);
++		 bool displaySpace = !(Setup.DvdDisplayMode == 1 && oldLength[0] != 0);
++		 // ugly hack to have 2 spaces instead of one 0 for each place
++	         snprintf(tmp, sizeof(tmp), "%s%s%s%d", displaySpace && (num < 1000) ? "  " : "",
++							displaySpace && (num < 100)  ? "  " : "",
++							displaySpace && (num < 10)   ? "  " : "",
++							num);
++	         }
++	       ((cRecording*)this)->dvdname = strdup(tmp);
++	       }
++	     }
++	     
++	   snprintf(RecLength, sizeof(RecLength), "%s%s%s%s",	(Setup.ShowRecLength && (Setup.DvdDisplayMode == 1) && (oldLength[0] != 0)) ? oldLength : "",
++								    (dvdname && isArchived && isOnlyOnDvd && Setup.ShowRecLength && (Setup.DvdDisplayMode == 1) && (oldLength[0] != 0)) ? " / " : "",
++								    (dvdname && isArchived && isOnlyOnDvd) ? dvdname : "",
++								    (dvdname && isArchived && isOnlyOnDvd) ? " " : ""
++							);
++	   }
+         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);
+@@ -764,8 +1178,8 @@
+                                (Setup.ShowRecTime ? RecTime        : ""),
+                                New,
+                                (Setup.ShowRecTime || Setup.ShowRecDate ? RecDelimiter : ""),
+-                               (Setup.ShowRecLength ? RecLength    : ""),
+-                               (Setup.ShowRecLength ? RecDelimiter : ""),
++                               (((Setup.ShowRecLength + Setup.DvdDisplayMode) > 0) ? RecLength    : ""),
++                               (((Setup.ShowRecLength + Setup.DvdDisplayMode) > 0) ? RecDelimiter : ""),
+                                s);
+         }
+      // let's not display a trailing '~':
+@@ -1529,6 +1943,50 @@
+ cFileName::~cFileName()
+ {
+   Close();
++
++  // DVD Archive Begin
++  
++  char fn[BUFSIZ];
++  strcpy(fn, fileName);
++  
++  char *p;
++  if((p = strrchr(fn, '/'))) {
++    p[0] = 0;
++    }
++  
++  char cmd[BUFSIZ];
++  sprintf(cmd, "find '%s' -type l -lname '%s/*'", fn, DVD_MOUNT_PATH);
++  
++  bool isOnDvd = false;
++  
++  cReadLine pipe;
++  FILE* file;
++  char* filename;
++  if((file = popen(cmd, "r")) != (FILE *)NULL) {
++    while((filename = pipe.Read(file)) != NULL) {
++      isOnDvd = true;
++      unlink(filename);
++      isyslog("DVD-ARCHIVE: Deleting %s", filename);
++      }
++    pclose(file);
++    }
++  
++  if(isOnDvd) {
++    if(Setup.DvdTrayMode==2 || Setup.DvdTrayMode==3) {
++      sprintf(cmd, "umount %s; eject %s", DVD_DEVICE, DVD_DEVICE);
++    } else {
++      sprintf(cmd, "umount %s", DVD_DEVICE);
++      }
++    SystemExec(cmd);
++    
++    if(Setup.DvdSpeedLimit > 0) {
++      sprintf(cmd, "speedcontrol -x 999 %s", DVD_DEVICE);
++      SystemExec(cmd);
++      }
++    }
++  
++  // DVD Archive End
++
+   free(fileName);
+ }
+ 
+@@ -1543,97 +2001,6 @@
+            LOG_ERROR_STR(fileName);
+         }
+      else {
+-#ifdef DVDARCHIVE
+-        isOnDVD = false;
+-
+-        if (access(fileName, R_OK)) { // fileName="/video0/Blumen_des_Schreckens/2004-05-10.12:25.50.99.rec/001.vdr"
+-          if (errno == ENOENT) {
+-            register char *p, *p1;
+-            register int   n = 1;
+-            auto     bool  ok = false;
+-            auto     char  fn[BUFSIZ], fn2[BUFSIZ], msg[BUFSIZ], cmd[BUFSIZ], s[BUFSIZ];
+-            auto     FILE *f, *f1;
+-     	    cReadLine ReadLine;
+-
+-            strcpy(fn, fileName);
+-
+-            if ((p = strrchr(fn, '.'))) {
+-              memcpy(p - 3, "dvd", 3);    // fn="/video0/Blumen_des_Schreckens/2004-05-10.12:25.50.99.rec/dvd.vdr"
+-
+-              if ((f = fopen(fn, "r")) != (FILE *)NULL) {
+-                if (fgets(s, sizeof s, f)) {
+-                  if ((p1 = strchr(s, '\n')))
+-                    *p1 = 0;
+-                  sprintf(msg, tr("Please mount DVD %s"), s);
+-
+-                  do {
+-                    if (Setup.TrayOpenOnBegin)
+-                      SystemExec("umount /dev/cdrom; eject /dev/cdrom");
+-                    else
+-                      SystemExec("umount /dev/cdrom");
+-
+-                    if (Interface->Confirm(msg)) {
+-
+-                      SystemExec("eject -t /dev/cdrom; mkdir -p /tmp/vdr.dvd; mount -o ro /dev/cdrom /tmp/vdr.dvd");
+-                      isOnDVD = true;
+-
+-                      *(p - 4) = 0;
+-                      sprintf(cmd, "find /tmp/vdr.dvd -name '%s'", p - 30); // fn="2004-05-10.12:25.50.99.rec"
+-
+-                      if ((f1 = popen(cmd, "r")) != (FILE *)NULL) {
+-
+-                        if ((p1 = ReadLine.Read(f1)) != NULL) {
+-
+-                          if ((p = strrchr(fileName, '/')))
+-                            *p = 0;
+-
+-                          do {
+-                            sprintf(fn2, "%s/%03d.vdr", p1, n);
+-
+-        		    if (!access(fn2, R_OK)) {
+-                              sprintf(s, "ln -sf '%s' '%s/%03d.vdr'", fn2, fileName, n);
+-                      	      SystemExec(s);
+-           		      dsyslog(s);
+-        		    }
+-                            else
+-                              break;
+-                          }
+-                          while (++n < MAXFILESPERRECORDING);
+-
+-                          sprintf(fn2, "%s/index.vdr", p1);
+-
+-        		  if (!access(fn2, R_OK)) {
+-                            sprintf(s, "ln -sf '%s' '%s/index.vdr'", fn2, fileName);
+-                      	    SystemExec(s);
+-                      	    dsyslog(s);
+-                          }
+-
+-                          *p = '/';
+-
+-                          ok = true;
+-                        }
+-                        pclose(f1);
+-                      }
+-
+-                      if (!ok) {
+-#if VDRVERSNUM >= 10307
+-                        Skins.Message(mtError, tr("Wrong DVD!"));
+-#else
+-                        Interface->Error(tr("Wrong DVD!"));
+-#endif
+-                        isOnDVD = false;
+-                      }
+-                    }
+-                    else
+-                      break;
+-                  } while (!ok);
+-                }
+-                fclose(f);
+-              }
+-            }
+-          }
+-        }
+-#endif /* DVDARCHIVE */
+         if (access(fileName, R_OK) == 0) {
+            dsyslog("playing '%s'", fileName);
+            file = cUnbufferedFile::Create(fileName, O_RDONLY | BlockingFlag);
+@@ -1653,15 +2020,6 @@
+      if (CloseVideoFile(file) < 0)
+         LOG_ERROR_STR(fileName);
+      file = NULL;
+-#ifdef DVDARCHIVE
+-     if (isOnDVD) {
+-        if (Setup.TrayOpenOnEnd)
+-          SystemExec("umount /dev/cdrom; eject /dev/cdrom");
+-        else
+-          SystemExec("umount /dev/cdrom");
+-        isOnDVD = false;
+-     }
+-#endif /* DVDARCHIVE */
+      }
+ }
+ 
+diff -urNad vdr-1.4.3~/recording.h vdr-1.4.3/recording.h
+--- vdr-1.4.3~/recording.h	2006-09-24 13:12:04.000000000 +0200
++++ vdr-1.4.3/recording.h	2006-09-24 13:34:31.000000000 +0200
+@@ -61,6 +61,18 @@
+   bool Write(FILE *f, const char *Prefix = "") const;
+   };
+ 
++#define MOUNT_DVD_ABORT             0
++#define MOUNT_DVD_REPLAY            1
++#define MOUNT_DVD_LAUNCH_DVD_PLUGIN 2
++#define DVD_DEVICE		    "/dev/cdrom"
++#define DVD_MOUNT_PATH		    "/tmp/vdr.dvd"
++
++#define DVD_TYPE_UNKNOWN	    -1
++#define DVD_TYPE_NOT_READ	    0
++#define DVD_VIDEO_TYPE		    1
++#define DVD_ARCHIVE_TYPE	    2
++#define DVD_VIDEO_ARCHIVE_TYPE      3
++
+ class cRecording : public cListObject {
+   friend class cRecordings;
+ private:
+@@ -71,6 +83,13 @@
+   mutable char *name;
+   mutable int fileSizeMB;
+   cRecordingInfo *info;
++  char *dvdname;
++  char *dvdtrack;
++  char *dvdchapters;
++  bool isArchived;
++  bool isOnlyOnDvd;
++  int dvdtype;
++  bool GetDvdChaptersFromDvd(int title) const;
+   static char *StripEpisodeName(char *s);
+   char *SortName(void) const;
+   int GetResume(void) const;
+@@ -85,6 +104,12 @@
+   virtual int Compare(const cListObject &ListObject) const;
+   const char *Name(void) const { return name; }
+   const char *FileName(void) const;
++  bool CheckFileExistence(const char* FileNameToTest, const bool useVideoDir = true) const;
++  bool GetDvdName(const char* Directory) const;
++  bool IsOnlyOnDvd(void) const { return isOnlyOnDvd; }
++  int MountDvd(void) const;
++  int GetDvdType(void) const { return dvdtype; }
++  const char *GetDvdChapters(void) const ;
+   const char *Title(char Delimiter = ' ', bool NewIndicator = false, int Level = -1, bool Original = true) const;
+   const cRecordingInfo *Info(void) const { return info; }
+   const char *PrefixFileName(char Prefix);
+@@ -215,6 +240,7 @@
+   cResumeFile resumeFile;
+   cMutex mutex;
+   bool CatchUp(int Index = -1);
++  bool isOnDVD;
+ public:
+   cIndexFile(const char *FileName, bool Record);
+   ~cIndexFile();

Added: vdr/vdr/trunk/debian/patches/opt-46_dvdarchive.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-46_dvdarchive.dpatch	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/opt-46_dvdarchive.dpatch	2007-01-12 22:28:45 UTC (rev 3851)
@@ -0,0 +1,306 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## opt-46_dvdarchive.dpatch by Andreas Kool <akool at gmx.de>
+## http://www.ko0l.de/download/vdr/DVDarchive/download/vdr-dvdarchive-0.0.4.tar.bz2
+##
+## Thomas Günther <tom at toms-cafe.de>:
+##   - adapted to VDR-1.3.42
+##   - solved conflicts with other patches
+##   - activated DVDARCHIVE define by default
+##   - set default of TrayOpenOnBegin and TrayOpenOnEnd to 0
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Play on DVD archived VDR recordings.
+
+ at DPATCH@
+diff -drubNB -x PLUGINS -x mk -x 'ORIG*' vdr-1.3.21.orig/Makefile vdr-1.3.21/Makefile
+--- vdr-1.3.21.orig/Makefile	2005-02-13 11:13:45.000000000 +0100
++++ vdr-1.3.21/Makefile	2005-02-20 10:13:44.000000000 +0100
+@@ -80,6 +80,10 @@
+ DEFINES += -DVFAT
+ endif
+ 
++ifndef NO_DVDARCHIVE
++DEFINES += -DDVDARCHIVE
++endif
++
+ all: vdr
+ font: genfontfile\
+       fontfix-iso8859-1.c fontosd-iso8859-1.c fontsml-iso8859-1.c\
+diff -drubNB -x PLUGINS -x mk -x 'ORIG*' vdr-1.3.21.orig/config.c vdr-1.3.21/config.c
+--- vdr-1.3.21.orig/config.c	2005-02-05 11:43:04.000000000 +0100
++++ vdr-1.3.21/config.c	2005-02-20 10:17:51.000000000 +0100
+@@ -294,6 +294,10 @@
+   SplitEditedFiles = 0;
+   MinEventTimeout = 30;
+   MinUserInactivity = 300;
++#ifdef DVDARCHIVE
++  TrayOpenOnBegin = 0;
++  TrayOpenOnEnd = 0;
++#endif /* DVDARCHIVE */
+   MultiSpeedMode = 0;
+   ShowReplayMode = 0;
+   ResumeID = 0;
+@@ -450,6 +454,10 @@
+   else if (!strcasecmp(Name, "SplitEditedFiles"))    SplitEditedFiles   = atoi(Value);
+   else if (!strcasecmp(Name, "MinEventTimeout"))     MinEventTimeout    = atoi(Value);
+   else if (!strcasecmp(Name, "MinUserInactivity"))   MinUserInactivity  = atoi(Value);
++#ifdef DVDARCHIVE
++  else if (!strcasecmp(Name, "TrayOpenOnBegin"))     TrayOpenOnBegin    = atoi(Value);
++  else if (!strcasecmp(Name, "TrayOpenOnEnd"))       TrayOpenOnEnd      = atoi(Value);
++#endif /* DVDARCHIVE */
+   else if (!strcasecmp(Name, "MultiSpeedMode"))      MultiSpeedMode     = atoi(Value);
+   else if (!strcasecmp(Name, "ShowReplayMode"))      ShowReplayMode     = atoi(Value);
+   else if (!strcasecmp(Name, "ResumeID"))            ResumeID           = atoi(Value);
+@@ -515,6 +523,10 @@
+   Store("MinUserInactivity",  MinUserInactivity);
+   Store("MultiSpeedMode",     MultiSpeedMode);
+   Store("ShowReplayMode",     ShowReplayMode);
++#ifdef DVDARCHIVE
++  Store("TrayOpenOnBegin",    TrayOpenOnBegin);
++  Store("TrayOpenOnEnd",      TrayOpenOnEnd);
++#endif /* DVDARCHIVE */
+   Store("ResumeID",           ResumeID);
+   Store("CurrentChannel",     CurrentChannel);
+   Store("CurrentVolume",      CurrentVolume);
+diff -drubNB -x PLUGINS -x mk -x 'ORIG*' vdr-1.3.21.orig/config.h vdr-1.3.21/config.h
+--- vdr-1.3.21.orig/config.h	2005-02-08 12:22:14.000000000 +0100
++++ vdr-1.3.21/config.h	2005-02-20 10:21:51.000000000 +0100
+@@ -248,6 +248,8 @@
+   int MaxVideoFileSize;
+   int SplitEditedFiles;
+   int MinEventTimeout, MinUserInactivity;
++  int TrayOpenOnBegin;
++  int TrayOpenOnEnd;
+   int MultiSpeedMode;
+   int ShowReplayMode;
+   int ResumeID;
+diff -drubNB -x PLUGINS -x mk -x 'ORIG*' vdr-1.3.21.orig/i18n.c vdr-1.3.21/i18n.c
+--- vdr-1.3.21.orig/i18n.c	2005-02-12 11:26:51.000000000 +0100
++++ vdr-1.3.21/i18n.c	2005-02-20 10:13:44.000000000 +0100
+@@ -2231,6 +2231,84 @@
+     "Kõvaketas peaaegu täis!",
+     "Kun lidt diskplads tilbage!",
+   },
++#ifdef DVDARCHIVE
++  { "Please mount DVD %s",
++    "Bitte DVD %s einlegen",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Wrong DVD!",
++    "Falsche DVD!",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Replay$Tray open on begin",
++    "DVD-Schublade zu Beginn öffnen",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Replay$Tray open on end",
++    "DVD-Schublade am Ende öffnen",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++#endif /* DVDARCHIVE */
+   { "Can't open CAM menu!",
+     "CAM-Menü kann nicht geöffnet werden!",
+     "Ne morem odpreti CAM menija!",
+diff -drubNB -x PLUGINS -x mk -x 'ORIG*' vdr-1.3.21.orig/menu.c vdr-1.3.21/menu.c
+--- vdr-1.3.21.orig/menu.c	2005-02-06 12:33:13.000000000 +0100
++++ vdr-1.3.21/menu.c	2005-02-20 10:13:44.000000000 +0100
+@@ -2171,6 +2171,8 @@
+   SetSection(tr("Replay"));
+   Add(new cMenuEditBoolItem(tr("Setup.Replay$Multi speed mode"), &data.MultiSpeedMode));
+   Add(new cMenuEditBoolItem(tr("Setup.Replay$Show replay mode"), &data.ShowReplayMode));
++  Add(new cMenuEditBoolItem(tr("Setup.Replay$Tray open on begin"), &data.TrayOpenOnBegin));
++  Add(new cMenuEditBoolItem(tr("Setup.Replay$Tray open on end"),   &data.TrayOpenOnEnd));
+   Add(new cMenuEditIntItem(tr("Setup.Replay$Resume ID"), &data.ResumeID, 0, 99));
+ }
+ 
+diff -drubNB -x PLUGINS -x mk -x 'ORIG*' vdr-1.3.21.orig/recording.c vdr-1.3.21/recording.c
+--- vdr-1.3.21.orig/recording.c	2005-02-12 11:17:47.000000000 +0100
++++ vdr-1.3.21/recording.c	2005-02-20 10:28:31.000000000 +0100
+@@ -1094,6 +1094,97 @@
+            LOG_ERROR_STR(fileName);
+         }
+      else {
++#ifdef DVDARCHIVE
++        isOnDVD = false;
++
++        if (access(fileName, R_OK)) { // fileName="/video0/Blumen_des_Schreckens/2004-05-10.12:25.50.99.rec/001.vdr"
++          if (errno == ENOENT) {
++            register char *p, *p1;
++            register int   n = 1;
++            auto     bool  ok = false;
++            auto     char  fn[BUFSIZ], fn2[BUFSIZ], msg[BUFSIZ], cmd[BUFSIZ], s[BUFSIZ];
++            auto     FILE *f, *f1;
++     	    cReadLine ReadLine;
++
++            strcpy(fn, fileName);
++
++            if ((p = strrchr(fn, '.'))) {
++              memcpy(p - 3, "dvd", 3);    // fn="/video0/Blumen_des_Schreckens/2004-05-10.12:25.50.99.rec/dvd.vdr"
++
++              if ((f = fopen(fn, "r")) != (FILE *)NULL) {
++                if (fgets(s, sizeof s, f)) {
++                  if ((p1 = strchr(s, '\n')))
++                    *p1 = 0;
++                  sprintf(msg, tr("Please mount DVD %s"), s);
++
++                  do {
++                    if (Setup.TrayOpenOnBegin)
++                      SystemExec("umount /dev/cdrom; eject /dev/cdrom");
++                    else
++                      SystemExec("umount /dev/cdrom");
++
++                    if (Interface->Confirm(msg)) {
++
++                      SystemExec("eject -t /dev/cdrom; mkdir -p /tmp/vdr.dvd; mount -o ro /dev/cdrom /tmp/vdr.dvd");
++                      isOnDVD = true;
++
++                      *(p - 4) = 0;
++                      sprintf(cmd, "find /tmp/vdr.dvd -name '%s'", p - 30); // fn="2004-05-10.12:25.50.99.rec"
++
++                      if ((f1 = popen(cmd, "r")) != (FILE *)NULL) {
++
++                        if ((p1 = ReadLine.Read(f1)) != NULL) {
++
++                          if ((p = strrchr(fileName, '/')))
++                            *p = 0;
++
++                          do {
++                            sprintf(fn2, "%s/%03d.vdr", p1, n);
++
++        		    if (!access(fn2, R_OK)) {
++                              sprintf(s, "ln -sf '%s' '%s/%03d.vdr'", fn2, fileName, n);
++                      	      SystemExec(s);
++           		      dsyslog(s);
++        		    }
++                            else
++                              break;
++                          }
++                          while (++n < MAXFILESPERRECORDING);
++
++                          sprintf(fn2, "%s/index.vdr", p1);
++
++        		  if (!access(fn2, R_OK)) {
++                            sprintf(s, "ln -sf '%s' '%s/index.vdr'", fn2, fileName);
++                      	    SystemExec(s);
++                      	    dsyslog(s);
++                          }
++
++                          *p = '/';
++
++                          ok = true;
++                        }
++                        pclose(f1);
++                      }
++
++                      if (!ok) {
++#if VDRVERSNUM >= 10307
++                        Skins.Message(mtError, tr("Wrong DVD!"));
++#else
++                        Interface->Error(tr("Wrong DVD!"));
++#endif
++                        isOnDVD = false;
++                      }
++                    }
++                    else
++                      break;
++                  } while (!ok);
++                }
++                fclose(f);
++              }
++            }
++          }
++        }
++#endif /* DVDARCHIVE */
+         if (access(fileName, R_OK) == 0) {
+            dsyslog("playing '%s'", fileName);
+            file = open(fileName, O_RDONLY | BlockingFlag);
+@@ -1113,6 +1204,15 @@
+      if ((record && CloseVideoFile(file) < 0) || (!record && file->Close() < 0))
+         LOG_ERROR_STR(fileName);
+      file = NULL;
++#ifdef DVDARCHIVE
++     if (isOnDVD) {
++        if (Setup.TrayOpenOnEnd)
++          SystemExec("umount /dev/cdrom; eject /dev/cdrom");
++        else
++          SystemExec("umount /dev/cdrom");
++        isOnDVD = false;
++     }
++#endif /* DVDARCHIVE */
+      }
+ }
+ 
+diff -drubNB -x PLUGINS -x mk -x 'ORIG*' vdr-1.3.21.orig/recording.h vdr-1.3.21/recording.h
+--- vdr-1.3.21.orig/recording.h	2005-01-16 16:11:31.000000000 +0100
++++ vdr-1.3.21/recording.h	2005-02-20 10:13:44.000000000 +0100
+@@ -163,6 +163,9 @@
+   char *fileName, *pFileNumber;
+   bool record;
+   bool blocking;
++#ifdef DVDARCHIVE
++  bool isOnDVD;
++#endif /* DVDARCHIVE */
+ public:
+   cFileName(const char *FileName, bool Record, bool Blocking = false);
+   ~cFileName();

Added: vdr/vdr/trunk/debian/patches/opt-47_sourcecaps.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-47_sourcecaps.dpatch	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/opt-47_sourcecaps.dpatch	2007-01-12 22:28:45 UTC (rev 3851)
@@ -0,0 +1,224 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## opt-21_sourcecaps.dpatch by Christian Schuld <chris at sonnengesicht.de>
+## http://linvdr.org/mailinglists/vdr/2004/08/msg00521.html
+## http://article.gmane.org/gmane.linux.vdr/27260/
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Patch for assigning special satellites to one dvb card.
+
+ at DPATCH@
+diff -rNu vdr-1.3.39/config.c vdr-1.3.39+SourceCaps/config.c
+--- vdr-1.3.39/config.c	2006-01-13 16:19:37.000000000 +0100
++++ vdr-1.3.39+SourceCaps/config.c	2006-01-21 13:50:24.433469136 +0100
+@@ -15,6 +15,7 @@
+ #include "interface.h"
+ #include "plugin.h"
+ #include "recording.h"
++#include "sources.h"
+ 
+ // IMPORTANT NOTE: in the 'sscanf()' calls there is a blank after the '%d'
+ // format characters in order to allow any number of blanks after a numeric
+@@ -228,6 +229,8 @@
+   LnbFrequLo =  9750;
+   LnbFrequHi = 10600;
+   DiSEqC = 0;
++  memset(SourceCaps, 0, sizeof SourceCaps);
++  SourceCapsSet = false;
+   SetSystemTime = 0;
+   TimeSource = 0;
+   TimeTransponder = 0;
+@@ -370,6 +373,49 @@
+   return true;
+ }
+ 
++void cSetup::StoreSourceCaps(const char *Name)
++{
++  cSetupLine *l;
++  while ((l = Get(Name)) != NULL)
++        Del(l);
++
++  for (int i = 0; i < MAXDEVICES; i++) {
++      char buffer[MAXSOURCECAPS*8]={0,}, *q = buffer;
++      int j = 0;
++      while (SourceCaps[i][j] && j < MAXSOURCECAPS) {
++            if (j==0) 
++               q += snprintf(buffer, sizeof(buffer), "%i ", i+1);
++            q += snprintf(q, sizeof(buffer) - (q-buffer), "%s ", *cSource::ToString(SourceCaps[i][j++]));
++      }
++      if (*buffer)
++         Store(Name, buffer, NULL, true);
++      }
++}
++
++bool cSetup::ParseSourceCaps(const char *Value)
++{
++  char *p;
++  int d = strtol(Value, &p, 10)-1, i = 0;
++  while (p < Value+strlen(Value)) {
++     	if (*p==0) return true;
++     	if (isblank(*p)) ++p;
++     	if (isalpha(*p)) {
++	   int source = cSource::FromString(p);
++	   if (source != cSource::stNone) {
++	      SourceCaps[d][i++] = source;
++	      SourceCapsSet = true;
++	      }
++	   else
++	      return false;
++	   while (!isblank(*p) && *p)
++		 ++p;
++	   if (i>MAXSOURCECAPS) 
++	      return false;
++     	   }
++        }
++  return true;
++}
++
+ bool cSetup::Parse(const char *Name, const char *Value)
+ {
+   if      (!strcasecmp(Name, "OSDLanguage"))         OSDLanguage        = atoi(Value);
+@@ -388,6 +434,7 @@
+   else if (!strcasecmp(Name, "LnbFrequLo"))          LnbFrequLo         = atoi(Value);
+   else if (!strcasecmp(Name, "LnbFrequHi"))          LnbFrequHi         = atoi(Value);
+   else if (!strcasecmp(Name, "DiSEqC"))              DiSEqC             = atoi(Value);
++  else if (!strcasecmp(Name, "SourceCaps"))          return ParseSourceCaps(Value);
+   else if (!strcasecmp(Name, "SetSystemTime"))       SetSystemTime      = atoi(Value);
+   else if (!strcasecmp(Name, "TimeSource"))          TimeSource         = cSource::FromString(Value);
+   else if (!strcasecmp(Name, "TimeTransponder"))     TimeTransponder    = atoi(Value);
+@@ -455,6 +502,7 @@
+   Store("LnbFrequLo",         LnbFrequLo);
+   Store("LnbFrequHi",         LnbFrequHi);
+   Store("DiSEqC",             DiSEqC);
++  if (SourceCapsSet) StoreSourceCaps("SourceCaps");
+   Store("SetSystemTime",      SetSystemTime);
+   Store("TimeSource",         cSource::ToString(TimeSource));
+   Store("TimeTransponder",    TimeTransponder);
+diff -rNu vdr-1.3.39/config.h vdr-1.3.39+SourceCaps/config.h
+--- vdr-1.3.39/config.h	2006-01-13 16:17:19.000000000 +0100
++++ vdr-1.3.39+SourceCaps/config.h	2006-01-21 13:50:24.440468072 +0100
+@@ -30,6 +30,9 @@
+ #define MINOSDHEIGHT 324
+ #define MAXOSDHEIGHT 567
+ 
++#define MAXDEVICES         16 // the maximum number of devices in the system
++#define MAXSOURCECAPS     128 // the maximum number of different sources per device
++
+ #define MaxFileName 256
+ #define MaxSkinName 16
+ #define MaxThemeName 16
+@@ -179,6 +182,8 @@
+   void StoreLanguages(const char *Name, int *Values);
+   bool ParseLanguages(const char *Value, int *Values);
+   bool Parse(const char *Name, const char *Value);
++  void StoreSourceCaps(const char *Name);
++  bool ParseSourceCaps(const char *Value);
+   cSetupLine *Get(const char *Name, const char *Plugin = NULL);
+   void Store(const char *Name, const char *Value, const char *Plugin = NULL, bool AllowMultiple = false);
+   void Store(const char *Name, int Value, const char *Plugin = NULL);
+@@ -201,6 +206,8 @@
+   int LnbFrequLo;
+   int LnbFrequHi;
+   int DiSEqC;
++  int SourceCaps[MAXDEVICES][MAXSOURCECAPS];
++  bool SourceCapsSet;
+   int SetSystemTime;
+   int TimeSource;
+   int TimeTransponder;
+diff -rNu vdr-1.3.39/device.c vdr-1.3.39+SourceCaps/device.c
+--- vdr-1.3.39/device.c	2006-01-08 12:39:37.000000000 +0100
++++ vdr-1.3.39+SourceCaps/device.c	2006-01-21 13:50:24.441467920 +0100
+@@ -174,8 +174,10 @@
+   for (int i = 0; i < MAXRECEIVERS; i++)
+       receiver[i] = NULL;
+ 
+-  if (numDevices < MAXDEVICES)
++  if (numDevices < MAXDEVICES) {
+      device[numDevices++] = this;
++     SetSourceCaps(cardIndex);
++     }
+   else
+      esyslog("ERROR: too many devices!");
+ }
+@@ -313,6 +315,17 @@
+   return d;
+ }
+ 
++void cDevice::SetSourceCaps(int Index)
++{
++  for (int d = 0; d < numDevices; d++) {
++      if (Index < 0 || Index == device[d]->CardIndex()) {
++	 for (int i = 0; i < MAXSOURCECAPS; i++)
++	     device[d]->sourceCaps[i] = Setup.SourceCaps[device[d]->CardIndex()][i];
++	 }
++      }
++}
++
++
+ void cDevice::Shutdown(void)
+ {
+   primaryDevice = NULL;
+diff -rNu vdr-1.3.39/device.h vdr-1.3.39+SourceCaps/device.h
+--- vdr-1.3.39/device.h	2006-01-08 11:10:26.000000000 +0100
++++ vdr-1.3.39+SourceCaps/device.h	2006-01-21 13:50:24.443467616 +0100
+@@ -23,7 +23,6 @@
+ #include "thread.h"
+ #include "tools.h"
+ 
+-#define MAXDEVICES         16 // the maximum number of devices in the system
+ #define MAXPIDHANDLES      64 // the maximum number of different PIDs per device
+ #define MAXRECEIVERS       16 // the maximum number of receivers per device
+ #define MAXVOLUME         255
+@@ -133,6 +132,8 @@
+          ///< given Priority.
+          ///< See ProvidesChannel() for more information on how
+          ///< priorities are handled, and the meaning of NeedsDetachReceivers.
++  static void SetSourceCaps(int Index = -1);
++	 ///< Sets the SourceCaps of the given device according to the Setup data.
+   static void Shutdown(void);
+          ///< Closes down all devices.
+          ///< Must be called at the end of the program.
+@@ -140,6 +141,7 @@
+   static int nextCardIndex;
+   int cardIndex;
+ protected:
++  int sourceCaps[MAXSOURCECAPS];
+   cDevice(void);
+   virtual ~cDevice();
+   virtual bool Ready(void);
+diff -rNu vdr-1.3.39/dvbdevice.c vdr-1.3.39+SourceCaps/dvbdevice.c
+--- vdr-1.3.39/dvbdevice.c	2006-01-14 16:57:36.000000000 +0100
++++ vdr-1.3.39+SourceCaps/dvbdevice.c	2006-01-21 13:50:24.444467464 +0100
+@@ -751,10 +751,17 @@
+ bool cDvbDevice::ProvidesSource(int Source) const
+ {
+   int type = Source & cSource::st_Mask;
+-  return type == cSource::stNone
+-      || type == cSource::stCable && frontendType == FE_QAM
+-      || type == cSource::stSat   && frontendType == FE_QPSK
+-      || type == cSource::stTerr  && frontendType == FE_OFDM;
++  if (Setup.SourceCapsSet && type == cSource::stSat && frontendType == FE_QPSK) {
++     for (int i = 0; i < MAXSOURCECAPS; i++)
++         if (sourceCaps[i] == Source)
++            return true;
++     return false;
++     }
++  else
++     return type == cSource::stNone				 
++    	 || type == cSource::stCable && frontendType == FE_QAM	 
++    	 || type == cSource::stSat   && frontendType == FE_QPSK  
++    	 || type == cSource::stTerr  && frontendType == FE_OFDM; 
+ }
+ 
+ bool cDvbDevice::ProvidesTransponder(const cChannel *Channel) const
+diff -rNu vdr-1.3.39/sources.c vdr-1.3.39+SourceCaps/sources.c
+--- vdr-1.3.39/sources.c	2004-12-26 12:58:52.000000000 +0100
++++ vdr-1.3.39+SourceCaps/sources.c	2006-01-21 13:50:24.445467312 +0100
+@@ -68,7 +68,7 @@
+      int pos = 0;
+      bool dot = false;
+      bool neg = false;
+-     while (*++s) {
++     while (*++s && !isblank(*s)) {
+            switch (toupper(*s)) {
+              case '0' ... '9': pos *= 10;
+                                pos += *s - '0';

Added: vdr/vdr/trunk/debian/patches/opt-48_pin.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-48_pin.dpatch	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/opt-48_pin.dpatch	2007-01-12 22:28:45 UTC (rev 3851)
@@ -0,0 +1,399 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## opt-48_pin.dpatch by Jörg Wendel (Horchi)
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Patch for the PIN plugin from version 0.1.5a of the Plugin
+## (vdr-1.4.3.diff-01)
+
+ at DPATCH@
+diff -urNad vdr-1.4.5~/device.c vdr-1.4.5/device.c
+--- vdr-1.4.5~/device.c	2007-01-07 18:17:18.000000000 +0100
++++ vdr-1.4.5/device.c	2007-01-07 18:17:22.000000000 +0100
+@@ -594,8 +594,10 @@
+      int n = CurrentChannel() + Direction;
+      int first = n;
+      cChannel *channel;
+-     while ((channel = Channels.GetByNumber(n, Direction)) != NULL) {
++     while ((channel = Channels.GetByNumber(n, Direction)) != NULL) 
++     {
+            // try only channels which are currently available
++        if (cStatus::MsgChannelProtected(0, channel) == false)      // PIN PATCH
+            if (PrimaryDevice()->ProvidesChannel(channel, Setup.PrimaryLimit) || PrimaryDevice()->CanReplay() && GetDevice(channel, 0))
+               break;
+            n = channel->Number() + Direction;
+@@ -617,6 +619,11 @@
+ 
+ eSetChannelResult cDevice::SetChannel(const cChannel *Channel, bool LiveView)
+ {
++  // I hope 'LiveView = false' indicates a channel switch for recording, // PIN PATCH
++  // I really don't know, but it works ...                               // PIN PATCH
++  if (LiveView && cStatus::MsgChannelProtected(this, Channel) == true)   // PIN PATCH
++     return scrNotAvailable;                                             // PIN PATCH
++   
+   if (LiveView)
+      StopReplay();
+ 
+diff -urNad vdr-1.4.5~/i18n.c vdr-1.4.5/i18n.c
+--- vdr-1.4.5~/i18n.c	2007-01-07 18:17:18.000000000 +0100
++++ vdr-1.4.5/i18n.c	2007-01-07 18:17:22.000000000 +0100
+@@ -7101,6 +7101,27 @@
+     "", // Dansk / Danish
+     "", // Èesky / Czech
+   },
++  { "Childlock",                        // PIN PATCH
++    "Kindersicherung",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Adulte",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
+   { NULL }
+   };
+ 
+diff -urNad vdr-1.4.5~/menu.c vdr-1.4.5/menu.c
+--- vdr-1.4.5~/menu.c	2007-01-07 18:17:18.000000000 +0100
++++ vdr-1.4.5/menu.c	2007-01-07 18:19:12.000000000 +0100
+@@ -722,6 +722,16 @@
+      Add(new cMenuEditBitItem( tr("VPS"),          &data.flags, tfVps));
+      Add(new cMenuEditIntItem( tr("Priority"),     &data.priority, 0, MAXPRIORITY));
+      Add(new cMenuEditIntItem( tr("Lifetime"),     &data.lifetime, 0, MAXLIFETIME));
++
++     // PIN PATCH
++     if (cOsd::pinValid || !data.fskProtection) Add(new cMenuEditBoolItem(tr("Child protection"),&data.fskProtection));
++     else { 
++        char* buf = 0;
++        asprintf(&buf, "%s\t%s", tr("Child protection"), data.fskProtection ? tr("yes") : tr("no")); 
++        Add(new cOsdItem(buf));
++        free(buf);
++        }
++
+      char* p = strrchr(data.file, '~');
+      if (p) {
+         p++;
+@@ -2342,6 +2352,9 @@
+ {
+   cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current());
+   if (ri) {
++     if (cStatus::MsgReplayProtected(GetRecording(ri), ri->Name(), base,
++                                     ri->IsDirectory()) == true)    // PIN PATCH
++        return osContinue;                                          // PIN PATCH
+      if (ri->IsDirectory())
+         Open();
+      else {
+@@ -3546,6 +3559,7 @@
+                          if (item) {
+                             cPlugin *p = cPluginManager::GetPlugin(item->PluginIndex());
+                             if (p) {
++                               if (!cStatus::MsgPluginProtected(p)) {  // PIN PATCH
+                                cOsdObject *menu = p->MainMenuAction();
+                                if (menu) {
+                                   if (menu->IsMenu())
+@@ -3557,6 +3571,7 @@
+                                   }
+                                }
+                             }
++                         }
+                          state = osEnd;
+                        }
+                        break;
+@@ -3720,6 +3735,7 @@
+   if (Direction) {
+      while (Channel) {
+            Channel = Direction > 0 ? Channels.Next(Channel) : Channels.Prev(Channel);
++	if (cStatus::MsgChannelProtected(0, Channel) == false)                     // PIN PATCH
+            if (Channel && !Channel->GroupSep() && (cDevice::PrimaryDevice()->ProvidesChannel(Channel, Setup.PrimaryLimit) || cDevice::GetDevice(Channel, 0)))
+               return Channel;
+            }
+@@ -4260,6 +4276,7 @@
+            for (int i = 0; i < MAXRECORDCONTROLS; i++) {
+                if (!RecordControls[i]) {
+                   RecordControls[i] = new cRecordControl(device, Timer, Pause);
++                  cStatus::MsgRecordingFile(RecordControls[i]->FileName());  // PIN PATCH
+                   return RecordControls[i]->Process(time(NULL));
+                   }
+                }
+diff -urNad vdr-1.4.5~/osd.c vdr-1.4.5/osd.c
+--- vdr-1.4.5~/osd.c	2007-01-07 18:17:18.000000000 +0100
++++ vdr-1.4.5/osd.c	2007-01-07 18:18:11.000000000 +0100
+@@ -597,6 +597,7 @@
+ 
+ int cOsd::isOpen = 0;
+ bool cOsd::niosd  = false;
++bool cOsd::pinValid = false;   // PIN PATCH
+ 
+ cOsd::cOsd(int Left, int Top)
+ {
+diff -urNad vdr-1.4.5~/osd.h vdr-1.4.5/osd.h
+--- vdr-1.4.5~/osd.h	2007-01-07 18:17:18.000000000 +0100
++++ vdr-1.4.5/osd.h	2007-01-07 18:17:49.000000000 +0100
+@@ -327,6 +327,7 @@
+   virtual void Flush(void);
+        ///< Actually commits all data to the OSD hardware.
+   tArea vidWin;
++  static bool pinValid;   // PIN PATCH
+   };
+ 
+ class cOsdProvider {
+diff -urNad vdr-1.4.5~/status.c vdr-1.4.5/status.c
+--- vdr-1.4.5~/status.c	2005-12-31 16:10:10.000000000 +0100
++++ vdr-1.4.5/status.c	2007-01-07 18:17:22.000000000 +0100
+@@ -112,3 +112,49 @@
+   for (cStatus *sm = statusMonitors.First(); sm; sm = statusMonitors.Next(sm))
+       sm->OsdProgramme(PresentTime, PresentTitle, PresentSubtitle, FollowingTime, FollowingTitle, FollowingSubtitle);
+ }
++
++bool cStatus::MsgChannelProtected(const cDevice* Device, const cChannel* Channel)     // PIN PATCH
++{
++  for (cStatus *sm = statusMonitors.First(); sm; sm = statusMonitors.Next(sm))
++      if (sm->ChannelProtected(Device, Channel) == true)
++ 	 return true;
++
++  return false;
++}
++
++bool cStatus::MsgReplayProtected(const cRecording* Recording, const char* Name, 
++                                 const char* Base, bool isDirectory)             // PIN PATCH
++{
++  for (cStatus *sm = statusMonitors.First(); sm; sm = statusMonitors.Next(sm))
++     if (sm->ReplayProtected(Recording, Name, Base, isDirectory) == true)
++       return true;
++
++  return false;
++}
++
++void cStatus::MsgRecordingFile(const char* FileName)
++{
++  for (cStatus *sm = statusMonitors.First(); sm; sm = statusMonitors.Next(sm))   // PIN PATCH
++      sm->RecordingFile(FileName);
++}
++
++void cStatus::MsgTimerCreation(cTimer* Timer, const cEvent *Event)
++{
++  for (cStatus *sm = statusMonitors.First(); sm; sm = statusMonitors.Next(sm))   // PIN PATCH
++     sm->TimerCreation(Timer, Event);
++}
++
++bool cStatus::MsgPluginProtected(cPlugin* Plugin)   // PIN PATCH
++{
++  for (cStatus *sm = statusMonitors.First(); sm; sm = statusMonitors.Next(sm))
++    if (sm->PluginProtected(Plugin) == true)
++      return true;
++
++  return false;
++}
++
++void cStatus::MsgUserAction(const eKeys key, const cOsdObject* Interact)         // PIN PATCH
++{
++  for (cStatus *sm = statusMonitors.First(); sm; sm = statusMonitors.Next(sm))
++     sm->UserAction(key, Interact);
++}
+diff -urNad vdr-1.4.5~/status.h vdr-1.4.5/status.h
+--- vdr-1.4.5~/status.h	2005-12-31 16:15:25.000000000 +0100
++++ vdr-1.4.5/status.h	2007-01-07 18:17:22.000000000 +0100
+@@ -14,6 +14,7 @@
+ #include "device.h"
+ #include "player.h"
+ #include "tools.h"
++#include "plugin.h"
+ 
+ class cStatus : public cListObject {
+ private:
+@@ -67,6 +68,22 @@
+                // The OSD displays the single line Text with the current channel information.
+   virtual void OsdProgramme(time_t PresentTime, const char *PresentTitle, const char *PresentSubtitle, time_t FollowingTime, const char *FollowingTitle, const char *FollowingSubtitle) {}
+                // The OSD displays the given programme information.
++  virtual bool ChannelProtected(const cDevice *Device, const cChannel* Channel)  { return false; }        // PIN PATCH
++               // Checks if a channel is protected.
++  virtual bool ReplayProtected(const cRecording* Recording, const char* Name, 
++                               const char* Base, bool isDirectory) { return false; }                      // PIN PATCH 
++               // Checks if a recording is protected.
++  virtual void RecordingFile(const char* FileName) {}                                                     // PIN PATCH
++               // The given DVB device has started recording to FileName. FileName is the name of the
++               // recording directory
++  virtual void TimerCreation(cTimer* Timer, const cEvent *Event) {}                                       // PIN PATCH
++               // The given timer is created
++  virtual bool PluginProtected(cPlugin* Plugin)  { return false; }                                        // PIN PATCH
++               // Checks if a plugin is protected.
++  virtual void UserAction(const eKeys key, const cOsdObject* Interact) {}                                 // PIN PATCH
++               // report user action
++
++
+ public:
+   cStatus(void);
+   virtual ~cStatus();
+@@ -86,6 +103,13 @@
+   static void MsgOsdTextItem(const char *Text,  bool Scroll = false);
+   static void MsgOsdChannel(const char *Text);
+   static void MsgOsdProgramme(time_t PresentTime, const char *PresentTitle, const char *PresentSubtitle, time_t FollowingTime, const char *FollowingTitle, const char *FollowingSubtitle);
++  static bool MsgChannelProtected(const cDevice* Device, const cChannel* Channel);                 // PIN PATCH
++  static bool MsgReplayProtected(const cRecording* Recording, const char* Name, 
++                                 const char* Base, bool isDirectory);                              // PIN PATCH
++  static void MsgRecordingFile(const char* FileName);                                              // PIN PATCH
++  static void MsgTimerCreation(cTimer* Timer, const cEvent *Event);                                // PIN PATCH
++  static bool MsgPluginProtected(cPlugin* Plugin);                                                 // PIN PATCH
++  static void MsgUserAction(const eKeys key, const cOsdObject* Interact);                          // PIN PATCH
+   };
+ 
+ #endif //__STATUS_H
+diff -urNad vdr-1.4.5~/timers.c vdr-1.4.5/timers.c
+--- vdr-1.4.5~/timers.c	2006-09-15 16:15:53.000000000 +0200
++++ vdr-1.4.5/timers.c	2007-01-07 18:17:22.000000000 +0100
+@@ -14,6 +14,7 @@
+ #include "i18n.h"
+ #include "libsi/si.h"
+ #include "remote.h"
++#include "status.h"             // PIN PATCH
+ 
+ // IMPORTANT NOTE: in the 'sscanf()' calls there is a blank after the '%d'
+ // format characters in order to allow any number of blanks after a numeric
+@@ -42,6 +43,7 @@
+      stop -= 2400;
+   priority = Pause ? Setup.PausePriority : Setup.DefaultPriority;
+   lifetime = Pause ? Setup.PauseLifetime : Setup.DefaultLifetime;
++  fskProtection = 0;                                        // PIN PATCH
+   *file = 0;
+   aux = NULL;
+   event = NULL;
+@@ -75,12 +77,14 @@
+      stop -= 2400;
+   priority = Setup.DefaultPriority;
+   lifetime = Setup.DefaultLifetime;
++  fskProtection = 0;                                        // PIN PATCH
+   *file = 0;
+   const char *Title = Event->Title();
+   if (!isempty(Title))
+      strn0cpy(file, Event->Title(), sizeof(file));
+   aux = NULL;
+   event = NULL; // let SetEvent() be called to get a log message
++  cStatus::MsgTimerCreation(this, Event);                   // PIN PATCH
+ }
+ 
+ cTimer::cTimer(const cTimer &Timer)
+@@ -113,6 +117,7 @@
+      stop         = Timer.stop;
+      priority     = Timer.priority;
+      lifetime     = Timer.lifetime;
++     fskProtection = Timer.fskProtection;    // PIN PATCH
+      strncpy(file, Timer.file, sizeof(file));
+      free(aux);
+      aux = Timer.aux ? strdup(Timer.aux) : NULL;
+@@ -288,6 +293,7 @@
+         result = false;
+         }
+      }
++  fskProtection = aux && strstr(aux, "<pin-plugin><protected>yes</protected></pin-plugin>");  // PIN PATCH
+   free(channelbuffer);
+   free(daybuffer);
+   free(filebuffer);
+@@ -597,6 +603,33 @@
+   Matches(); // refresh start and end time
+ }
+ 
++void cTimer::SetFskProtection(int aFlag)                 // PIN PATCH
++{ 
++   char* p;
++   char* tmp = 0;
++
++   fskProtection = aFlag;
++
++   if (fskProtection && (!aux || !strstr(aux, "<pin-plugin><protected>yes</protected></pin-plugin>")))
++   {
++      // add protection info to aux
++
++      if (aux) { tmp = strdup(aux); free(aux); }
++      asprintf(&aux,"%s<pin-plugin><protected>yes</protected></pin-plugin>", tmp ? tmp : "");
++   }
++   else if (!fskProtection && aux && (p = strstr(aux, "<pin-plugin><protected>yes</protected></pin-plugin>")))
++   {
++      // remove protection info to aux
++
++      asprintf(&tmp, "%.*s%s", p-aux, aux, p+strlen("<pin-plugin><protected>yes</protected></pin-plugin>"));
++      free(aux);
++      aux = strdup(tmp);
++   }
++
++   if (tmp) 
++      free(tmp);  
++}
++
+ // -- cTimers ----------------------------------------------------------------
+ 
+ cTimers Timers;
+diff -urNad vdr-1.4.5~/timers.h vdr-1.4.5/timers.h
+--- vdr-1.4.5~/timers.h	2006-09-04 19:07:39.000000000 +0200
++++ vdr-1.4.5/timers.h	2007-01-07 18:17:22.000000000 +0100
+@@ -37,6 +37,7 @@
+   int start;
+   int stop;
+   int priority;
++  int fskProtection;                                               // PIN PATCH
+   int lifetime;
+   char file[MaxFileName];
+   char *aux;
+@@ -58,6 +59,7 @@
+   int Start(void) const { return start; }
+   int Stop(void) const { return stop; }
+   int Priority(void) const { return priority; }
++  int FskProtection(void) const { return fskProtection; }          // PIN PATCH
+   int Lifetime(void) const { return lifetime; }
+   const char *File(void) const { return file; }
+   time_t FirstDay(void) const { return weekdays ? day : 0; }
+@@ -86,6 +88,7 @@
+   void SetInVpsMargin(bool InVpsMargin);
+   void SetPriority(int Priority);
+   void SetFlags(uint Flags);
++  void SetFskProtection(int aFlag);                                // PIN PATCH
+   void ClrFlags(uint Flags);
+   void InvFlags(uint Flags);
+   bool HasFlags(uint Flags) const;
+diff -urNad vdr-1.4.5~/vdr.c vdr-1.4.5/vdr.c
+--- vdr-1.4.5~/vdr.c	2007-01-07 18:17:18.000000000 +0100
++++ vdr-1.4.5/vdr.c	2007-01-07 18:19:59.000000000 +0100
+@@ -875,6 +875,7 @@
+         cOsdObject *Interact = Menu ? Menu : cControl::Control();
+         eKeys key = Interface->GetKey((!Interact || !Interact->NeedsFastResponse()) && time(NULL) - LastCamMenu > LASTCAMMENUTIMEOUT);
+         if (NORMALKEY(key) != kNone) {
++           cStatus::MsgUserAction(key, Interact);          // PIN PATCH
+            EITScanner.Activity();
+            LastActivity = time(NULL);
+            }
+@@ -940,10 +941,12 @@
+                      cControl::Control()->Hide();
+                   cPlugin *plugin = cPluginManager::GetPlugin(PluginName);
+                   if (plugin) {
++                  if (!cStatus::MsgPluginProtected(plugin)) {    // PIN PATCH
+                      Menu = plugin->MainMenuAction();
+                      if (Menu)
+                         Menu->Show();
+                      }
++                  }
+                   else
+                      esyslog("ERROR: unknown plugin '%s'", PluginName);
+                   }
+@@ -1147,9 +1150,12 @@
+              // Instant resume of the last viewed recording:
+              case kPlay:
+                   if (cReplayControl::LastReplayed()) {
++                     // PIN BUGFIX
++                     if (cStatus::MsgReplayProtected(0, cReplayControl::LastReplayed(), 0, false) == false) {
+                      cControl::Shutdown();
+                      cControl::Launch(new cReplayControl);
+                      }
++                     }
+                   break;
+              default:    break;
+              }


Property changes on: vdr/vdr/trunk/debian/patches/opt-48_pin.dpatch
___________________________________________________________________
Name: svn:executable
   + *

Added: vdr/vdr/trunk/debian/patches/opt-49_sharelnb.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-49_sharelnb.dpatch	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/opt-49_sharelnb.dpatch	2007-01-12 22:28:45 UTC (rev 3851)
@@ -0,0 +1,605 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## opt-31_sharelnb.dpatch by Matthias Lötzke <Matthias at Loetzke.de>
+## http://www.xn--ltzke-jua.de/dvb/VDR_LNB_sharing_patch/configurableLNBshare-VDR_1.4.3.patch
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Patch to share one sat connection for several cards.
+
+ at DPATCH@
+diff -urNad vdr-1.4.4~/config.c vdr-1.4.4/config.c
+--- vdr-1.4.4~/config.c	2006-11-04 19:42:37.000000000 +0100
++++ vdr-1.4.4/config.c	2006-11-04 19:42:37.000000000 +0100
+@@ -324,6 +324,12 @@
+   CurrentDolby = 0;
+   InitialChannel = 0;
+   InitialVolume = -1;
++
++//ML
++  VerboseLNBlog = 0;
++  for (int i = 0; i < MAXDEVICES; i++) CardUsesLNBnr[i] = i + 1;
++//ML-Ende
++ 
+   ShowRecDate = 1;
+   ShowRecTime = 1;
+   ShowRecLength = 0;
+@@ -559,7 +565,23 @@
+   else if (!strcasecmp(Name, "DvdTrayMode"))         DvdTrayMode        = atoi(Value);
+   else if (!strcasecmp(Name, "DvdSpeedLimit"))       DvdSpeedLimit      = atoi(Value);
+   else
+-     return false;
++
++//ML
++  if (!strcasecmp(Name, "VerboseLNBlog")) VerboseLNBlog = atoi(Value);
++  else {
++    char tmp[20];
++    bool result = false;
++    for (int i = 1; i <= MAXDEVICES; i++) {
++      sprintf(tmp, "Card%dusesLNBnr", i);
++      if (!strcasecmp(Name, tmp)) {
++        CardUsesLNBnr[i - 1] = atoi(Value);
++        result = true;
++      }
++    }  
++     return result;
++  }
++//ML-Ende
++
+   return true;
+ }
+ 
+@@ -648,6 +670,17 @@
+   Store("DvdTrayMode",        DvdTrayMode);
+   Store("DvdSpeedLimit",      DvdSpeedLimit);
+ 
++//ML
++  Store("VerboseLNBlog",       VerboseLNBlog);
++  char tmp[20];
++  if (cDevice::NumDevices() > 1) {
++     for (int i = 1; i <= cDevice::NumDevices(); i++) {
++        sprintf(tmp, "Card%dusesLNBnr", i);
++        Store(tmp, CardUsesLNBnr[i - 1]);
++     }
++  }
++//ML-Ende
++
+   Sort();
+ 
+   if (cConfig<cSetupLine>::Save()) {
+diff -urNad vdr-1.4.4~/config.h vdr-1.4.4/config.h
+--- vdr-1.4.4~/config.h	2006-11-04 19:42:37.000000000 +0100
++++ vdr-1.4.4/config.h	2006-11-04 19:42:37.000000000 +0100
+@@ -294,6 +294,15 @@
+   int DvdSpeedLimit;
+   int InitialChannel;
+   int InitialVolume;
++
++//ML
++  int VerboseLNBlog;
++  #define MAXDEVICES 16 // Since VDR 1.3.32 we can not #include "device.h" for MAXDEVICES anymore. 
++                        // With this workaround a warning will be shown during compilation if 
++                        // MAXDEVICES changes in device.h.
++  int CardUsesLNBnr[MAXDEVICES];
++//ML-Ende
++
+   int ShowRecDate, ShowRecTime, ShowRecLength, ShowProgressBar, MenuCmdPosition;
+   int __EndData__;
+   cSetup(void);
+diff -urNad vdr-1.4.4~/device.c vdr-1.4.4/device.c
+--- vdr-1.4.4~/device.c	2006-11-04 19:42:37.000000000 +0100
++++ vdr-1.4.4/device.c	2006-11-04 19:42:37.000000000 +0100
+@@ -19,6 +19,10 @@
+ #include "status.h"
+ #include "transfer.h"
+ 
++//ML
++#include "diseqc.h"
++//ML-Ende
++
+ // --- cPesAssembler ---------------------------------------------------------
+ 
+ class cPesAssembler {
+@@ -155,6 +159,12 @@
+ 
+   SetVideoFormat(Setup.VideoFormat);
+ 
++//ML
++  LNBstate = -1;
++  LNBnr = Setup.CardUsesLNBnr[cardIndex];
++  LNBsource = NULL;
++//ML-Ende
++
+   mute = false;
+   volume = Setup.CurrentVolume;
+ 
+@@ -216,6 +226,16 @@
+      useDevice |= (1 << n);
+ }
+ 
++//ML
++void cDevice::SetLNBnr(void)
++{
++  for (int i = 0; i < numDevices; i++) {
++    device[i]->LNBnr = Setup.CardUsesLNBnr[i];
++    isyslog("LNB-sharing: setting device %d to use LNB %d", i, device[i]->LNBnr);
++  }
++}
++//ML-Ende
++
+ int cDevice::NextCardIndex(int n)
+ {
+   if (n > 0) {
+@@ -275,6 +295,98 @@
+   return d;
+ }
+ 
++//ML
++cDevice *cDevice::GetBadDevice(const cChannel *Channel)
++{
++  if(!cSource::IsSat(Channel->Source())) return NULL;
++  if (Setup.DiSEqC) {
++    cDiseqc *diseqc;
++    diseqc = Diseqcs.Get(Channel->Source(), Channel->Frequency(), Channel->Polarization());
++
++    for (int i = 0; i < numDevices; i++) {
++      if (this != device[i] && device[i]->GetLNBnr() == LNBnr && device[i]->GetLNBsource() != (int*) diseqc) {
++        if (Setup.VerboseLNBlog) {
++          isyslog("LNB %d: Device check for channel %d on device %d. LNB or DiSEq conflict with device %d", LNBnr, Channel->Number(), this->DeviceNumber(), i);
++        }
++        return device[i];
++      }
++    }
++    if (Setup.VerboseLNBlog) { 
++      isyslog("LNB %d: Device check for for channel %d on device %d. OK", LNBnr, Channel->Number(), this->DeviceNumber());
++    }
++  } else {
++    char requiredState;
++    if (Channel->Frequency() >= Setup.LnbSLOF) {
++      requiredState = 1 ;
++    } else {
++      requiredState = 0;
++    }
++    if (Channel->Polarization() == 'v' || Channel->Polarization() == 'V') requiredState += 2;
++
++    for (int i = 0; i < numDevices; i++) {
++      if (this != device[i] && device[i]->GetLNBnr() == LNBnr && device[i]->GetLNBconf() != requiredState) {
++        if (Setup.VerboseLNBlog) {
++          isyslog("LNB %d: Device check for channel %d, LNBstate %d on device %d, current LNBstate %d. Conflict with device %d, LNBstate %d", LNBnr, Channel->Number(), requiredState, this->DeviceNumber(), LNBstate, i, device[i]->GetLNBconf());
++        }
++        return device[i];
++      }
++    }
++    if (Setup.VerboseLNBlog) { 
++      isyslog("LNB %d: Device check for channel %d, LNBstate %d on device %d, current LNBstate %d. No other devices affected", LNBnr, Channel->Number(), requiredState, this->DeviceNumber(), LNBstate);
++    }
++  }
++  return NULL;
++}
++
++int cDevice::GetMaxBadPriority(const cChannel *Channel)
++{                                
++  if(!cSource::IsSat(Channel->Source())) return -2;
++  bool PrimaryIsBad = false;
++  int maxBadPriority = -2;
++  if (Setup.DiSEqC) {
++    cDiseqc *diseqc;
++    diseqc = Diseqcs.Get(Channel->Source(), Channel->Frequency(), Channel->Polarization());
++
++    for (int i = 0; i < numDevices; i++) {
++      if (this != device[i] && device[i]->GetLNBnr() == LNBnr && device[i]->GetLNBsource() != (int*) diseqc) {
++        if (device[i]->Receiving() && device[i]->Priority() > maxBadPriority) {
++          maxBadPriority = device[i]->Priority();
++        }
++        if (device[i]->IsPrimaryDevice()) {
++            PrimaryIsBad = true;
++        }
++      }
++    }
++  } else {
++    char requiredState;
++    if (Channel->Frequency() >= Setup.LnbSLOF) {
++      requiredState = 1 ;
++    } else {
++      requiredState = 0;
++    }
++    if (Channel->Polarization() == 'v' || Channel->Polarization() == 'V') requiredState += 2;
++
++    for (int i = 0; i < numDevices; i++) {
++      if (this != device[i] && device[i]->GetLNBnr() == LNBnr && device[i]->GetLNBconf() != requiredState) {
++        if (device[i]->Receiving() && device[i]->Priority() > maxBadPriority) {
++          maxBadPriority = device[i]->Priority();
++        }
++        if (device[i]->IsPrimaryDevice()) {
++            PrimaryIsBad = true;
++        }
++      }
++    }
++  }
++  if (PrimaryIsBad && maxBadPriority == -2) {
++    maxBadPriority = -1;
++  }
++  if (Setup.VerboseLNBlog) { 
++    isyslog("LNB %d: Request for channel %d on device %d. MaxBadPriority is %d", LNBnr, Channel->Number(), this->DeviceNumber(), maxBadPriority);
++  }
++  return maxBadPriority;
++}
++//ML-Ende
++
+ cDevice *cDevice::GetDevice(int Index)
+ {
+   return (0 <= Index && Index < numDevices) ? device[Index] : NULL;
+@@ -284,6 +396,12 @@
+ {
+   cDevice *d = NULL;
+   uint Impact = 0xFFFFFFFF; // we're looking for a device with the least impact
++
++//ML
++  int badPriority;
++  uint imp2;
++//ML-Ende
++
+   for (int i = 0; i < numDevices; i++) {
+       bool ndr;
+       if (device[i]->ProvidesChannel(Channel, Priority, &ndr)) { // this device is basicly able to do the job
+@@ -301,7 +419,30 @@
+          imp <<= 8; imp |= min(max(device[i]->ProvidesCa(Channel), 0), 0xFF);      // use the device that provides the lowest number of conditional access methods
+          imp <<= 1; imp |= device[i]->IsPrimaryDevice();                           // avoid the primary device
+          imp <<= 1; imp |= device[i]->HasDecoder();                                // avoid full featured cards
+-         if (imp < Impact) {
++
++//ML
++         badPriority = device[i]->GetMaxBadPriority(Channel);
++         if (badPriority >= Priority || (badPriority == -1 && Priority < Setup.PrimaryLimit)) {
++            // channel is not available for the requested prioity
++            imp = 0xFFFFFFFF;
++         } else {
++            switch (badPriority) {
++               case -2: // not affected by LNB-sharing
++                  imp2 = 0;
++                  break;
++               case -1: // the primary device would need a channel switch
++				  imp += 1 <<  17;
++                  imp2 = 0xFFFFFFFF | 1 << 17;
++                  break;
++               default: // a device receiving with lower priority would need to be stopped
++                  imp += badPriority << 8;
++                  imp2 = 0xFFFFFFFF | badPriority << 8;
++                  break;
++            }
++         }
++         if (imp < Impact && imp2 < Impact) {
++//ML-Ende
++
+             // This device has less impact than any previous one, so we take it.
+             Impact = imp;
+             d = device[i];
+@@ -547,7 +688,11 @@
+ bool cDevice::ProvidesTransponderExclusively(const cChannel *Channel) const
+ {
+   for (int i = 0; i < numDevices; i++) {
+-      if (device[i] && device[i] != this && device[i]->ProvidesTransponder(Channel))
++
++//ML
++      if (device[i] && device[i] != this && device[i]->ProvidesTransponder(Channel) && device[i]->GetLNBnr() != LNBnr)
++//ML-Ende
++
+          return false;
+       }
+   return true;
+@@ -570,6 +715,26 @@
+ 
+ bool cDevice::SwitchChannel(const cChannel *Channel, bool LiveView)
+ {
++
++//ML
++  cDevice *tmpDevice;
++	if (this->GetMaxBadPriority(Channel) >= 0) {
++		Skins.Message(mtInfo, tr("Channel locked by LNB!"));
++		return false;
++	}
++	while ((tmpDevice = GetBadDevice(Channel)) != NULL) {
++		if (tmpDevice->IsPrimaryDevice() && LiveView)
++			tmpDevice->SwitchChannelForced(Channel, true);
++		else
++			tmpDevice->SwitchChannelForced(Channel, false);
++   	}
++    return SwitchChannelForced(Channel, LiveView);
++}
++
++bool cDevice::SwitchChannelForced(const cChannel *Channel, bool LiveView)
++//ML-Ende
++
++{
+   if (LiveView)
+      isyslog("switching to channel %d", Channel->Number());
+   for (int i = 3; i--;) {
+@@ -598,10 +763,13 @@
+      {
+            // try only channels which are currently available
+         if (cStatus::MsgChannelProtected(0, channel) == false)      // PIN PATCH
+-           if (PrimaryDevice()->ProvidesChannel(channel, Setup.PrimaryLimit) || PrimaryDevice()->CanReplay() && GetDevice(channel, 0))
+-              break;
+-           n = channel->Number() + Direction;
+-           }
++
++//ML
++	    if (PrimaryDevice()->GetMaxBadPriority(channel) < 0 && (PrimaryDevice()->ProvidesChannel(channel, Setup.PrimaryLimit) || PrimaryDevice()->CanReplay() && GetDevice(channel, 0)))       
++//ML-Ende
++
++	n = channel->Number() + Direction;
++     }
+      if (channel) {
+         int d = n - first;
+         if (abs(d) == 1)
+@@ -638,12 +806,40 @@
+ 
+   eSetChannelResult Result = scrOk;
+ 
++//ML
++  char requiredState;
++  if (Channel->Frequency() >= Setup.LnbSLOF) {
++    requiredState = 1;
++  } else {
++    requiredState = 0;
++  }
++  if (Channel->Polarization() == 'v' || Channel->Polarization() == 'V') requiredState += 2;
++  if (Setup.VerboseLNBlog) {
++    isyslog("LNB %d: Switching device %d to channel %d", LNBnr, this->DeviceNumber(), Channel->Number());
++  }
++//ML-Ende
++
+   // If this DVB card can't receive this channel, let's see if we can
+   // use the card that actually can receive it and transfer data from there:
+ 
+   if (NeedsTransferMode) {
+      cDevice *CaDevice = GetDevice(Channel, 0, &NeedsDetachReceivers);
+      if (CaDevice && CanReplay()) {
++
++//ML
++       if (CaDevice->GetLNBnr() == LNBnr) {
++         if (LNBstate != requiredState || (Setup.DiSEqC && LNBsource != (int*) Diseqcs.Get(Channel->Source(), Channel->Frequency(), Channel->Polarization())) ) {
++           if (IsPrimaryDevice()) {
++             SetChannelDevice(Channel, true);
++           } else {
++             SetChannelDevice(Channel, false);
++           }
++         LNBstate = requiredState;
++         LNBsource = (int*) Diseqcs.Get(Channel->Source(), Channel->Frequency(), Channel->Polarization());
++         }
++       }
++//ML-Ende
++
+         cStatus::MsgChannelSwitch(this, 0); // only report status if we are actually going to switch the channel
+         if (CaDevice->SetChannel(Channel, false) == scrOk) { // calling SetChannel() directly, not SwitchChannel()!
+            if (NeedsDetachReceivers)
+@@ -664,6 +860,12 @@
+         sectionHandler->SetStatus(false);
+         sectionHandler->SetChannel(NULL);
+         }
++
++//ML
++     LNBstate = requiredState;
++     LNBsource = (int*) Diseqcs.Get(Channel->Source(), Channel->Frequency(), Channel->Polarization());
++//ML-Ende
++
+      // Tell the ciHandler about the channel switch and add all PIDs of this
+      // channel to it, for possible later decryption:
+      if (ciHandler) {
+diff -urNad vdr-1.4.4~/device.h vdr-1.4.4/device.h
+--- vdr-1.4.4~/device.h	2006-11-04 19:42:37.000000000 +0100
++++ vdr-1.4.4/device.h	2006-11-04 19:44:36.000000000 +0100
+@@ -230,6 +230,13 @@
+   bool SwitchChannel(const cChannel *Channel, bool LiveView);
+          ///< Switches the device to the given Channel, initiating transfer mode
+          ///< if necessary.
++
++//ML
++  bool SwitchChannelForced(const cChannel *Channel, bool LiveView);
++         ///< Switches the device to the given channel, initiating transfer mode
++         ///< if necessary. Forces the switch without taking care of the LNB configuration.
++//ML-Ende
++
+   static bool SwitchChannel(int Direction);
+          ///< Switches the primary device to the next available channel in the given
+          ///< Direction (only the sign of Direction is evaluated, positive values
+@@ -546,6 +553,32 @@
+        ///< Detaches all receivers from this device for this pid.
+   void DetachAllReceivers(void);
+        ///< Detaches all receivers from this device.
++
++//ML
++private:
++  char LNBstate;  // Current frequency band and polarization of the DVB-tuner
++//  cDiseqc *LNBsource;  // can not #include "diseqc.h". A workaround follows:
++  int *LNBsource;  // [DiSEqC] DiSEqC-Source
++  int LNBnr;      // Number of LNB used
++public:
++  char GetLNBconf(void) { return LNBstate; }
++  int *GetLNBsource(void) { return LNBsource; }
++  int GetLNBnr(void) { return LNBnr; }
++  static void SetLNBnr(void);
++  cDevice *GetBadDevice(const cChannel *Channel);
++         ///< Returns NULL if there is no device which uses the same LNB or if
++         ///< all of those devices are tuned to the same frequency band and 
++         ///< polarization as of the requested channel.
++         ///< Otherwise returns the first device found.
++  int GetMaxBadPriority(const cChannel *Channel);
++         ///< Returns the highest priority of all receiving devices which use
++         ///< the same LNB and are tuned to a different frequency band or 
++         ///< polarization as of the requested channel.
++         ///< Returns -1 if there are no such devices, but the primary device 
++         ///< would be affected by switching to the requested channel.
++         ///< Returns -2 if there are no such devices and the primary device 
++         ///< would not be affected by switching to the requested channel.
++//ML-Ende
+   };
+ 
+ /// Derived cDevice classes that can receive channels will have to provide
+diff -urNad vdr-1.4.4~/eitscan.c vdr-1.4.4/eitscan.c
+--- vdr-1.4.4~/eitscan.c	2006-01-07 15:10:17.000000000 +0100
++++ vdr-1.4.4/eitscan.c	2006-11-04 19:42:37.000000000 +0100
+@@ -151,9 +151,11 @@
+                             if (Device->ProvidesTransponder(Channel)) {
+                                if (!Device->Receiving()) {
+                                   bool MaySwitchTransponder = Device->MaySwitchTransponder();
+-                                  if (MaySwitchTransponder || Device->ProvidesTransponderExclusively(Channel) && now - lastActivity > Setup.EPGScanTimeout * 3600) {
++//ML
++                                  if (MaySwitchTransponder && Device->GetMaxBadPriority(Channel) == -2 || Device->ProvidesTransponderExclusively(Channel) && Device->GetMaxBadPriority(Channel) <= -1 && now - lastActivity > Setup.EPGScanTimeout * 3600) {
+                                      if (!MaySwitchTransponder) {
+-                                        if (Device == cDevice::ActualDevice() && !currentChannel) {
++                                        if ((Device == cDevice::ActualDevice() || Device->GetMaxBadPriority(Channel) == -1) && !currentChannel) {
++//ML-Ende
+                                            cDevice::PrimaryDevice()->StopReplay(); // stop transfer mode
+                                            currentChannel = Device->CurrentChannel();
+                                            Skins.Message(mtInfo, tr("Starting EPG scan"));
+diff -urNad vdr-1.4.4~/i18n.c vdr-1.4.4/i18n.c
+--- vdr-1.4.4~/i18n.c	2006-11-04 19:42:37.000000000 +0100
++++ vdr-1.4.4/i18n.c	2006-11-04 19:42:37.000000000 +0100
+@@ -7122,6 +7122,76 @@
+     "",//TODO
+     "",//TODO
+   },
++
++//ML
++  { "Channel locked by LNB!",
++    "Kanal durch LNB gesperrt!",
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "Chaîne interdite par la LNB",
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++  },
++  { "Setup.LNB$DVB device %d uses LNB No.",
++    "DVB-Empfänger %d nutzt LNB Nr.",
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "La carte DVB %d utilise la LNB No.",
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++  },
++  { "Setup.LNB$Log LNB usage",
++    "LNB-Nutzung protokollieren",
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++  },
++//ML
++
+   { NULL }
+   };
+ 
+diff -urNad vdr-1.4.4~/menu.c vdr-1.4.4/menu.c
+--- vdr-1.4.4~/menu.c	2006-11-04 19:42:37.000000000 +0100
++++ vdr-1.4.4/menu.c	2006-11-04 19:42:37.000000000 +0100
+@@ -2861,6 +2861,23 @@
+ 
+   Clear();
+ 
++//ML
++  int numSatDevices = 0;
++  for (int i = 0; i < cDevice::NumDevices(); i++) {
++     	if (cDevice::GetDevice(i)->ProvidesSource(cSource::stSat)) numSatDevices++;
++  }     		
++  if (numSatDevices > 1) {
++  	 char tmp[30];
++     for (int i = 1; i <= cDevice::NumDevices(); i++) {
++     	if (cDevice::GetDevice(i - 1)->ProvidesSource(cSource::stSat)) {
++        	sprintf( tmp, tr("Setup.LNB$DVB device %d uses LNB No."), i);
++        	Add(new cMenuEditIntItem( tmp, &data.CardUsesLNBnr[i - 1], 1, numSatDevices ));
++        }
++     }
++   }
++  Add(new cMenuEditBoolItem(tr("Setup.LNB$Log LNB usage"), &data.VerboseLNBlog));
++//ML-Ende
++
+   Add(new cMenuEditBoolItem(tr("Setup.LNB$Use DiSEqC"),               &data.DiSEqC));
+   if (!data.DiSEqC) {
+      Add(new cMenuEditIntItem( tr("Setup.LNB$SLOF (MHz)"),               &data.LnbSLOF));
+@@ -2877,6 +2894,10 @@
+   int oldDiSEqC = data.DiSEqC;
+   eOSState state = cMenuSetupBase::ProcessKey(Key);
+ 
++//ML
++  if (Key == kOk) cDevice::SetLNBnr();
++//ML-Ende
++
+   if (Key != kNone && data.DiSEqC != oldDiSEqC)
+      Setup();
+   return state;
+@@ -3727,7 +3748,10 @@
+      while (Channel) {
+            Channel = Direction > 0 ? Channels.Next(Channel) : Channels.Prev(Channel);
+ 	if (cStatus::MsgChannelProtected(0, Channel) == false)                     // PIN PATCH
+-           if (Channel && !Channel->GroupSep() && (cDevice::PrimaryDevice()->ProvidesChannel(Channel, Setup.PrimaryLimit) || cDevice::GetDevice(Channel, 0)))
++
++//ML
++           if (Channel && !Channel->GroupSep() && ((cDevice::PrimaryDevice()->ProvidesChannel(Channel, Setup.PrimaryLimit) && cDevice::PrimaryDevice()->GetMaxBadPriority(Channel) < 0) || cDevice::GetDevice(Channel, 0) ) )
++//ML-Ende
+               return Channel;
+            }
+      }
+@@ -4253,6 +4277,21 @@
+      int Priority = Timer ? Timer->Priority() : Pause ? Setup.PausePriority : Setup.DefaultPriority;
+      cDevice *device = cDevice::GetDevice(channel, Priority, &NeedsDetachReceivers);
+      if (device) {
++
++//ML
++       cDevice *tmpDevice;
++       while ((tmpDevice = device->GetBadDevice(channel))) {
++         if (tmpDevice->Replaying() == false) {
++           Stop(tmpDevice);
++           if (tmpDevice->IsPrimaryDevice() )
++             tmpDevice->SwitchChannelForced(channel, true);
++           else
++             tmpDevice->SwitchChannelForced(channel, false);
++         } else
++		 tmpDevice->SwitchChannelForced(channel, false);
++	   }
++//ML-Ende
++
+         if (NeedsDetachReceivers) {
+            Stop(device);
+            if (device == cTransferControl::ReceiverDevice())

Added: vdr/vdr/trunk/debian/patches/patchtest
===================================================================
--- vdr/vdr/trunk/debian/patches/patchtest	2007-01-12 22:19:46 UTC (rev 3850)
+++ vdr/vdr/trunk/debian/patches/patchtest	2007-01-12 22:28:45 UTC (rev 3851)
@@ -0,0 +1,191 @@
+#!/bin/sh
+
+# Define some patch levels here: foo="patch1 patch2 ..."
+#
+standard="\
+    02_Makefile-CFGDIR \
+    03_cmdsubmenu \
+    04_newplugin \
+    06_default_svdrp_port_0 \
+    09_sort_options \
+    10_dd-record-option \
+    11_sortrecordings \
+    12_osdbase-maxitems \
+    14_cap-memsize \
+    15_dvbplayer \
+    16_channels.conf.terr-fix \
+    81_Make_config "
+multipatch="$standard \
+    opt-20_liemikuutio \
+    opt-24_jumpplay \
+    opt-27_subtitles-ttxtsubs \
+    opt-27-x_subtitles-ttxtsubs-volumebar-fix \
+    opt-30-x_analogtv \
+    opt-37_submenu \
+    opt-38_disableDoubleEpgEntrys \
+    opt-39_noepg \
+    opt-40_wareagle-icons \
+    opt-41-x_timer-info \
+    opt-42-x_extrecmenu \
+    opt-43-x_epgsearch \
+    opt-44_rotor \
+    opt-45_yaepg \
+    opt-46_dvdarchive \
+    opt-46_dmh-dvd-archive \
+    opt-46-x_dmh-dvd-archive-debian \
+    opt-47_sourcecaps \
+    opt-48_pin"
+testpatch="$standard \
+    opt-20_liemikuutio \
+    opt-24_jumpplay \
+    opt-27_subtitles-ttxtsubs \
+    opt-27-x_subtitles-ttxtsubs-volumebar-fix \
+    opt-30-x_analogtv \
+    opt-36_CutterQueue-AutoDelete \
+    opt-37_submenu \
+    opt-38_disableDoubleEpgEntrys \
+    opt-39_noepg \
+    opt-41-x_timer-info \
+    opt-42-x_extrecmenu \
+    opt-43-x_epgsearch \
+    opt-44_rotor \
+    opt-45_yaepg \
+    opt-46_dvdarchive \
+    opt-46_dmh-dvd-archive \
+    opt-46-x_dmh-dvd-archive-debian \
+    opt-48_pin \
+    opt-49_sharelnb"
+mustfail_patch="XX_patchtest-patch-error"
+mustfail_compile="XX_patchtest-compile-error"
+
+# List the patch levels to be tested:
+#
+patchLevels=(\
+    "standard $standard"\
+    "multipatch $multipatch"\
+    "testpatch $testpatch"\
+    "mustfail_patch $mustfail_patch"\
+    "mustfail_compile $mustfail_compile")
+
+currentDir=`pwd`
+
+testPatchLevel ()
+{
+    patchLevelName=$1
+    tempDir=/tmp/vdr.$$.tmp
+    mkdir -p $tempDir
+    cp -r . $tempDir/vdr
+    cd $tempDir/vdr
+    # don't use dpatch:
+    touch patch-stamp
+    Failed="false"
+    shift
+    while [ "$1" ]
+    do
+        if [ $SOLVE = "true" ] ; then
+            rm -rf ../vdr.orig
+            cp -r . ../vdr.orig
+        fi
+        chmod a+x debian/patches/$1.dpatch
+        debian/patches/$1.dpatch -patch >/tmp/patchtest_patch.log 2>&1
+        if [ $? -ne 0 ] ; then
+            echo "FAILED $patchLevelName at $1"
+            Failed="true"
+            break
+        fi
+        shift
+    done
+
+    if [ $Failed = "false" ] ; then
+        if [ $QUICK = "true" ] ; then
+            echo "    OK $patchLevelName"
+        else
+            fakeroot debian/rules binary >/tmp/patchtest_build.log 2>&1
+            if [ $? -ne 0 ] ; then
+                Failed="true"
+                echo "FAILED $patchLevelName - Build Error"
+            else
+                echo "    OK $patchLevelName"
+            fi
+        fi
+    fi
+    if [ $Failed = "true" -a $SOLVE = "true" ] ; then
+        cd ..
+        exit 1
+    fi
+    cd $currentDir
+    rm -rf $tempDir
+}
+
+listPatchLevels ()
+{
+    len=${#patchLevels[*]}
+    i=0
+    while [ $i -lt $len ]
+    do
+        patchset=${patchLevels[$i]}
+        isPatchLevelName="true"
+        for patch in $patchset
+        do
+            if [ "$isPatchLevelName" = "true" ] ; then
+                echo "[$patch] contains these patches:"
+            else
+                echo -n "$patch, "
+            fi
+            isPatchLevelName="false"
+        done
+        let i++
+        echo
+        echo
+    done
+}
+
+
+testPatchLevels ()
+{
+    len=${#patchLevels[*]}
+    i=0
+    while [ $i -lt $len ]
+    do
+        patchset=${patchLevels[$i]}
+        testPatchLevel $patchset
+        let i++
+    done
+}
+
+echo
+echo "Patch-Level-Test"
+echo "----------------"
+echo
+
+QUICK='false'
+SOLVE='false'
+
+case $1 in
+    --help)
+        echo "Usage: debian/patches/patchtest [ --help | --quick | --solve ]"
+        echo
+        echo "With the --quick option no compilation will be performed."
+        echo "Using the --solve option will stop the test on failure and open"
+        echo "a new shell where you can solve any problems."
+        echo
+        exit 0
+    ;;
+    --quick)
+        QUICK="true"
+    ;;
+    --solve)
+        QUICK="true"
+        SOLVE="true"
+    ;;
+esac
+
+if [ -d debian/patches ] ; then
+    listPatchLevels
+    echo
+    testPatchLevels
+else
+    echo "Could not find debian/patches"
+fi
+
+echo




More information about the pkg-vdr-dvb-changes mailing list