r57 - in vdr/vdr/trunk: . debian debian/lintian debian/patches debian/plugin-template debian/po

Thomas Schmidt pkg-vdr-dvb-changes@lists.alioth.debian.org
Wed, 23 Feb 2005 12:36:50 +0100


Author: tschmidt
Date: 2005-02-23 12:36:39 +0100 (Wed, 23 Feb 2005)
New Revision: 57

Added:
   vdr/vdr/trunk/debian/
   vdr/vdr/trunk/debian/R90.custom
   vdr/vdr/trunk/debian/README.Debian
   vdr/vdr/trunk/debian/S90.custom
   vdr/vdr/trunk/debian/changelog
   vdr/vdr/trunk/debian/commands-loader.sh
   vdr/vdr/trunk/debian/commands.custom.conf
   vdr/vdr/trunk/debian/compat
   vdr/vdr/trunk/debian/config-loader.sh
   vdr/vdr/trunk/debian/control
   vdr/vdr/trunk/debian/copyright
   vdr/vdr/trunk/debian/debianize-vdrplugin
   vdr/vdr/trunk/debian/debianize-vdrplugin.1
   vdr/vdr/trunk/debian/lintian/
   vdr/vdr/trunk/debian/lintian/vdr
   vdr/vdr/trunk/debian/lintian/vdr-dev
   vdr/vdr/trunk/debian/order.commands.conf
   vdr/vdr/trunk/debian/order.conf
   vdr/vdr/trunk/debian/order.reccmds.conf
   vdr/vdr/trunk/debian/patches/
   vdr/vdr/trunk/debian/patches/00list
   vdr/vdr/trunk/debian/patches/01_gcc3.4-FTBFS-fix.dpatch
   vdr/vdr/trunk/debian/patches/01_gcc4.0-FTBFS-fix.dpatch
   vdr/vdr/trunk/debian/patches/01_vdr_1.2.6-3.1.diff.gz.dpatch
   vdr/vdr/trunk/debian/patches/02_Makefile-CFGDIR.dpatch
   vdr/vdr/trunk/debian/patches/03_cmdsubmenu.dpatch
   vdr/vdr/trunk/debian/patches/04_newplugin.dpatch
   vdr/vdr/trunk/debian/patches/05_set_system_time_as_user.dpatch
   vdr/vdr/trunk/debian/patches/06_default_svdrp_port_0.dpatch
   vdr/vdr/trunk/debian/patches/07_not_as_root.dpatch
   vdr/vdr/trunk/debian/patches/08_security_CAN-2005-0071.dpatch
   vdr/vdr/trunk/debian/patches/opt-20_elchiaio4d+1.dpatch
   vdr/vdr/trunk/debian/patches/opt-21_ttxtsubs.dpatch
   vdr/vdr/trunk/debian/patches/opt-22_8bitcolor.dpatch
   vdr/vdr/trunk/debian/patches/opt-23_osdpip-0.0.3.dpatch
   vdr/vdr/trunk/debian/patches/opt-24_jumpplay-0.4.dpatch
   vdr/vdr/trunk/debian/patchlevel.sh
   vdr/vdr/trunk/debian/plugin-loader.sh
   vdr/vdr/trunk/debian/plugin-template/
   vdr/vdr/trunk/debian/plugin-template/README.Debian
   vdr/vdr/trunk/debian/plugin-template/changelog
   vdr/vdr/trunk/debian/plugin-template/compat
   vdr/vdr/trunk/debian/plugin-template/control
   vdr/vdr/trunk/debian/plugin-template/copyright
   vdr/vdr/trunk/debian/plugin-template/docs
   vdr/vdr/trunk/debian/plugin-template/install
   vdr/vdr/trunk/debian/plugin-template/links.ex
   vdr/vdr/trunk/debian/plugin-template/postinst.ex
   vdr/vdr/trunk/debian/plugin-template/postrm.ex
   vdr/vdr/trunk/debian/plugin-template/preinst.ex
   vdr/vdr/trunk/debian/plugin-template/prerm.ex
   vdr/vdr/trunk/debian/plugin-template/rules
   vdr/vdr/trunk/debian/plugin-template/watch.ex
   vdr/vdr/trunk/debian/po/
   vdr/vdr/trunk/debian/po/POTFILES.in
   vdr/vdr/trunk/debian/po/cs.po
   vdr/vdr/trunk/debian/po/de.po
   vdr/vdr/trunk/debian/po/fr.po
   vdr/vdr/trunk/debian/po/nl.po
   vdr/vdr/trunk/debian/po/templates.pot
   vdr/vdr/trunk/debian/reccmds.custom.conf
   vdr/vdr/trunk/debian/rules
   vdr/vdr/trunk/debian/runvdr
   vdr/vdr/trunk/debian/runvdr.8
   vdr/vdr/trunk/debian/vdr-daemon.install
   vdr/vdr/trunk/debian/vdr-daemon.links
   vdr/vdr/trunk/debian/vdr-daemon.postinst
   vdr/vdr/trunk/debian/vdr-daemon.prerm
   vdr/vdr/trunk/debian/vdr-dev.dirs
   vdr/vdr/trunk/debian/vdr-dev.docs
   vdr/vdr/trunk/debian/vdr-dev.install
   vdr/vdr/trunk/debian/vdr-dev.manpages
   vdr/vdr/trunk/debian/vdr-kbd.install
   vdr/vdr/trunk/debian/vdr-kbd.links
   vdr/vdr/trunk/debian/vdr-kbd.postinst
   vdr/vdr/trunk/debian/vdr-kbd.prerm
   vdr/vdr/trunk/debian/vdr-lirc.install
   vdr/vdr/trunk/debian/vdr-lirc.links
   vdr/vdr/trunk/debian/vdr-lirc.postinst
   vdr/vdr/trunk/debian/vdr-lirc.prerm
   vdr/vdr/trunk/debian/vdr-newplugin.1
   vdr/vdr/trunk/debian/vdr-plugin-examples.install
   vdr/vdr/trunk/debian/vdr-plugin-examples.links
   vdr/vdr/trunk/debian/vdr-plugin-sky.docs
   vdr/vdr/trunk/debian/vdr-plugin-sky.examples
   vdr/vdr/trunk/debian/vdr-plugin-sky.install
   vdr/vdr/trunk/debian/vdr-rcu.install
   vdr/vdr/trunk/debian/vdr-rcu.links
   vdr/vdr/trunk/debian/vdr-rcu.postinst
   vdr/vdr/trunk/debian/vdr-rcu.prerm
   vdr/vdr/trunk/debian/vdr-recordingaction
   vdr/vdr/trunk/debian/vdr-shutdown
   vdr/vdr/trunk/debian/vdr-shutdown-message
   vdr/vdr/trunk/debian/vdr-shutdown-wrapper.c
   vdr/vdr/trunk/debian/vdr.NEWS
   vdr/vdr/trunk/debian/vdr.config
   vdr/vdr/trunk/debian/vdr.default
   vdr/vdr/trunk/debian/vdr.dirs
   vdr/vdr/trunk/debian/vdr.docs
   vdr/vdr/trunk/debian/vdr.examples
   vdr/vdr/trunk/debian/vdr.init
   vdr/vdr/trunk/debian/vdr.install
   vdr/vdr/trunk/debian/vdr.links
   vdr/vdr/trunk/debian/vdr.manpages
   vdr/vdr/trunk/debian/vdr.menu
   vdr/vdr/trunk/debian/vdr.postinst
   vdr/vdr/trunk/debian/vdr.postrm
   vdr/vdr/trunk/debian/vdr.templates
   vdr/vdr/trunk/debian/watch
Log:
Load newtrunk into vdr/vdr/trunk.


Added: vdr/vdr/trunk/debian/R90.custom
===================================================================
--- vdr/vdr/trunk/debian/R90.custom	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/R90.custom	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,43 @@
+#
+# Custom VDR Recording Action Hook
+# ----------------------------------
+#
+# This is a custom Recording Action Hook. It gets called by vdr
+# before a recording starts, after a recording ended and after a
+# recording has been edited. It is maintained as a config file in the vdr
+# package. All other recording hooks get executed before this one! 
+#
+# If you want to create your own recording hook that may get executed
+# before any other hook, create it in /usr/share/vdr/recording-hooks or
+# link to this location. All hooks are called in their alphabetical
+# order and should follow this naming scheme: 
+#
+# R<XX>.<identifier>
+#
+# Where <XX> is a two digit number, that mainly specifies the execution order 
+# and <identifier> is a unique descriptor.
+#
+# Two parameters are passed:
+#
+# Parameter 1 can have the values "before", "after" and "edited", depending
+# on whether the recording hook is called before the recording starts,
+# after the recording ends or after the recording has been edited.
+#
+# Parameter 2 is the directory of the recording. Be aware, that this directory 
+# doesn't exist before the recording starts.
+#
+
+case $1 in
+    before)
+	# do here what ever you would like to do right BEFORE
+	# the recording $2 STARTS
+	;;
+    after)
+	# do here what ever you would like to do right AFTER
+	# the recording $2 ENDED
+        ;;
+    edited)
+	# do here what ever you would like to do right AFTER
+	# the recording $2 has been EDITED
+        ;;
+esac

Added: vdr/vdr/trunk/debian/README.Debian
===================================================================
--- vdr/vdr/trunk/debian/README.Debian	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/README.Debian	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,186 @@
+vdr for Debian
+--------------
+
+Comments to the Debian version:
+
+ - You need a DVB card and with a driver using the "Linux DVB API"
+   (http://www.linuxtv.org/developer/dvbapi.xml). The standard VDR 
+   (without special plugins) requires a DVB-Card with an integrated 
+   mpeg-decoder, a so called Full-Featured Card. (For example the 
+   Hauppauge Nexus, or a TechnoTrend FullFeatured 1.x)
+ - all the small scripts and tools distributed with the package are located in
+   /usr/lib/vdr/. You may use and modify them for you own purposes.
+ - if you want to use the vdr-initscript, edit /etc/default/vdr and change
+   ENABLED=0 to ENABLED=1, and the other Options in this file
+ - video-dir is moved to /var/lib/video see #234429 		
+ - cfg-dir was moved to /var/lib/vdr, to be FHS-compliant
+ - The selection of your favourite vdr-binary (vdr-daemon, vdr-kbd, vdr-lirc or 
+   vdr-rcu) is now handeled via update-alternatives, so if you have more than 
+   one of this packages installed, and are not happy with the default 
+   priorities, you can select the binary via "update-alternatives --config vdr"
+
+ -- Thomas Schmidt <thomas.schmidt@in.stud.tu-ilmenau.de>,  Tue, 28 Dec 2004 14:22:21 +0100
+
+
+Automatic Loading of Plugins
+----------------------------
+
+When starting vdr with "/etc/init.d/vdr start", for each plugin found in 
+/usr/lib/vdr/plugins the appropriate command line argument -P<plugin_name>
+will be created automatically. 
+
+If a file /var/lib/vdr/plugins/plugin.<plugin_name>.conf exists, it will be
+parsed for command line arguments for the specified plugin. This file may
+contain comments preceeded by a "#" and the command line arguments may also be
+distributed across several lines.
+
+ -- Tobias Grimm <tg@e-tobi.net>,  Sun, 23 May 2004 18:00:00 +0100
+
+
+Command-Hooks
+-------------
+
+VDR has the ability, to start external commands using the OSD menu. There are
+two types of external commands - normal commands and recording commands. Normal
+commands are shown under VDR's main menu entry "commands" while, recording
+commands are accessible only in VDR's recordings menu. While normal commands are
+executed without any parameters, recording commands will receive the directory
+of the selected recording as the first command line argument.
+
+In order to allow other packages (Addons) to install their own commands, the
+command files passed to vdr in /etc/init.d/vdr are generated out of the files
+commands.<descriptor>.conf and reccmds.<descriptor>.conf found in
+/usr/share/vdr/command-hooks/. <descriptor> normally should be the name of
+the package, that wants to add these commands to VDR. The order of the 
+commands can be definded in the files order.commands.conf and order.reccmds.conf
+in /etc/vdr/command-hooks/.
+
+If the author of a package wants the user to be able to customize the commands
+added to vdr, the command file should be installed to /etc/vdr/command-hooks/
+and only symlinked to /usr/share/vdr/command-hooks/.
+
+For a description of the command file syntax, refer to commands.conf and
+reccmds.conf in the vdr documention.
+
+Commands added by the user, should go to commands.custom.conf and
+reccmds.custom.conf in /etc/vdr/command-hooks/. These files contain also some
+examples.
+
+ -- Tobias Grimm <tg@e-tobi.net>,  Sun, 23 May 2004 18:00:00 +0100
+
+
+Recording-Hooks
+---------------
+
+VDR can execute an external command before a recording starts, after a
+recording ends and after a recording has been edited.
+In order to allow other packages to specify their own recording actions,
+all files in /usr/share/vdr/recording-hooks are executed one after another.
+If a file is not an executable or a link to an executable, it is executed as
+a shell script.
+
+Recording hooks are called in their alphabetical order and should follow this
+naming scheme: 
+
+R<XX>.<identifier>
+
+Where <XX> is a two digit number, that mainly specifies the execution order 
+and <identifier> is a unique descriptor.
+
+Two parameters are passed to each recording hook:
+
+Parameter 1 can have the values "before", "after" and "edited", depending
+on whether the recording hook is called before the recording starts,
+after the recording ends or after the recording has been edited.
+
+Parameter 2 is the directory of the recording. Be aware, that this directory 
+doesn't exist before the recording starts.
+
+If the author of a package wants the user to be able to customize a recording
+hook, it should be installed to /etc/vdr/recording-hooks/ and only symlinked
+to /usr/share/vdr/recording-hooks/.
+
+Custom user commands associated with the vdr package, can be added by the user
+to /etc/vdr/recording-hooks/R90.custom.
+
+ -- Tobias Grimm <tg@e-tobi.net>,  Sun, 23 May 2004 19:00:00 +0100
+
+
+Shutdown-Hooks
+---------------
+
+If you press the power key on your remote control, VDR executes a script 
+provided by the command line option -s. By default, this script will
+execute all files in /usr/share/vdr/command-hooks in their alphabetical order. 
+If a file in there is not executable, it is treated as a shell script. These
+so called "Shutdown Hooks" should follow this naming scheme:
+
+S<XX>.<identifier>
+
+Where <XX> is a two digit number, that mainly specifies the execution order 
+and <identifier> is a unique descriptor.
+
+All shutdown hooks will be passed the same parameters as the main shutdown
+script. I.e. the first parameter is the start time of the next timer. Please
+refer to the vdr documentation for the other parameters.
+
+After all shutdown hooks have been process, VDR will be terminated and the
+machine will be shut down.
+
+A shutdown hook may abort the shutdown process by exiting with an errorlevel
+unequal to 0. To provide the user with an OSD-message about the reason for
+aborting the shutdown, the shutdown hook may write an abort message to stdout
+like this:
+
+ABORT_MESSAGE=<message to display>
+
+If the shutdown should only be deferred (i.e. because some background process,
+is still active), the shutdown hook may write to stdout:
+
+TRY_AGAIN=<minutes to wait before next shutdown request>
+
+In this case, no further shutdown hooks will be processed and the shutdown will
+be invoked in TRY_AGAIN minutes again.
+
+To overwrite the command defined in /etc/default/vdr that will be executed to
+shutdown the machine after all shutdown hooks have been processed, a shutdown
+hook may write to stdout:
+
+SHUTDOWNCMD=<new shutdown command>
+
+Optional Patches
+----------------
+
+A lot of VDR enthusiasts have improved VDR by creating patches that fix
+existing problems or add new functionality. Some of these patches may not work
+for everyone, so we decided to make them optional. This means, that these
+patches are only included as dpatch files in the vdr source package, NOT in
+the binary packages. They are named opt-<nn>_<patch name>, where <nn> is a
+two-digit-number and <patch name> a unique identifier. To enable a patch, just
+uncomment it in debian/patches/00list and recompile vdr.
+
+Most of these optional patches modify the interfaces used by the plugins. This
+means, that the plugins become binary incompatible. If you activate/deactivate
+patches in the vdr package, all plugins must be recompiled with the new vdr-dev
+package! There is only one exception from this rule - patches named 
+opt-<nn>-x_<patch name> do not affect the plugin interfaces and can therefore 
+be enabled or disabled without the need to recompile the plugins.
+
+If you decide to compile your own patched vdr packages, you should set
+PLUGIN_CHECK_PATCHLEVEL="yes" in /etc/default/vdr. With this enabled, vdr
+will only load plugins, that have been compiled with the correct vdr patch. This
+checking is done by using a custom control field called "vdr-patchlevel". When
+compiling vdr with some optional patches enabled, these patches will be listed
+in this control field and added to vdr-dev as /usr/include/vdr/patchlevel.
+When compiling a plugin, this patchlevel file is added as the "vdr-patchlevel"
+control field to the plugins binary package. By comparing the "vdr-patchlevel"
+field of vdr and the plugin packages, the vdr package can decide whether to
+load a plugin or not.
+
+Keep in mind, that if you enable any optional patches, you can't use apt-get
+anymore on the official Debian repositories to update existing vdr or plugin
+packages or install additional plugins. You always have to compile the plugins
+yourself! The optional patches are mainly intended for people who would like to
+create their own customized vdr distribution.
+
+ -- Tobias Grimm <tg@e-tobi.net>,  Thu, 3 Jun 2004 02:20:00 +0100

Added: vdr/vdr/trunk/debian/S90.custom
===================================================================
--- vdr/vdr/trunk/debian/S90.custom	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/S90.custom	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,29 @@
+#
+# Custom VDR Shutdown Hook
+# -------------------------
+#
+# Here you can place any commands, you want to be executed when VDR wants
+# to shutdown.
+#
+# * To abort the shutdown, exit with an errorlevel <> 0. 
+# 
+# * If you want a message to be displayed on the OSD when aborting a shutdown,
+#   then write to stdout:
+#
+#   ABORT_MESSAGE=<message to display>
+#
+# * If you want to defer the shutdown, write to stdout:
+#
+#   TRY_AGAIN=<minutes to wait before next shutdown request>
+#
+# * To overwrite the command that will be executed to shutdown the machine 
+#   after all shutdown hooks have been processed, write to stdout:
+#
+#   SHUTDOWNCMD=<new shutdown command>
+#
+# i.e.:
+#
+# echo "ABORT_MESSAGE=\"I do not want to shutdown now!\"" ; exit 1
+#
+
+

Added: vdr/vdr/trunk/debian/changelog
===================================================================
--- vdr/vdr/trunk/debian/changelog	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/changelog	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,370 @@
+vdr (1.2.6-8) unstable; urgency=low
+
+  * Thomas Schmidt <tschmidt@debian.org>
+    - Removed patch which fixes the compilation with gcc-4.0 on 
+      amd64 as it causes vdr to crash, will have to investigate 
+      this further, before the patch can be re-added 
+      (closes: #295838)
+
+ -- Debian VDR Team <pkg-vdr-dvb-devel@lists.alioth.debian.org>  Sat, 19 Feb 2005 15:17:38 +0100
+
+vdr (1.2.6-7) unstable; urgency=low
+
+  * Thomas Schmidt <tschmidt@debian.org>
+    - This is the first upload of vdr, i can do by myself, i want 
+      to thank Andreas Müller (amu) and Christoph Martin (chrism) 
+      for their help with sponsoring previous uploads
+    - Only try to change capabilities when vdr is called by root 
+      (closes: #293042)
+    - Added patch from Andreas Jochens to fix the FTBFS on amd64
+      with gcc-4.0 (closes: #294041)
+    - Changed my email-address to the new debian one
+    - Make an entry in syslog when someone tries to shutdown vdr
+      while the automatic shutdown is disabled
+    
+ -- Debian VDR Team <pkg-vdr-dvb-devel@lists.alioth.debian.org>  Wed, 09 Feb 2005 12:41:49 +0100
+
+vdr (1.2.6-6) unstable; urgency=high
+
+  * Urgency high because it includes a fix for CAN-2005-0071
+  * Thomas Günther <tom@toms-cafe.de>
+    - new (optional) plugin check (with "vdr -V -P plugin")
+    - Extracted patchlevel code to patchlevel.sh 
+    - Installing patchlevel.sh into vdr-dev package
+  * Tobias Grimm <tg@e-tobi.net> 
+    - fixed small bug in vdr-recordingaction
+    - moved PLUGIN_DIR, PLUGIN_PREFIX, CFG_DIR, PLUGIN_CFG_DIR,
+      PLUGIN_ORDER_FILE, CMDHOOKSDIR, REC_CMD from the default file to 
+      the init script
+    - fixed bug in shutdown script (OSD messages have to be deferred until
+      the shutdown script is finished)
+    - removed PLUGIN_ORDER_FILE paramter, order.conf should always be in
+      PLUGIN_CFG_DIR
+    - set default location for epg.data to /var/cache/vdr (vdr -E)
+    - The default command to shutdown the system when the power-off-key of the
+      remote is pressed, can now be configured in /etc/default/vdr.
+    - When processing the shutdown hooks, no further hook scripts will be
+      processed, if one script requests to delay the shutdown.
+    - Extracted loading of VDR daemon config options to separate file for
+      later reuse by other start scripts
+    - Fixed warning message in generated commands.conf and reccmds.conf  
+  * Thomas Schmidt <thomas.schmidt@in.stud.tu-ilmenau.de>
+    - Do not run as user root anymore, the user vdr will be created
+      and the video-directory and config-files will be changed, so the
+      owner/group is vdr:vdr (closes: #287899)
+    - Added 07_not_as_root.dpatch - vdr exists when it should run as
+      user or with group-id root (adapted from Darren Salt's patch 
+      for vdr 1.3.x)
+    - Added 08_security_CAN-2005-0071.dpatch - do not overwrite 
+      existing files with the GRAB-Command anymore (CAN-2005-0071)
+    - Set default port for SVDRP to 0, users who run vdr from the 
+      commandline will have to enable it by using the --port option
+      (in the init-script SVDRP will still be enabled and on the default 
+      port 2001)
+    - Added vdr-shutdown.wrapper with owner/group root:vdr and mode 6750, 
+      which calls the normal vdr-shutdown-script so that the user vdr is 
+      able to run vdr's shutdown-hooks
+    - The automatic shutdown is now disabled by default, to enable it 
+      again you have to change ENABLE_SHUTDOWN=0 to 1 in /etc/default/vdr
+    - Changed package vdr to Architecture: any, because it now contains
+      a binary file
+    - Added patch from Ludwig Nussel to be able to syncronize the system-
+      time via DVB, even when vdr runs as user
+    - Build-depend on libcap-dev
+    - Package vdr: depend on adduser
+    - Remove some files under /var/lib/vdr and /var/cache/vdr in postrm 
+      on purge (closes: #287914)
+    - Added german (de.po) debconf-translation from Jens Nachtigall 
+      <nachtigall@web.de> (closes: #273643)
+    - Added a note to the package description and README.Debian that vdr
+      (without special plugins) requires a DVB-Card with an mpeg-decoder
+      (Closes: #287428)
+    - Improved runvdr-script: when no loaded dvb-modules were found, 
+      try to load the module dvb (could be an alias for the real 
+      dvb-module)
+    - Added XB-VDR-Patchlevel-field in debian/control to vdr-plugin-sky 
+      and vdr-plugin-examples
+    - Build-depend on dpatch (>= 2.0.9)
+    - Converted existing dpatch-files to the new short format
+    - Added newplugin-script as vdr-newplugin to vdr-dev, so 
+      plugin-developers can initialize a new plugin-directory without a 
+      normal vdr-source-tree
+    - Added debianize-vdrplugin-script and the plugin-template-dir from 
+      c't-vdr
+    - Added lintian-override to avoid the lintian-warnings for the
+      plugin-template-scripts
+    - Default VIDEO_DIR is now /var/lib/video.00, so new harddiscs can
+      be added very easy by mounting them to /var/lib/video.0{1,2,...}
+      (if the old directory /var/lib/video exists, create 
+      /var/lib/video.00 as symlink to the old directory, if it does
+      not exist, /var/lib/video will be a symlink to /var/lib/video.00)
+    - Removed unnecessary debconf-question about creating the dvb 
+      devices, they will now be created without any question when they
+      are not existing allready
+    - Removed libncurses5-dev from Build-Depends
+
+ -- Debian VDR Team <pkg-vdr-dvb-devel@lists.alioth.debian.org>  Wed, 19 Jan 2005 00:12:03 +0100
+
+vdr (1.2.6-5) unstable; urgency=low
+
+  * Tobias Grimm <tg@e-tobi.net> 
+    - fixed Bug in vdr-shutdown script - osd messages have to be send detached
+    - added patchlevel check in vdr.init - only plugins that have been compiled
+      with the same patch levels will be loaded, to avoid conflicts due to
+      binary incompatibility.
+    - removed dh_shlibdeps and $shlibs:Depends from binary independent target
+    - extracted common patch code from dpatch files
+    - added patchlevel generation
+    - added patchlevel checking when loading plugins - it's enabled in
+      /etc/default by setting PLUGIN_CHECK_PATCHLEVEL="yes"
+    - added ElchiAio4d as optional patch (see README.Debian)
+    - added ttxtsubs-patch as optional patch
+    - added 8-bit-color-patch as optional patch
+    - added osdpip-patch as optional patch
+    - added jumpplay-patch as optional patch
+    - an entry in the (commands|reccmds).order.conf can now be disabled by
+      prepending a "-", just like this is done in the plugins.order.conf too
+  * Thomas Schmidt <thomas.schmidt@in.stud.tu-ilmenau.de>
+    - It is not possible anymore to start more than one instance of vdr
+      with the init-script
+    - Changed runvdr-script as suggested by Nikolaus Regnat (Closes: #258412)
+    - Fix spelling error in vdr.postinst (Closes: #258615)
+    - Changed Maintainer to Debian VDR and DVB Packaging team
+      <pkg-vdr-dvb-devel@lists.alioth.debian.org>
+    - List Andreas Mueller <amu@tr.debian.net> as Uploader
+    - Added patch from Andreas Jochens <aj@andaco.de> to fix FTBFS with
+      gcc 3.4 (Closes: #262744)
+    - Changed $PLUGIN_CFG_DIR in /etc/default/vdr, to /etc/vdr/plugins 
+      (Closes: #264071)
+    - Changed package-description of vdr-plugin-examples a little bit
+
+ -- Debian VDR Team <pkg-vdr-dvb-devel@lists.alioth.debian.org>  Sun, 08 Aug 2004 19:48:33 +0200 
+
+vdr (1.2.6-4) unstable; urgency=low
+
+  * First release from the VDR and DVB Packaging team
+    (pkg-vdr-dvb-devel@lists.alioth.debian.org)
+
+  * Thomas Schmidt
+    - Acknowledge NMU (Closes: #238395)
+    - Use dpatch, so build-depend on dpatch
+    - Build-Depend on: dvb-dev | linux-kernel-headers
+    - Separate plugins from the vdr-package (new packages: 
+      vdr-plugin-examples and vdr-plugin-sky)
+    - Change architecture of package vdr to all - it does not 
+      contain any architecture-dependent files anymore
+    - Cleaned up some parts to avoid lintian warnings and errors
+    - Use makedev for device-generation in postinst, therefore 
+      depend on makedev
+    - Removed build-dep to g++
+    - Added LD_ASSUME_KERNEL=2.4 in runvdr, to be able to run vdr 
+      under 2.6 without problems
+    - New cfg-dir /var/lib/vdr, link static cfg-files from /etc/vdr to
+      /var/lib/vdr, install channels.conf in postinst to /var/lib/vdr,
+      move non-static cfg-files to /var/lib/vdr in postinst
+    - Add an option to vdr, to specify the cfg-dir at build-time,
+      and set this to /var/lib/vdr (Closes: Bug#233647)
+    - Selection of vdr-binary now handled by update-alternatives
+    - Changed runvdr, to quote plugin-options correct (Closes: Bug#239619)
+    - Applied patch from Emmanuel le Chevoir (Closes: Bug#238713)
+    - Updated debconf-translations:
+      + French (fr.po) by Emmanuel le Chevoir
+      + Czech (cs.po) by Miroslav Kure
+      + Dutch (nl.po) by Luk Claes
+    - Added myself as uploader
+    - Added correct watch-file
+    - Added manpage for runvdr
+
+  * Tobias Grimm <vdr@e-tobi.net>
+    - added automatic loading of plugins in init script from c't vdr
+      (see README.Debian)
+    - added dynamic generation of reccmds.conf and commands.conf from c't vdr
+      (see README.Debian)
+    - added recording hooks as used in c't vdr (see README.Debian)
+    - added cmd_submenus patch with improvements by Thomas Günther
+    - added shutdown hooks as used in c't vdr (see README.Debian)
+
+ -- Thomas Schmidt <thomas.schmidt@in.stud.tu-ilmenau.de>  Sat, 24 Apr 2004 12:04:41 +0200
+
+vdr (1.2.6-3.1) unstable; urgency=low
+
+  * Non-Maintainer-Upload during Bug-Squashing-Party.
+  * Applied patch by Lamont Jones to build all shared libraries
+    with -fPIC. (Closes: #238395)
+
+ -- Michael Banck <mbanck@debian.org>  Sun, 18 Apr 2004 13:49:48 +0200
+
+vdr (1.2.6-3) unstable; urgency=low
+
+  * Moved /video to /var/lib/video now we should FHS conform
+    Thx to Noel Koethe. (Closes: #234429)
+  * changed control to arch any/all for buildd.d.o 
+
+ -- Andreas Mueller <amu@tr.debian.net>  Sat, 13 Mar 2004 02:27:00 +0100
+    
+vdr (1.2.6-2) unstable; urgency=low
+
+  * Thx to Nikolaus Regnat
+  * Corrected runvdr script dvb module detection. (Closes: #233520)
+  * Switched to gettext-based debconf templates (Thx to Martin Quinson). (Closes: #233107)  
+  * Improved debconf question texts.
+  * Fixed vdr.postinst script so that channels.conf is no longer overwritten.
+    (Closes: #233646)
+  * Fixed bug in vdr.postinst script which prevented package upgrade.	
+  * Adapted debian/rules to use upstream make plugin/plugin-clean targets. (Closes: #233630)
+
+ -- Andreas Mueller <amu@tr.debian.net>  Wed, 18 Feb 2004 17:08:34 +0100
+
+vdr (1.2.6-1) unstable; urgency=low
+
+  * Thx to Nikolaus Regnat
+  * New upstream release.
+  * Corrected plugin installation. Plugin libs do now reside in
+    /usr/lib/vdr/plugins. (Closes: #227074)
+  * Install needed configuration files in /etc/vdr.
+  * Changed (in /etc/default/vdr) CFG_DIR="/etc/vdr". (Closes: #227084)
+  * Added debconf info about needed kernel-modules.
+  * Added debconf question to select dvb card type.
+  * Added debconf question to create /video filesystem.
+  * Added debconf question to create dvb device nodes.
+  * Declared ca.conf, diseqc.conf, keymacros.conf, sources.conf and
+    svdrphosts.conf as conffiles.
+  * Added lirc dependency to vdr-lirc.
+  * Removed loading of hello pluging (in /etc/default/vdr) as it is useless.
+  * Modified runvdr script to accept lsmod output of module-init-tools (kernel
+    2.6). (Closes: #227059)
+  * Used the --port=0 option (in /etc/default/vdr) to disable SVDRP port.
+  * Accepted various suggestion on packaging improvement (Closes: #227084)
+    
+ -- Andreas Mueller <amu@tr.debian.net>  Sat, 10 Jan 2004 15:25:27 +0100
+
+vdr (1.2.5-3) unstable; urgency=low
+
+  * moved plugins-dir to /usr/lib/vdr
+
+ -- Andreas Mueller <amu@tr.debian.net>  Mon,  21 Sep 2003 19:23:12 +0200
+
+vdr (1.2.5-2) unstable; urgency=low
+
+  * vdr_1.2.5-1.dsc: invalid 'Build-Depends' field produced by a broken
+    version of dpkg-dev (1.10.11). Now build with 1.10.13
+
+ -- Andreas Mueller <amu@tr.debian.net>  Tue,  18 Sep 2003 01:10:47 +0200
+
+
+vdr (1.2.5-1) unstable; urgency=low
+
+  * new upstream build
+  * Moved to Standards-Version: 3.6.1
+
+ -- Andreas Mueller <amu@tr.debian.net>  Tue,  17 Sep 2003 22:12:38 +0200
+
+
+vdr (1.2.2-1) unstable; urgency=low
+
+  * new upstream build
+    (closes: Bug#195951)
+
+ -- Andreas Mueller <amu@tr.debian.net>  Tue,  9 Sep 2003 11:27:00 +0200
+
+vdr (1.0.4-3) unstable; urgency=low
+
+  * some cosmetic things ( ex. autobuilder )
+  * added autobuilder support
+
+ -- Andreas Mueller <amu@tr.debian.net>  Mon,  10 Mar 2003 11:27:00 +0100
+
+vdr (1.0.4-2) unstable; urgency=low
+
+  * took package from Eduard/QA
+    (closes: Bug#134645)
+    (closes: Bug#158158)
+
+ -- Andreas Mueller <amu@tr.debian.net>  Sat,  4 Jan 2003 16:27:00 +0100
+
+vdr (1.0.4-1) unstable; urgency=low
+
+  * New upstream release
+
+ -- Eduard Bloch <blade@debian.org>  Sat,  3 Aug 2002 12:22:20 +0200
+
+vdr (1.0.0-1) unstable; urgency=medium
+
+  * New upstream (stable) release
+  * removed manpages hocus-pocus and forced to use new version to avoid
+    trashing of vdr.1. Closes: #142809
+  * removed kvdr references, it is broken anyways
+
+ -- Eduard Bloch <blade@debian.org>  Sun,  7 Apr 2002 23:43:41 +0200
+
+vdr (0.98+1.0.0pre5-1) unstable; urgency=high
+
+  * New upstream (pre)release, closes: #141035
+  * Urgency high, since the Woody version is already broken since the new
+    drivers entered it recently
+  * incompatible with kvdr, set Conflicts:
+  * Changed the build-system to DBS like
+  * Added the tools pack from Upstream's web location and the FORMATS file
+  * Not including the DVD patch, too unstable.
+
+ -- Eduard Bloch <blade@debian.org>  Wed,  3 Apr 2002 12:10:31 +0200
+
+vdr (0.98-2) unstable; urgency=medium
+
+  * Disabled SVDRP port as-default and noted in README.Debian.
+    Better secure than warned and less secure. Closes: #117193
+  * added more Build-Depends, closes: #123701
+  * now conflicting with previous kvdr version and recommending the new since
+    kvdr would break starting vdr-daemon without port specification.
+
+ -- Eduard Bloch <blade@debian.org>  Thu, 13 Dec 2001 00:58:01 +0100
+
+vdr (0.98-1) unstable; urgency=low
+
+  * New upstream release
+  * fixed spelling errors
+
+ -- Eduard Bloch <blade@debian.org>  Wed, 14 Nov 2001 09:56:49 +0100
+
+vdr (0.96-4) unstable; urgency=low
+
+  * improved Description, thanks to Joey and Alfie
+  * included README and other scripts, maybe usefull
+
+ -- Eduard Bloch <blade@debian.org>  Thu, 11 Oct 2001 12:56:42 +0200
+
+vdr (0.96-3) unstable; urgency=high
+
+  * all versions except of -daemon disable the control port by default
+    (possible security hole). Debconf warning for -daemon.
+  * package splited
+  * building additional vdr-daemon binary, needed for kvdr
+  * fixed postinst files, there were too much copy&paste work :(
+
+ -- Eduard Bloch <blade@debian.org>  Mon,  8 Oct 2001 13:21:31 +0200
+
+vdr (0.96-2) unstable; urgency=low
+
+  * enabled DVD support after helping Brian to fix libdvdread packages
+
+ -- Eduard Bloch <blade@debian.org>  Sun,  7 Oct 2001 16:27:53 +0200
+
+vdr (0.96-1) unstable; urgency=low
+
+  * New upstream release
+  * removed upx stuff
+  * no DVD support until the libdvdread2 package is ready
+
+ -- Eduard Bloch <blade@debian.org>  Tue,  2 Oct 2001 02:24:51 +0200
+
+vdr (0.95-1) unstable; urgency=low
+
+  * Initial Release, closes: #113106
+  * Made a little hack to create the channel.conf template from Debian examples
+
+ -- Eduard Bloch <blade@debian.org>  Sat, 22 Sep 2001 03:16:11 +0200
+
+Local variables:
+mode: debian-changelog
+End:
+

Added: vdr/vdr/trunk/debian/commands-loader.sh
===================================================================
--- vdr/vdr/trunk/debian/commands-loader.sh	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/commands-loader.sh	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,61 @@
+#
+# This file is called by /etc/init.d/vdr
+#
+
+writewarning ()
+{
+echo -e \
+"#\n"\
+"# This file is automatically generated by the vdr init-script. You can\n"\
+"# define custom commands in /etc/vdr/command-hooks/$1.custom conf.\n"\
+"# (see /usr/share/doc/vdr/README.Debian.gz)\n"\
+"#\n\n\n"
+}
+
+# merges single <cmdtype>.<name>.conf files into one <cmdtype>.conf using
+# the order defined in order.<cmdtype>.conf
+mergecommands ()
+{
+    local cmd
+    local cmds
+    local cmdsorder
+    local line
+    local cmdtype
+    local cmdfile
+    local ordered_cmds
+    
+    cmdtype=$1
+    cmdfile="/var/cache/vdr/$cmdtype.conf"
+
+    writewarning $cmdtype > "$cmdfile"
+
+    cmdsorder=( `cat /etc/vdr/command-hooks/order.$cmdtype.conf | sed "s/#.*$//"` )
+    cmds=( `find $CMDHOOKSDIR -maxdepth 1 -name "$cmdtype.*.conf" -printf "%f \n" | sed "s/$cmdtype\.\(.\+\)\.conf/\1/g"` )
+    
+    # first the ordered commands:
+    for cmd in ${cmdsorder[@]}; do
+        for (( line=0 ; line<${#cmds[@]} ; line++ )); do
+	    if [ "$cmd" == "-${cmds[$line]}" ]; then
+		unset cmds[$line]
+		cmds=( "${cmds[@]}" )
+		break
+	    fi
+	    if [ "$cmd" == "${cmds[$line]}" ]; then
+                ordered_cmds=( "${ordered_cmds[@]}" "${cmds[$line]}" )
+                unset cmds[$line]
+		cmds=( "${cmds[@]}" )
+		break
+            fi
+        done
+    done
+    # then the remaining unordered commands:
+    ordered_cmds=( "${ordered_cmds[@]}" "${cmds[@]}" )
+
+    # concatenate all commands
+    for cmd in ${ordered_cmds[@]}; do
+	if [ "$cmd" != "" ]; then
+	    cat "$CMDHOOKSDIR/$cmdtype.$cmd.conf" >> "$cmdfile"
+	    echo "" >> "$cmdfile"
+	fi
+    done 
+}

Added: vdr/vdr/trunk/debian/commands.custom.conf
===================================================================
--- vdr/vdr/trunk/debian/commands.custom.conf	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/commands.custom.conf	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,30 @@
+#
+# This is an example file for defining external commands, that will be 
+# accessable via VDR's OSD menu.
+# The commands will be executed under the same user id that vdr is running 
+# with, so take care if your are running vdr as root!
+# 
+# The format of a command entry is:  <title> : <command>
+# <title> is the menu text shown on the OSD and <command> is the command to
+# be executed. Everything that <command> writes to stdout will be displayed
+# on the OSD. i.e.:
+#
+# Open fortune cookie: /usr/games/fortune
+#
+# If you uncomment the line above and restart vdr, you will have a new 
+# command menu entry, called "Open fortune cookie", that will show you a 
+# random epigram. ( you may need an "apt-get install fortune" first! )
+#
+# If you are using the reccmd-patch, you can even divide your commands into
+# submenus. To do so, preceed all sub menu items with a "-". i.e.:
+# 
+# Fortune Cookies ... : echo "sub menu, no command"
+# -Long Dictum        : /usr/games/fortune -l
+# -Short Apothegms    : /usr/games/fortune -s
+# -Special Topics ... : echo "sub-sub menu, no command"
+# --Literature        : /usr/games/fortune literature
+# --Riddles           : /usr/games/fortune riddles
+#
+# Again, just uncomment the above lines and restart vdr to see for your self,
+# how this looks like on the OSD.
+#

Added: vdr/vdr/trunk/debian/compat
===================================================================
--- vdr/vdr/trunk/debian/compat	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/compat	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1 @@
+4

Added: vdr/vdr/trunk/debian/config-loader.sh
===================================================================
--- vdr/vdr/trunk/debian/config-loader.sh	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/config-loader.sh	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,53 @@
+#
+# This file is called by /etc/init.d/vdr
+#
+
+#
+# Defaults - don't touch, edit options for the VDR daemon in
+# /etc/default/vdr !!!
+#
+
+# Config-Directory
+CFG_DIR="/var/lib/vdr"
+
+# Plugin-Directory
+PLUGIN_DIR="/usr/lib/vdr/plugins"
+
+# Plugin Config-Directory
+PLUGIN_CFG_DIR="/etc/vdr/plugins"
+
+# Plugin prefix
+PLUGIN_PREFIX="libvdr-"
+
+# Command-Hooks Directory
+CMDHOOKSDIR="/usr/share/vdr/command-hooks"
+
+# Commmand executed on start, stop and editing of a recording
+REC_CMD=/usr/lib/vdr/vdr-recordingaction
+
+# Commmand executed by vdr to shutdown the system
+SHUTDOWNCMD="/etc/init.d/vdr stop ; sleep 1 ; /sbin/shutdown -h now"
+
+# EPG data file
+EPG_FILE=/var/cache/vdr/epg.data
+
+# Username under which vdr will run (Note: the user root is not 
+# allowed to run vdr, vdr will abort when you try to start it as 
+# root or with "-u root")
+USER=vdr
+
+# Groupname under which vdr will run (Note: the group root is not 
+# allowed to run vdr, vdr will abort when you try to start it with
+# group root or with "-g root")
+GROUP=vdr
+
+# Default port for SVDRP
+SVDRP_PORT=2001
+
+# Enable / Disable vdr daemon
+ENABLED=0
+
+# Enable / Disable automatic shutdown
+ENABLE_SHUTDOWN=0
+
+test -f /etc/default/vdr && . /etc/default/vdr

Added: vdr/vdr/trunk/debian/control
===================================================================
--- vdr/vdr/trunk/debian/control	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/control	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,114 @@
+Source: vdr
+Section: misc
+Priority: extra
+Maintainer: Debian VDR Team <pkg-vdr-dvb-devel@lists.alioth.debian.org>
+Uploaders: Thomas Schmidt <tschmidt@debian.org>, Andreas Mueller <amu@tr.debian.net> 
+Build-Depends: debhelper (>= 4.1.16), dvb-dev (>= 1.0.0) | linux-kernel-headers (>=2.5.999-test7-bk-6), libjpeg62-dev, dpatch (>= 2.0.9), libcap-dev
+Standards-Version: 3.6.1
+
+Package: vdr
+Architecture: any
+Depends: ${misc:Depends}, vdr-kbd | vdr-lirc | vdr-rcu | vdr-daemon, makedev (>=2.3.1-66), adduser
+Description: Video Disk Recorder for DVB cards
+ Video Disk Recorder (VDR) is a digital sat-receiver program using
+ Linux and DVB technologies. It allows one to record MPEG2 streams,
+ as well as output the stream to TV. It is also possible to watch DVDs
+ (hardware accelerated) with some comfort and use a IR remote control.
+ .
+ This package contains files shared by different VDR versions and
+ frontends.
+ .
+ NOTE: You should install compatible DVB drivers before using these
+ programs. Also the standard VDR (without special plugins) requires 
+ a DVB-Card with an integrated mpeg-decoder, a so called 
+ Full-Featured Card.
+XB-VDR-Patchlevel: ${patchlevel}
+
+Package: vdr-dev
+Architecture:  all
+Description: Video Disk Recorder for DVB cards
+ Video Disk Recorder (VDR) is a digital sat-receiver program using
+ Linux and DVB technologies. It allows one to record MPEG2 streams,
+ as well as output the stream to TV. It is also possible to watch DVDs
+ (hardware accelerated) with some comfort and use a IR remote control.
+ .
+ This package contains the header files of VDR.
+ You need this package to be able to build vdr-plugins!
+
+Package: vdr-kbd
+Architecture: any 
+Depends: ${shlibs:Depends}, vdr (= ${Source-Version})
+Description: Video Disk Recorder for DVB cards with keyboard control
+ Video Disk Recorder (VDR) is a digital sat-receiver program using
+ Linux and DVB-technologies. It allows one to record MPEG2 streams,
+ as well as output the stream to TV.
+ .
+ This package contains the vdr-kbd program which is controlled via the
+ PC keyboard. There are also vdr-rcu and vdr-lirc packages which
+ contain another VDR versions using RCU or infrared remote control.
+
+Package: vdr-lirc
+Architecture: any 
+Depends: ${shlibs:Depends}, vdr (= ${Source-Version}), lirc
+Description: Video Disk Recorder for DVB cards with IR remote control
+ Video Disk Recorder (VDR) is a digital sat-receiver program using
+ Linux and DVB technologies. It allows one to record MPEG2 streams,
+ as well as output the stream to TV.
+ .
+ This package contains the vdr-lirc program which is controlled via a
+ IR remote control. There are also vdr-kbd and vdr-rcu packages which
+ contain another VDR versions using keyboard/rcu control.
+
+Package: vdr-rcu
+Architecture: any 
+Depends: ${shlibs:Depends}, vdr (= ${Source-Version})
+Description: Video Disk Recorder for DVB cards with RCU control
+ Video Disk Recorder (VDR) is a digital sat-receiver program using
+ Linux and DVB technologies. It allows one to record MPEG2 streams,
+ as well as output the stream to TV.
+ .
+ This package contains the vdr-kbd program which is controlled via the
+ the "Remote Control Unit". There are also vdr-kbd and vdr-lirc
+ packages which contain another VDR versions using PC keyboard or
+ infrared remote control.
+
+Package: vdr-daemon
+Architecture: any 
+Depends: ${shlibs:Depends}, vdr (= ${Source-Version}), debconf
+Description: Server version of Video Disk Recorder for DVB cards
+ Video Disk Recorder (VDR) is a digital sat-receiver program using
+ Linux and DVB technologies. It allows one to record MPEG2 streams,
+ as well as output the stream to TV.
+ .
+ This package contains a VDR version without any direct control
+ capabilities.  Instead, it opens a control port and other programs
+ like kvdr (from the kvdr package) can connect to the vdr-daemon and
+ use it.
+
+Package: vdr-plugin-sky
+Architecture: any 
+Depends: ${shlibs:Depends}, vdr (= ${Source-Version})
+Description: Plugin for using a Sky Digibox with vdr
+ Video Disk Recorder (VDR) is a digital sat-receiver program using
+ Linux and DVB technologies. It allows one to record MPEG2 streams,
+ as well as output the stream to TV.
+ .
+ This package contains the sky-plugin, wich allows you to connect 
+ the analog a/v output of a Sky Digibox to VDR, so that you can 
+ enjoy the full recording flexibility of VDR with your Sky 
+ subscription. 
+XB-VDR-Patchlevel: ${patchlevel}
+
+Package: vdr-plugin-examples
+Architecture: any 
+Depends: ${shlibs:Depends}, vdr (= ${Source-Version})
+Description: Plugins for vdr to show some possible features
+ Video Disk Recorder (VDR) is a digital sat-receiver program using
+ Linux and DVB technologies. It allows one to record MPEG2 streams,
+ as well as output the stream to TV.
+ .
+ This package contains the example-plugins hello, osddemo and status
+ from the vdr-source. These plugins do not have useful features,
+ they only demonstrate how vdr-plugins work and what is possible to
+ do with them.
+XB-VDR-Patchlevel: ${patchlevel}

Added: vdr/vdr/trunk/debian/copyright
===================================================================
--- vdr/vdr/trunk/debian/copyright	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/copyright	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,43 @@
+This package was debianized by Andreas Mueller <amu@debian.org> on
+Sat, 10 Jan 2004 15:25:27 +0100.
+
+It was downloaded from http://www.cadsoft.de/people/kls/vdr/download.htm
+
+Upstream Author: Klaus Schmidinger <kls@cadsoft.de> and others
+
+Patch Authors:
+  ElchiAIO4 - Rolf Ahrenberg, originally written by Andy Grobb
+              (see HISTORY-ElchiAIO for all contributors)
+	      Thomas Günther <tom@toms-cafe.de> ( frames fix )
+              Gerhard Steiner ( black frame fix )
+
+  ttxtsubs  - Ragnar Sundblad <ragge@nada.kth.se>
+              http://www.nada.kth.se/~ragge/vdr/ttxtsubs/
+
+  osdpip    -  Sascha Volkenandt <sascha@akv-soft.de>
+
+  8bitcolor -  Andreas Regel <andreas.regel@gmx.de>
+
+  jumpplay  -  Torsten Kunkel <vdr@tkunkel.de> (initial version)
+               Thomas Günther <tom@toms-cafe.de> (actual version)
+
+
+Copyright:
+
+   This package is free software; you can redistribute it and/or modify
+   it under the terms of the GNU General Public License as published by
+   the Free Software Foundation; version 2 dated June, 1991.
+
+   This package is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+   GNU General Public License for more details.
+
+   You should have received a copy of the GNU General Public License
+   along with this package; if not, write to the Free Software
+   Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+   02111-1307, USA.
+
+On Debian systems, the complete text of the GNU General
+Public License can be found in `/usr/share/common-licenses/GPL'.
+

Added: vdr/vdr/trunk/debian/debianize-vdrplugin
===================================================================
--- vdr/vdr/trunk/debian/debianize-vdrplugin	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/debianize-vdrplugin	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+if [ ! -x /usr/bin/dh_make ] ; then
+    echo "If you want to use this script, please install the package dh-make!"
+    exit 1
+fi
+
+VDRVERSION=`dpkg -s vdr-dev | awk '/Version/ { print $2 }'`
+
+/usr/bin/dh_make -t /usr/share/vdr-dev/plugin-template -d -s && \
+perl -pi -e "s/#VDRVERSION#/$VDRVERSION/g" debian/control

Added: vdr/vdr/trunk/debian/debianize-vdrplugin.1
===================================================================
--- vdr/vdr/trunk/debian/debianize-vdrplugin.1	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/debianize-vdrplugin.1	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,33 @@
+.\" Man page for debianize-vdrplugin 
+
+.TH debianize-vdrplugin 1
+.SH NAME
+debianize-vdrplugin
+.SH DESCRIPTION
+.B debianize-vdrplugin
+can be used to add a working debian-directory to the source-directory 
+of a vdr-plugin.
+
+.B debianize-vdrplugin
+should be called directly from a plugin-source-directory.
+
+After
+.B debianize-vdrplugin 
+was run, you should check the files inside the debian-directory if they 
+fit your needs, and modify them accordingly.
+
+The next step to get a debian-package for the vdr-plugin is to call
+.B dpkg-buildpackage
+(You need the package 
+.B dpkg-dev
+for this tool.)
+
+.SH AUTHOR
+This man-page has been written by Thomas Schmidt <thomas@thsnet.de>
+.PP
+Permission is granted to copy, distribute and/or modify this document under
+the terms of the GNU General Public License, Version 2 any
+later version published by the Free Software Foundation.
+.PP
+On Debian systems, the complete text of the GNU General Public
+License can be found in /usr/share/common\-licenses/GPL.

Added: vdr/vdr/trunk/debian/lintian/vdr
===================================================================
--- vdr/vdr/trunk/debian/lintian/vdr	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/lintian/vdr	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,2 @@
+vdr: package-contains-upstream-install-documentation usr/share/doc/vdr/INSTALL.gz
+vdr: menu-command-not-in-package /usr/lib/menu/vdr:2 /usr/bin/vdr

Added: vdr/vdr/trunk/debian/lintian/vdr-dev
===================================================================
--- vdr/vdr/trunk/debian/lintian/vdr-dev	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/lintian/vdr-dev	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,5 @@
+vdr-dev: script-not-executable ./usr/share/vdr-dev/plugin-template/postinst.ex
+vdr-dev: script-not-executable ./usr/share/vdr-dev/plugin-template/postrm.ex
+vdr-dev: script-not-executable ./usr/share/vdr-dev/plugin-template/preinst.ex
+vdr-dev: script-not-executable ./usr/share/vdr-dev/plugin-template/prerm.ex
+vdr-dev: script-not-executable ./usr/share/vdr-dev/plugin-template/rules

Added: vdr/vdr/trunk/debian/order.commands.conf
===================================================================
--- vdr/vdr/trunk/debian/order.commands.conf	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/order.commands.conf	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,10 @@
+#
+# If you like a fixed order in your commands menu, place the command base names
+# (commands.<basename>.conf) here.
+#
+# If you want a certain command file not to be loaded automatically at 
+# vdr-startup, then you can simply write "-basename" in this file.
+
+firstcommand
+secondcommand
+-thirdcommand

Added: vdr/vdr/trunk/debian/order.conf
===================================================================
--- vdr/vdr/trunk/debian/order.conf	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/order.conf	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,16 @@
+#
+# If you like a fixed plugin order in your menu place the plugin base names
+# here. Remember that the first entry a plugin may get, starts at five in 
+# VDR's OSD.
+#
+# If you want a certain Plugin not to be loaded automatically at 
+# vdr-startup, then you can simply write "-pluginname" in this file.
+# 
+# If you want to add commandline-options for a certain plugin, this file is 
+# not the right place - you can add them in the file(s) 
+# /etc/vdr/plugins/plugin.<pluginname>.conf - each option in one line
+
+firstplugin
+secondplugin
+-thirdplugin
+-fourthplugin

Added: vdr/vdr/trunk/debian/order.reccmds.conf
===================================================================
--- vdr/vdr/trunk/debian/order.reccmds.conf	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/order.reccmds.conf	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,10 @@
+#
+# If you like a fixed order in your recording commands menu, place the 
+# command base names (reccmds.<basename>.conf) here.
+#
+# If you want a certain command file not to be loaded automatically at 
+# vdr-startup, then you can simply write "-basename" in this file.
+
+firstcommand
+secondcommand
+-thirdcommand

Added: vdr/vdr/trunk/debian/patches/00list
===================================================================
--- vdr/vdr/trunk/debian/patches/00list	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/patches/00list	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,27 @@
+01_vdr_1.2.6-3.1.diff.gz
+01_gcc3.4-FTBFS-fix
+#01_gcc4.0-FTBFS-fix
+02_Makefile-CFGDIR
+03_cmdsubmenu
+04_newplugin
+05_set_system_time_as_user
+06_default_svdrp_port_0
+07_not_as_root
+08_security_CAN-2005-0071
+
+# The Elchi AIO 4d patch for a nicer OSD, inlcuding the frames and black
+# square fix.
+# opt-20_elchiaio4d+1
+
+# Patch needed for ttxtsubs (does not work with AC3-patch)
+# opt-21_ttxtsubs
+
+# This patch fixes a problem with 256 color, by changing char to unsigned
+# char.
+# opt-22_8bitcolor
+
+# Patch to support variable color for osdpip plugin
+# opt-23_osdpip-0.0.3
+
+# The Jump patch allows automatic jumping over cutting marks.
+# opt-24_jumpplay-0.4

Added: vdr/vdr/trunk/debian/patches/01_gcc3.4-FTBFS-fix.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/01_gcc3.4-FTBFS-fix.dpatch	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/patches/01_gcc3.4-FTBFS-fix.dpatch	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,32 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+
+## 01_gcc3.4-FTBFS-fix.dpatch by Thomas Schmidt <thomas.schmidt@in.stud.tu-ilmenau.de>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Fix for a FTBFS-Bug with gcc 3.4 (#262744)
+
+@DPATCH@
+diff -urNad /home/chelli/vdr/cvs/vdr/vdr/config.h vdr/config.h
+--- /home/chelli/vdr/cvs/vdr/vdr/config.h	2004-05-14 12:32:15.000000000 +0200
++++ vdr/config.h	2004-08-02 12:51:07.000000000 +0200
+@@ -137,7 +137,7 @@
+   bool Save(void)
+   {
+     bool result = true;
+-    T *l = (T *)First();
++    T *l = (T *)this->First();
+     cSafeFile f(fileName);
+     if (f.Open()) {
+        while (l) {
+diff -urNad /home/chelli/vdr/cvs/vdr/vdr/plugin.c vdr/plugin.c
+--- /home/chelli/vdr/cvs/vdr/vdr/plugin.c	2004-05-14 12:32:19.000000000 +0200
++++ vdr/plugin.c	2004-08-02 12:51:07.000000000 +0200
+@@ -162,7 +162,7 @@
+   const char *error = dlerror();
+   if (!error) {
+      void *(*creator)(void);
+-     (void *)creator = dlsym(handle, "VDRPluginCreator");
++     creator = (void*(*)())dlsym(handle, "VDRPluginCreator");
+      if (!(error = dlerror()))
+         plugin = (cPlugin *)creator();
+      }

Added: vdr/vdr/trunk/debian/patches/01_gcc4.0-FTBFS-fix.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/01_gcc4.0-FTBFS-fix.dpatch	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/patches/01_gcc4.0-FTBFS-fix.dpatch	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,235 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 01_gcc4.0-FTBFS-fix.dpatch by Thomas Schmidt <thomas.schmidt@in.stud.tu-ilmenau.de>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Fix for the FTBFS-Bug with gcc 4.0 (#294041)
+
+@DPATCH@
+diff -urNad vdr/libdtv/libsi/include/libsi.h /tmp/dpep.5cTuoM/vdr/libdtv/libsi/include/libsi.h
+--- vdr/libdtv/libsi/include/libsi.h	2004-04-22 12:49:14.000000000 +0200
++++ /tmp/dpep.5cTuoM/vdr/libdtv/libsi/include/libsi.h	2005-02-09 12:36:18.000000000 +0100
+@@ -380,7 +380,7 @@
+ #define CreateIso639LanguageDescriptor(descr, lc1, lc2, lc3) \
+    do \
+    { \
+-      xCreateNode (((struct Iso639LanguageDescriptor *)descr), NULL); \
++      xCreateNode (descr, NULL); \
+       ((struct Iso639LanguageDescriptor *)descr)->Tag = DESCR_ISO_639_LANGUAGE; \
+       ((struct Iso639LanguageDescriptor *)descr)->LanguageCode[0] = lc1; \
+       ((struct Iso639LanguageDescriptor *)descr)->LanguageCode[1] = lc2; \
+@@ -411,7 +411,7 @@
+ #define CreateAc3Descriptor(descr) \
+    do \
+    { \
+-      xCreateNode (((struct Ac3Descriptor *)descr), NULL); \
++      xCreateNode (descr, NULL); \
+       ((struct Ac3Descriptor *)descr)->Tag = DESCR_AC3; \
+    } while (0)
+ 
+@@ -458,7 +458,7 @@
+ #define CreateAncillaryDataDescriptor(descr, id) \
+    do \
+    { \
+-      xCreateNode (((struct AncillaryDataDescriptor *)descr), NULL); \
++      xCreateNode (descr, NULL); \
+       ((struct AncillaryDataDescriptor *)descr)->Tag = DESCR_ANCILLARY_DATA; \
+       ((struct AncillaryDataDescriptor *)descr)->Identifier = id; \
+    } while (0)
+@@ -478,7 +478,7 @@
+ #define CreateBouquetNameDescriptor(descr, text, tag) \
+    do \
+    { \
+-      xCreateNode (((struct BouquetNameDescriptor *)descr), NULL); \
++      xCreateNode (descr, NULL); \
+       ((struct NODE *)descr)->Name = text; \
+       ((struct NODE *)descr)->HashKey = xHashKey (text); \
+       ((struct BouquetNameDescriptor *)descr)->Tag = tag; \
+@@ -501,7 +501,7 @@
+ #define CreateCountryAvailabilityDescriptor(descr, ava) \
+    do \
+    { \
+-      xCreateNode (((struct CountryAvailabilityDescriptor *)descr), NULL); \
++      xCreateNode (descr, NULL); \
+       ((struct CountryAvailabilityDescriptor *)descr)->Tag = DESCR_COUNTRY_AVAIL; \
+       ((struct CountryAvailabilityDescriptor *)descr)->AvailibilityFlag = ava; \
+       ((struct CountryAvailabilityDescriptor *)descr)->Amount = 0; \
+@@ -539,7 +539,7 @@
+ #define CreateCaIdentifierDescriptor(descr, amo) \
+    do \
+    { \
+-      xCreateNode (((struct CaIdentifierDescriptor *)descr), NULL); \
++      xCreateNode (descr, NULL); \
+       ((struct CaIdentifierDescriptor *)descr)->Tag = DESCR_CA_IDENT; \
+       ((struct CaIdentifierDescriptor *)descr)->Amount = amo; \
+       xMemAlloc (amo*2+2, &((struct CaIdentifierDescriptor *)descr)->SystemID); \
+@@ -564,7 +564,7 @@
+ #define CreateCaDescriptor(descr, typ, capid, len) \
+    do \
+    { \
+-      xCreateNode (((struct CaDescriptor *)descr), NULL); \
++      xCreateNode (descr, NULL); \
+       ((struct CaDescriptor *)descr)->Tag = DESCR_CA; \
+       ((struct CaDescriptor *)descr)->CA_type = typ; \
+       ((struct CaDescriptor *)descr)->CA_PID = capid; \
+@@ -588,7 +588,7 @@
+ #define CreateStreamIdentifierDescriptor(descr, ctag) \
+    do \
+    { \
+-      xCreateNode (((struct StreamIdentifierDescriptor *)descr), NULL); \
++      xCreateNode (descr, NULL); \
+       ((struct StreamIdentifierDescriptor *)descr)->Tag = DESCR_STREAM_ID; \
+       ((struct StreamIdentifierDescriptor *)descr)->ComponentTag = (ctag); \
+    } while (0)
+@@ -630,7 +630,7 @@
+ #define CreateNvodReferenceDescriptor(descr) \
+    do \
+    { \
+-      xCreateNode (((struct NvodReferenceDescriptor *)descr), NULL); \
++      xCreateNode (descr, NULL); \
+       ((struct NvodReferenceDescriptor *)descr)->Tag = DESCR_NVOD_REF; \
+       ((struct NvodReferenceDescriptor *)descr)->Items = xNewList (NULL); \
+    } while (0)
+@@ -677,7 +677,7 @@
+ #define CreateLinkageDescriptor(descr, tpid, onid, svid, ltyp, pdl, pdp) \
+    do \
+    { \
+-      xCreateNode (((struct LinkageDescriptor *)descr), NULL); \
++      xCreateNode (descr, NULL); \
+       ((struct LinkageDescriptor *)descr)->Tag = DESCR_LINKAGE; \
+       ((struct LinkageDescriptor *)descr)->TransportStreamID = tpid; \
+       ((struct LinkageDescriptor *)descr)->OriginalNetworkID = onid; \
+@@ -702,7 +702,7 @@
+ #define CreateServiceDescriptor(descr, styp, prov, name) \
+    do \
+    { \
+-      xCreateNode (((struct ServiceDescriptor *)descr), NULL); \
++      xCreateNode (descr, NULL); \
+       ((struct NODE *)descr)->Name = name; \
+       ((struct NODE *)descr)->HashKey = xHashKey (name); \
+       ((struct ServiceDescriptor *)descr)->Tag = DESCR_SERVICE; \
+@@ -730,7 +730,7 @@
+ #define CreateTimeShiftedServiceDescriptor(descr, svid) \
+    do \
+    { \
+-      xCreateNode (((struct TimeShiftedServiceDescriptor *)descr), NULL); \
++      xCreateNode (descr, NULL); \
+       ((struct TimeShiftedServiceDescriptor *)descr)->Tag = DESCR_TIME_SHIFTED_SERVICE; \
+       ((struct TimeShiftedServiceDescriptor *)descr)->ReferenceServiceID = svid; \
+    } while (0)
+@@ -748,7 +748,7 @@
+ #define CreateTimeShiftedEventDescriptor(descr, svid, evid) \
+    do \
+    { \
+-      xCreateNode (((struct TimeShiftedEventDescriptor *)descr), NULL); \
++      xCreateNode (descr, NULL); \
+       ((struct TimeShiftedEventDescriptor *)descr)->Tag = DESCR_TIME_SHIFTED_EVENT; \
+       ((struct TimeShiftedEventDescriptor *)descr)->ReferenceServiceID = svid; \
+       ((struct TimeShiftedEventDescriptor *)descr)->ReferenceEventID = evid; \
+@@ -769,7 +769,7 @@
+ #define CreateComponentDescriptor(descr, scnt, ctyp, tag, lc1, lc2, lc3, txt) \
+    do \
+    { \
+-      xCreateNode (((struct ComponentDescriptor *)descr), NULL); \
++      xCreateNode (descr, NULL); \
+       ((struct NODE *)descr)->Name = txt; \
+       ((struct NODE *)descr)->HashKey = xHashKey (txt); \
+       ((struct ComponentDescriptor *)descr)->Tag = DESCR_COMPONENT; \
+@@ -795,7 +795,7 @@
+ #define CreateContentDescriptor(descr, amo) \
+    do \
+    { \
+-      xCreateNode (((struct ContentDescriptor *)descr), NULL); \
++      xCreateNode (descr, NULL); \
+       ((struct ContentDescriptor *)descr)->Tag = DESCR_CONTENT; \
+       ((struct ContentDescriptor *)descr)->Amount = amo; \
+       xMemAlloc (amo*2+2, &((struct ContentDescriptor *)descr)->ContentID); \
+@@ -828,7 +828,7 @@
+ #define CreateExtendedEventDescriptor(descr, dnum, ldnb, lc1, lc2, lc3, text) \
+    do \
+    { \
+-      xCreateNode (((struct ExtendedEventDescriptor *)descr), NULL); \
++      xCreateNode (descr, NULL); \
+       ((struct NODE *)descr)->Name = text; \
+       ((struct NODE *)descr)->HashKey = xHashKey (text); \
+       ((struct ExtendedEventDescriptor *)descr)->Tag = DESCR_EXTENDED_EVENT; \
+@@ -876,7 +876,7 @@
+ #define CreateParentalRatingDescriptor(descr) \
+    do \
+    { \
+-      xCreateNode (((struct ParentalRatingDescriptor *)descr), NULL); \
++      xCreateNode (descr, NULL); \
+       ((struct ParentalRatingDescriptor *)descr)->Tag = DESCR_PARENTAL_RATING; \
+       ((struct ParentalRatingDescriptor *)descr)->Ratings = xNewList (NULL); \
+    } while (0)
+@@ -919,7 +919,7 @@
+ #define CreateShortEventDescriptor(descr, name, lc1, lc2, lc3, text) \
+    do \
+    { \
+-      xCreateNode (((struct ShortEventDescriptor *)descr), NULL); \
++      xCreateNode (descr, NULL); \
+       ((struct NODE *)descr)->Name = name; \
+       ((struct NODE *)descr)->HashKey = xHashKey (name); \
+       ((struct ShortEventDescriptor *)descr)->Tag = DESCR_SHORT_EVENT; \
+@@ -942,7 +942,7 @@
+ #define CreateTeletextDescriptor(descr) \
+    do \
+    { \
+-      xCreateNode (((struct TeletextDescriptor *)descr), NULL); \
++      xCreateNode (descr, NULL); \
+       ((struct TeletextDescriptor *)descr)->Tag = DESCR_TELETEXT; \
+       ((struct TeletextDescriptor *)descr)->Items = xNewList (NULL); \
+    } while (0)
+@@ -995,7 +995,7 @@
+ #define CreateSubtitlingDescriptor(descr) \
+    do \
+    { \
+-      xCreateNode (((struct SubtitlingDescriptor *)descr), NULL); \
++      xCreateNode (descr, NULL); \
+       ((struct SubtitlingDescriptor *)descr)->Tag = DESCR_SUBTITLING; \
+       ((struct SubtitlingDescriptor *)descr)->Items = xNewList (NULL); \
+    } while (0)
+@@ -1046,7 +1046,7 @@
+ #define CreateSatelliteDeliverySystemDescriptor(descr, freq, orb, mod, polar, sr, fec) \
+    do \
+    { \
+-      xCreateNode (((struct SatelliteDeliverySystemDescriptor *)descr), NULL); \
++      xCreateNode (descr, NULL); \
+       ((struct SatelliteDeliverySystemDescriptor *)descr)->Tag = DESCR_SAT_DEL_SYS; \
+       ((struct SatelliteDeliverySystemDescriptor *)descr)->Frequency = freq; \
+       ((struct SatelliteDeliverySystemDescriptor *)descr)->OrbitalPosition = orb; \
+@@ -1071,7 +1071,7 @@
+ #define CreateCableDeliverySystemDescriptor(descr, freq, sr, fec_o, fec_i, mod) \
+    do \
+    { \
+-      xCreateNode (((struct CableDeliverySystemDescriptor *)descr), NULL); \
++      xCreateNode (descr, NULL); \
+       ((struct CableDeliverySystemDescriptor *)descr)->Tag = DESCR_CABLE_DEL_SYS; \
+       ((struct CableDeliverySystemDescriptor *)descr)->Frequency = freq; \
+       ((struct CableDeliverySystemDescriptor *)descr)->SymbolRate = sr; \
+@@ -1099,7 +1099,7 @@
+ #define CreateTerrestrialDeliverySystemDescriptor(descr, freq, bw, cst, hr, crh, crl, gi, tm, ofm) \
+    do \
+    { \
+-      xCreateNode (((struct CableDeliverySystemDescriptor *)descr), NULL); \
++      xCreateNode (descr, NULL); \
+       ((struct TerrestrialDeliverySystemDescriptor *)descr)->Tag = DESCR_TERR_DEL_SYS; \
+       ((struct TerrestrialDeliverySystemDescriptor *)descr)->Frequency = freq; \
+       ((struct TerrestrialDeliverySystemDescriptor *)descr)->Bandwidth = bw; \
+@@ -1123,7 +1123,7 @@
+ #define CreateServiceListDescriptor(descr) \
+    do \
+    { \
+-      xCreateNode (((struct ServiceListDescriptor *)descr), NULL); \
++      xCreateNode (descr, NULL); \
+       ((struct ServiceListDescriptor *)descr)->Tag = DESCR_SERVICE_LIST; \
+       ((struct ServiceListDescriptor *)descr)->ServiceList = xNewList(NULL); \
+    } while (0)
+@@ -1156,7 +1156,7 @@
+ #define CreateLocalTimeOffsetDescriptor(descr) \
+    do \
+    { \
+-      xCreateNode (((struct LocalTimeOffsetDescriptor *)descr), NULL); \
++      xCreateNode (descr, NULL); \
+       ((struct LocalTimeOffsetDescriptor *)descr)->Tag = DESCR_LOCAL_TIME_OFF; \
+       ((struct LocalTimeOffsetDescriptor *)descr)->LocalTimeOffsets = xNewList(NULL); \
+    } while (0)

Added: vdr/vdr/trunk/debian/patches/01_vdr_1.2.6-3.1.diff.gz.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/01_vdr_1.2.6-3.1.diff.gz.dpatch	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/patches/01_vdr_1.2.6-3.1.diff.gz.dpatch	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,52 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+
+## 01_vdr_1.2.6-3.1.diff.gz.dpatch by Thomas Schmidt <thomas.schmidt@in.stud.tu-ilmenau.de>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: New patch generated from vdr 1.2.6-3.1 diff.gz
+
+@DPATCH@
+--- vdr-1.2.6.orig/PLUGINS/src/osddemo/Makefile
++++ vdr-1.2.6/PLUGINS/src/osddemo/Makefile
+@@ -16,7 +16,7 @@
+ ### The C++ compiler and options:
+ 
+ CXX      ?= g++
+-CXXFLAGS ?= -O2 -Wall -Woverloaded-virtual
++CXXFLAGS ?= -fPIC -O2 -Wall -Woverloaded-virtual
+ 
+ ### The directory environment:
+ 
+--- vdr-1.2.6.orig/PLUGINS/src/sky/Makefile
++++ vdr-1.2.6/PLUGINS/src/sky/Makefile
+@@ -16,7 +16,7 @@
+ ### The C++ compiler and options:
+ 
+ CXX      ?= g++
+-CXXFLAGS ?= -O2 -Wall -Woverloaded-virtual
++CXXFLAGS ?= -fPIC -O2 -Wall -Woverloaded-virtual
+ 
+ ### The directory environment:
+ 
+--- vdr-1.2.6.orig/PLUGINS/src/status/Makefile
++++ vdr-1.2.6/PLUGINS/src/status/Makefile
+@@ -16,7 +16,7 @@
+ ### The C++ compiler and options:
+ 
+ CXX      ?= g++
+-CXXFLAGS ?= -O2 -Wall -Woverloaded-virtual
++CXXFLAGS ?= -fPIC -O2 -Wall -Woverloaded-virtual
+ 
+ ### The directory environment:
+ 
+--- vdr-1.2.6.orig/PLUGINS/src/hello/Makefile
++++ vdr-1.2.6/PLUGINS/src/hello/Makefile
+@@ -16,7 +16,7 @@
+ ### The C++ compiler and options:
+ 
+ CXX      ?= g++
+-CXXFLAGS ?= -O2 -Wall -Woverloaded-virtual
++CXXFLAGS ?= -fPIC -O2 -Wall -Woverloaded-virtual
+ 
+ ### The directory environment:
+ 

Added: vdr/vdr/trunk/debian/patches/02_Makefile-CFGDIR.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/02_Makefile-CFGDIR.dpatch	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/patches/02_Makefile-CFGDIR.dpatch	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,39 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+
+## 01_Makefile-CFGDIR.dpatch by Thomas Schmidt <thomas.schmidt@in.stud.tu-ilmenau.de>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: No description.
+
+@DPATCH@
+diff -urNad /home/chelli/vdr/test/vdr/Makefile vdr/Makefile
+--- /home/chelli/vdr/test/vdr/Makefile	2003-08-09 13:09:45.000000000 +0200
++++ vdr/Makefile	2004-05-01 13:35:27.000000000 +0200
+@@ -23,6 +23,7 @@
+ PLUGINLIBDIR= $(PLUGINDIR)/lib
+ 
+ VIDEODIR = /video
++CFGDIR ?= $(VIDEODIR)
+ 
+ DOXYGEN  = /usr/bin/doxygen
+ DOXYFILE = Doxyfile
+@@ -51,6 +52,7 @@
+ DEFINES += -D_GNU_SOURCE
+ 
+ DEFINES += -DVIDEODIR=\"$(VIDEODIR)\"
++DEFINES += -DCFGDIR=\"$(CFGDIR)\"
+ DEFINES += -DPLUGINDIR=\"$(PLUGINLIBDIR)\"
+ 
+ ifdef DEBUG_OSD
+diff -urNad /home/chelli/vdr/test/vdr/vdr.c vdr/vdr.c
+--- /home/chelli/vdr/test/vdr/vdr.c	2004-04-22 12:48:59.000000000 +0200
++++ vdr/vdr.c	2004-05-01 13:36:20.000000000 +0200
+@@ -340,7 +340,7 @@
+   // Configuration data:
+ 
+   if (!ConfigDirectory)
+-     ConfigDirectory = VideoDirectory;
++     ConfigDirectory = CFGDIR;
+ 
+   cPlugin::SetConfigDirectory(ConfigDirectory);
+ 

Added: vdr/vdr/trunk/debian/patches/03_cmdsubmenu.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/03_cmdsubmenu.dpatch	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/patches/03_cmdsubmenu.dpatch	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,210 @@
+#!/bin/sh /usr/share/dpatch/dpatch-run
+
+## submenu patch
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Adds submenus within the commands and recording commands menu.
+## DP: To create a submenu entry, prefix the name by one ore more "-".
+
+@DPATCH@
+diff -urNad vdr-1.2.6.orig/Makefile vdr-1.2.6/Makefile
+--- vdr-1.2.6.orig/Makefile	Fri May 28 00:36:59 2004
++++ vdr-1.2.6/Makefile	Fri May 28 00:37:16 2004
+@@ -48,6 +48,7 @@
+ 
+ DEFINES += -DREMOTE_$(REMOTE)
+ 
++DEFINES += -DCMD_SUBMENUS
+ DEFINES += -D_GNU_SOURCE
+ 
+ DEFINES += -DVIDEODIR=\"$(VIDEODIR)\"
+diff -urNad vdr-1.2.6.orig/config.c vdr-1.2.6/config.c
+--- vdr-1.2.6.orig/config.c	Fri May 28 00:36:59 2004
++++ vdr-1.2.6/config.c	Fri May 28 00:38:14 2004
+@@ -27,18 +27,29 @@
+ {
+   title = command = NULL;
+   confirm = false;
++  nIndent = 0;
++  childs = NULL;
+ }
+ 
+ cCommand::~cCommand()
+ {
+   free(title);
+   free(command);
++  delete childs;
+ }
+ 
+ bool cCommand::Parse(const char *s)
+ {
+   const char *p = strchr(s, ':');
+   if (p) {
++    nIndent = 0;
++#ifdef CMD_SUBMENUS
++    while (*s == '-')
++    {
++      nIndent++;
++      s++;
++    }
++#endif // CMD_SUBMENUS
+      int l = p - s;
+      if (l > 0) {
+         title = MALLOC(char, l + 1);
+@@ -83,6 +94,76 @@
+      esyslog("ERROR: can't open pipe for command '%s'", cmd);
+   free(cmdbuf);
+   return result;
++}
++
++int cCommand::getIndent ()
++{
++  return nIndent;
++}
++
++void cCommand::setIndent (int nNewIndent)
++{
++  nIndent = nNewIndent;
++}
++
++bool cCommand::hasChilds ()
++{
++  if (!childs)
++  {
++    return false;
++  }
++  return (childs->Count () > 0);
++}
++
++int cCommand::getChildCount ()
++{
++  if (!childs)
++  {
++    return false;
++  }
++  return childs->Count ();
++}
++
++void cCommand::addChild (cCommand *newChild)
++{
++  if (!childs)
++  {
++    childs = new cCommands ();
++  }
++  childs->Add (newChild);
++}
++
++
++cCommands *cCommand::getChilds ()
++{
++  return childs;
++}
++
++// --- cCommands -------------------------------------------------------
++
++void cCommands::AddConfig(cCommand *Object)
++{
++  cCommand *c = (cCommand *) Object;
++  cCommand *cParent;
++  int nIndent;
++  int nIndex;
++
++  if (!c)
++  {
++    return;
++  }
++  nIndent = c->getIndent ();
++  //  isyslog ("nIndent %d %s\n", nIndent, c->Title ());
++  for (nIndex = Count () - 1; nIndex >= 0; nIndex--)
++  {
++    cParent = (cCommand *) Get (nIndex);
++    if (cParent->getIndent () < nIndent)
++    {
++      cParent->addChild (c);
++      return;
++    }
++  }
++  cConfig<cCommand>::Add(Object);
+ }
+ 
+ // -- cSVDRPhost -------------------------------------------------------------
+diff -urNad vdr-1.2.6.orig/config.h vdr-1.2.6/config.h
+--- vdr-1.2.6.orig/config.h	Fri May 28 00:36:59 2004
++++ vdr-1.2.6/config.h	Fri May 28 00:37:16 2004
+@@ -32,11 +32,15 @@
+ 
+ #define MaxFileName 256
+ 
++class cCommands;
++
+ class cCommand : public cListObject {
+ private:
+   char *title;
+   char *command;
+   bool confirm;
++  int nIndent;
++  cCommands *childs;
+   static char *result;
+ public:
+   cCommand(void);
+@@ -45,6 +49,12 @@
+   const char *Title(void) { return title; }
+   bool Confirm(void) { return confirm; }
+   const char *Execute(const char *Parameters = NULL);
++  int getIndent ();
++  void setIndent (int nNewIndent);
++  bool hasChilds ();
++  int getChildCount ();
++  cCommands *getChilds ();
++  void addChild (cCommand *newChild);
+   };
+ 
+ typedef uint32_t in_addr_t; //XXX from /usr/include/netinet/in.h (apparently this is not defined on systems with glibc < 2.2)
+@@ -87,6 +97,10 @@
+   cConfig(void) { fileName = NULL; }
+   virtual ~cConfig() { free(fileName); }
+   const char *FileName(void) { return fileName; }
++  virtual void AddConfig(T *Object)
++  {
++    cList<T>::Add(Object);
++  }
+   bool Load(const char *FileName = NULL, bool AllowComments = false, bool MustExist = false)
+   {
+     Clear();
+@@ -114,7 +128,7 @@
+                 if (!isempty(buffer)) {
+                    T *l = new T;
+                    if (l->Parse(buffer))
+-                      Add(l);
++                      AddConfig(l);
+                    else {
+                       esyslog("ERROR: error in %s, line %d\n", fileName, line);
+                       delete l;
+@@ -156,7 +170,10 @@
+   }
+   };
+ 
+-class cCommands : public cConfig<cCommand> {};
++class cCommands : public cConfig<cCommand> {
++public:
++  virtual void AddConfig(cCommand *Object);
++  };
+ 
+ class cSVDRPhosts : public cConfig<cSVDRPhost> {
+ public:
+diff -urNad vdr-1.2.6.orig/menu.c vdr-1.2.6/menu.c
+--- vdr-1.2.6.orig/menu.c	Fri May 28 00:36:59 2004
++++ vdr-1.2.6/menu.c	Fri May 28 00:37:16 2004
+@@ -1518,6 +1518,12 @@
+   if (command) {
+      char *buffer = NULL;
+      bool confirmed = true;
++#ifdef CMD_SUBMENUS
++     if (command->hasChilds()) {
++        AddSubMenu(new cMenuCommands(command->Title(), command->getChilds(), parameters));
++        return osContinue;
++        }
++#endif // CMD_SUBMENUS
+      if (command->Confirm()) {
+         asprintf(&buffer, "%s?", command->Title());
+         confirmed = Interface->Confirm(buffer);

Added: vdr/vdr/trunk/debian/patches/04_newplugin.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/04_newplugin.dpatch	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/patches/04_newplugin.dpatch	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,49 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 04_newplugin.dpatch by Thomas Schmidt <thomas.schmidt@in.stud.tu-ilmenau.de>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Patch for the newplugin-script, to not require a normal 
+## DP: vdr-source-dir and to add -fPIC to the CXXFLAGS of a
+## DP: new plugin
+
+@DPATCH@
+diff -urNad vdr/newplugin /tmp/dpep.PJ00Ue/vdr/newplugin
+--- vdr/newplugin	2004-05-14 12:32:19.000000000 +0200
++++ /tmp/dpep.PJ00Ue/vdr/newplugin	2004-11-06 16:21:56.000000000 +0100
+@@ -24,7 +24,7 @@
+ $PLUGIN_DESCRIPTION = "Enter description for '$PLUGIN_NAME' plugin";
+ $PLUGIN_MAINENTRY = $PLUGIN_CLASS;
+ 
+-$PLUGINS_SRC = "PLUGINS/src";
++$PLUGINS_SRC = "./";
+ 
+ $README = qq
+ {This is a "plugin" for the Video Disk Recorder (VDR).
+@@ -71,7 +71,7 @@
+ ### The C++ compiler and options:
+ 
+ CXX      ?= g++
+-CXXFLAGS ?= -O2 -Wall -Woverloaded-virtual
++CXXFLAGS ?= -fPIC -O2 -Wall -Woverloaded-virtual
+ 
+ ### The directory environment:
+ 
+@@ -233,7 +233,7 @@
+ VDRPLUGINCREATOR(cPlugin$PLUGIN_CLASS); // Don't touch this!
+ };
+ 
+-$PLUGINDIR = "$PLUGINS_SRC/$PLUGIN_NAME";
++$PLUGINDIR = "$PLUGINS_SRC/$PLUGIN_NAME-$PLUGIN_VERSION";
+ 
+ die "The directory $PLUGINS_SRC doesn't exist!\n" unless (-d "$PLUGINS_SRC");
+ die "A plugin named '$PLUGIN_NAME' already exists in $PLUGINS_SRC!\n" if (-e "$PLUGINDIR");
+@@ -254,7 +254,8 @@
+ * fill in the code skeleton in "$PLUGIN_NAME.c" to implement your plugin function
+ * add further source files if necessary
+ * adapt the "Makefile" if necessary
+-* do "make plugins" from the VDR source directory to build your plugin
++* do "make all DVBDIR=/usr/include VDRDIR=/usr/include/vdr LIBDIR=." from the 
++  source directory to build your plugin
+ 
+ };
+ 

Added: vdr/vdr/trunk/debian/patches/05_set_system_time_as_user.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/05_set_system_time_as_user.dpatch	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/patches/05_set_system_time_as_user.dpatch	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,198 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 05_set_system_time_as_user.dpatch by Thomas Schmidt <thomas.schmidt@in.stud.tu-ilmenau.de>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Allow vdr to be run as a normal user, but keep the capability 
+## DP: to set the system-time by vdr (Patch from Ludwig Nussel 
+## DP: <ludwig.nussel@gmx.de>
+
+@DPATCH@
+diff -urNad vdr-1.2.6/Makefile /tmp/dpep.OwcM4r/vdr-1.2.6/Makefile
+--- vdr-1.2.6/Makefile	2005-01-31 22:48:08.000000000 +0100
++++ /tmp/dpep.OwcM4r/vdr-1.2.6/Makefile	2005-01-31 22:48:09.000000000 +0100
+@@ -87,7 +87,7 @@
+ # The main program:
+ 
+ vdr: $(OBJS) $(DTVLIB)
+-	$(CXX) $(CXXFLAGS) -rdynamic $(OBJS) $(NCURSESLIB) -ljpeg -lpthread -ldl $(LIBDIRS) $(DTVLIB) -o vdr
++	$(CXX) $(CXXFLAGS) -rdynamic $(OBJS) $(NCURSESLIB) -lcap -ljpeg -lpthread -ldl $(LIBDIRS) $(DTVLIB) -o vdr
+ 
+ # The font files:
+ 
+diff -urNad vdr-1.2.6/vdr.c /tmp/dpep.OwcM4r/vdr-1.2.6/vdr.c
+--- vdr-1.2.6/vdr.c	2005-01-31 22:48:08.000000000 +0100
++++ /tmp/dpep.OwcM4r/vdr-1.2.6/vdr.c	2005-01-31 23:03:08.000000000 +0100
+@@ -31,6 +31,10 @@
+ #include <stdlib.h>
+ #include <termios.h>
+ #include <unistd.h>
++#include <pwd.h>
++#include <grp.h>
++#include <sys/capability.h>
++#include <sys/prctl.h>
+ #include "audio.h"
+ #include "channels.h"
+ #include "config.h"
+@@ -77,6 +81,96 @@
+   exit(1);
+ }
+ 
++// switch user and group uid
++// taken from startproc by Werner Fink
++static int su(const char* username, const char* groupname)
++{
++  gid_t ngid = 0;
++  struct group* grp = NULL;
++  struct passwd *user = NULL;
++
++  if(!username) return 0;
++
++  user = getpwnam(username);
++  endpwent();
++  if(!user)
++  {
++    fprintf(stderr,"invalid user %s: %s\n",username,strerror(errno));
++    return 1;
++  }
++  if(groupname)
++  {
++    grp = getgrnam(groupname);
++    endgrent();
++    if(!grp)
++    {
++      fprintf(stderr,"invalid group %s: %s\n",groupname,strerror(errno));
++      return 1;
++    }
++  }
++
++  ngid = user->pw_gid;
++  if (grp)
++    ngid = grp->gr_gid;
++
++  if (setgid(ngid) < 0)
++  {
++    fprintf(stderr,"cannot set group id %u: %s\n", (unsigned int)ngid, strerror(errno));
++    return 1;
++  }
++  if (!getuid())
++  {
++    if (initgroups(user->pw_name, ngid) < 0)
++    {
++      fprintf(stderr,"cannot set supplemental group ids for user %s: %s\n",
++	  user->pw_name, strerror(errno));
++      return 1;
++    }
++  }
++  if (setuid(user->pw_uid) < 0)
++  {
++    fprintf(stderr,"cannot set user id %u: %s\n",
++	(unsigned int)user->pw_uid, strerror(errno));
++    return 1;
++  }
++  return 0;
++}
++
++// drop all capabilities except cap_sys_time
++static int set_cap_sys_time(void)
++{
++  cap_t caps;
++
++  caps = cap_from_text("= cap_sys_time=ep");
++  if(!caps)
++  {
++    perror("cap_from_text");
++    return -1;
++  }
++
++  if( cap_set_proc(caps) == -1 )
++  {
++    perror("cap_set_proc");
++    cap_free(caps);
++    return -1;
++  }
++
++  cap_free(caps);
++
++  return 0;
++}
++
++// keep capabilities during setuid()
++static inline int set_keepcaps(void)
++{
++  return prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);
++}
++
++static inline int set_nokeepcaps(void)
++{
++  return prctl(PR_SET_KEEPCAPS, 0, 0, 0, 0);
++}
++
+ int main(int argc, char *argv[])
+ {
+   // Save terminal settings:
+@@ -106,6 +200,8 @@
+   const char *Terminal = NULL;
+   const char *Shutdown = NULL;
+   cPluginManager PluginManager(DEFAULTPLUGINDIR);
++  const char* username = NULL;
++  const char* groupname = NULL;
+ 
+   static struct option long_options[] = {
+       { "audio",    required_argument, NULL, 'a' },
+@@ -125,11 +221,13 @@
+       { "version",  no_argument,       NULL, 'V' },
+       { "video",    required_argument, NULL, 'v' },
+       { "watchdog", required_argument, NULL, 'w' },
++      { "user",     required_argument, NULL, 'u' },
++      { "group",    required_argument, NULL, 'g' },
+       { NULL }
+     };
+ 
+   int c;
+-  while ((c = getopt_long(argc, argv, "a:c:dD:E:hl:L:mp:P:r:s:t:v:Vw:", long_options, NULL)) != -1) {
++  while ((c = getopt_long(argc, argv, "a:c:dD:E:hl:L:mp:P:r:s:t:v:Vw:u:g:", long_options, NULL)) != -1) {
+         switch (c) {
+           case 'a': AudioCommand = optarg;
+                     break;
+@@ -219,6 +317,10 @@
+                     fprintf(stderr, "vdr: invalid watchdog timeout: %s\n", optarg);
+                     return 2;
+                     break;
++          case 'u': username = optarg;
++                    break;
++          case 'g': groupname = optarg;
++                    break;
+           default:  return 2;
+           }
+         }
+@@ -260,6 +362,8 @@
+                "  -V,       --version      print version information and exit\n"
+                "  -w SEC,   --watchdog=SEC activate the watchdog timer with a timeout of SEC\n"
+                "                           seconds (default: %d); '0' disables the watchdog\n"
++	       "  -u USER,  --user=USER    run as user USER instead of root\n"
++	       "  -g GROUP, --group=GROUP  use group GROUP instead of primary group of user\n"
+                "\n",
+                cSIProcessor::GetEpgDataFileName() ? cSIProcessor::GetEpgDataFileName() : "'-'",
+                DEFAULTPLUGINDIR,
+@@ -290,6 +394,21 @@
+      return 0;
+      }
+ 
++  // Only try to change capabilities/user when vdr is called by 
++  // root
++  if (!getuid () || !getgid () || !geteuid () || !getegid ()) {
++     	if(username && set_keepcaps() != 0)
++    		return 2;
++
++  	if (su(username, groupname) != 0)
++    		return 2;
++
++  	if(username && set_nokeepcaps() != 0)
++    		return 2;
++
++  	set_cap_sys_time();
++  }
++
+   // Log file:
+ 
+   if (SysLogLevel > 0)

Added: vdr/vdr/trunk/debian/patches/06_default_svdrp_port_0.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/06_default_svdrp_port_0.dpatch	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/patches/06_default_svdrp_port_0.dpatch	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,21 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 06_default_svdrp_port_0.dpatch by Thomas Schmidt <thomas.schmidt@in.stud.tu-ilmenau.de>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: This sets the default svdrp-port to 0, which means that
+## DP: SVDRP is disabled by default unless someone specifies
+## DP: another port with the --port option when starting vdr
+
+@DPATCH@
+diff -urNad vdr-1.2.6/vdr.c /tmp/dpep.38cW8S/vdr-1.2.6/vdr.c
+--- vdr-1.2.6/vdr.c	2004-04-22 12:48:59.000000000 +0200
++++ /tmp/dpep.38cW8S/vdr-1.2.6/vdr.c	2005-01-15 18:51:46.000000000 +0100
+@@ -90,7 +90,7 @@
+ 
+   // Command line options:
+ 
+-#define DEFAULTSVDRPPORT 2001
++#define DEFAULTSVDRPPORT 0
+ #define DEFAULTWATCHDOG     0 // seconds
+ #define DEFAULTPLUGINDIR PLUGINDIR
+ 

Added: vdr/vdr/trunk/debian/patches/07_not_as_root.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/07_not_as_root.dpatch	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/patches/07_not_as_root.dpatch	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,74 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 07_not_as_root.dpatch by Thomas Schmidt <thomas.schmidt@in.stud.tu-ilmenau.de>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Refuse to run vdr as user root (Note: This patch requires the
+## DP: 05_set_system_time_as_user.dpatch)
+
+@DPATCH@
+diff -urNad vdr-1.2.6/vdr.c /tmp/dpep.YDJHqf/vdr-1.2.6/vdr.c
+--- vdr-1.2.6/vdr.c	2005-01-31 23:07:51.000000000 +0100
++++ /tmp/dpep.YDJHqf/vdr-1.2.6/vdr.c	2005-01-31 23:09:10.000000000 +0100
+@@ -35,6 +35,7 @@
+ #include <grp.h>
+ #include <sys/capability.h>
+ #include <sys/prctl.h>
++#include <sys/types.h>
+ #include "audio.h"
+ #include "channels.h"
+ #include "config.h"
+@@ -325,12 +326,30 @@
+           }
+         }
+ 
++  // Check if the program should run as root
++  bool IsRoot=0; 
++  
++  if (username == NULL && groupname == NULL) 
++     IsRoot = !getuid () || !getgid () || !geteuid () || !getegid ();
++  else {
++     if (username != NULL) { 
++     	if (strcmp(username,"root") == 0)
++   		IsRoot = 1;
++     }
++     if (groupname != NULL) {
++     	if (strcmp(groupname,"root") == 0) 
++		IsRoot = 1;
++     }
++  }
++  
+   // Help and version info:
+ 
+   if (DisplayHelp || DisplayVersion) {
+-     if (!PluginManager.HasPlugins())
+-        PluginManager.AddPlugin("*"); // adds all available plugins
+-     PluginManager.LoadPlugins();
++     if (!IsRoot) {
++     	if (!PluginManager.HasPlugins())
++        	PluginManager.AddPlugin("*"); // adds all available plugins
++     	PluginManager.LoadPlugins();
++     }
+      if (DisplayHelp) {
+         printf("Usage: vdr [OPTIONS]\n\n"          // for easier orientation, this is column 80|
+                "  -a CMD,   --audio=CMD    send Dolby Digital audio to stdin of command CMD\n"
+@@ -374,7 +393,7 @@
+         }
+      if (DisplayVersion)
+         printf("vdr (%s) - The Video Disk Recorder\n", VDRVERSION);
+-     if (PluginManager.HasPlugins()) {
++     if (!IsRoot && PluginManager.HasPlugins()) {
+         if (DisplayHelp)
+            printf("Plugins: vdr -P\"name [OPTIONS]\"\n\n");
+         for (int i = 0; ; i++) {
+@@ -394,6 +413,11 @@
+      return 0;
+      }
+ 
++  if (IsRoot) {
++	fprintf (stderr, "%s: sorry, I refuse to run with root privileges\n", argv[0]);
++     	return 0;
++  }
++  
+   // Only try to change capabilities/user when vdr is called by 
+   // root
+   if (!getuid () || !getgid () || !geteuid () || !getegid ()) {

Added: vdr/vdr/trunk/debian/patches/08_security_CAN-2005-0071.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/08_security_CAN-2005-0071.dpatch	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/patches/08_security_CAN-2005-0071.dpatch	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,34 @@
+#! /bin/sh /usr/share/dpatch/dpatch-run
+## 08_security_CAN-2005-0071.dpatch by Thomas Schmidt <thomas.schmidt@in.stud.tu-ilmenau.de>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Fixes CAN-2005-0071 (It is not possible to overwrite files with 
+## DP: the GRAB-Command anymore)
+
+@DPATCH@
+diff -urNad vdr-1.2.6/dvbdevice.c /tmp/dpep.80S4AN/vdr-1.2.6/dvbdevice.c
+--- vdr-1.2.6/dvbdevice.c	2004-04-22 12:48:31.000000000 +0200
++++ /tmp/dpep.80S4AN/vdr-1.2.6/dvbdevice.c	2005-01-16 21:51:24.000000000 +0100
+@@ -505,8 +505,10 @@
+               Quality = 255; //XXX is this 'best'???
+ 
+            isyslog("grabbing to %s (%s %d %d %d)", FileName, Jpeg ? "JPEG" : "PNM", Quality, vm.width, vm.height);
+-           FILE *f = fopen(FileName, "wb");
+-           if (f) {
++	   int fd = open(FileName, O_CREAT | O_EXCL | O_TRUNC | O_RDWR, 00640);
++           if (fd > -1) {
++            FILE *f = fdopen(fd, "wb");
++            if (f) {
+               if (Jpeg) {
+                  // write JPEG file:
+                  struct jpeg_compress_struct cinfo;
+@@ -540,7 +542,8 @@
+                     }
+                  }
+               fclose(f);
+-              }
++	    }
++	   }
+            else {
+               LOG_ERROR_STR(FileName);
+               result |= 1;

Added: vdr/vdr/trunk/debian/patches/opt-20_elchiaio4d+1.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-20_elchiaio4d+1.dpatch	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/patches/opt-20_elchiaio4d+1.dpatch	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,12872 @@
+#!/bin/sh /usr/share/dpatch/dpatch-run
+
+## elchiaio4d by Andy Grobb (Elchi) and Rolf Ahrenberg 
+## (see HISTORY-ElchiAIO for all contributors)
+##
+## the frames an balck square fix by Thomas Günther and Gerhard Stein are 
+## already included
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: ELCHI AIO Version 4d osd improvement patch
+
+@DPATCH@
+diff -Nur vdr.orig/config.c vdr/config.c
+--- vdr.orig/config.c	2004-07-22 20:19:11.000000000 +0200
++++ vdr/config.c	2004-08-01 13:40:47.000000000 +0200
+@@ -15,6 +15,8 @@
+ #include "plugin.h"
+ #include "recording.h"
+ 
++const char *ConfigDirectory = NULL;
++
+ // 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
+ // value!
+@@ -287,6 +289,50 @@
+   memset(CaCaps, sizeof(CaCaps), 0);
+   CurrentChannel = -1;
+   CurrentVolume = MAXVOLUME;
++  Theme = 0;
++  SmallFonts = 1;
++  ChannelLogo = 1;
++  LogoColorScheme = 1;
++  Symbol = 1;
++  TimeBar = 0;
++  ProgressBar = 0;
++  OSDxoffset = 0;
++  ShowWeekdays = 0;
++  ShowRecDate = 1;
++  ShowRecTime = 1;
++  ShowRecLength = 0;
++  BgColor = 0;
++  BgClrBackground = 0x88000000;
++  BgClrChannelName = 0x88000000;
++  BgClrChannelDate = 0x88FFFFFF;
++  BgClrEpgTime = 0x88000000;
++  BgClrEpgData = 0x88000000;
++  BgClrTitleLine = 0xFFFFFF00;
++  BgClrScrolLine = 0xFFFFFF00;
++  BgClrHelpRed = 0xFF1111CC;
++  BgClrHelpGreen = 0xFF22CC22;
++  BgClrHelpYellow = 0xFF22BBCC;
++  BgClrHelpBlue = 0xFFCC0000;
++  BgClrErrorLine = 0xFF1111CC;
++  BgClrInfoLine = 0xFF22CC22;
++  BgClrConfirmLine = 0xFF22BBCC;
++  ClrChannelName = 1;
++  ClrChannelDate = 1;
++  ClrEpgTime = 4;
++  ClrTitle = 7;
++  ClrSubTitle = 7;
++  ClrMenuFont = 1;
++  ClrTitleLine = 0;
++  ClrScrolLine = 0;
++  ClrVolumeBar = 3;
++  ClrTimeBar1 = 0;
++  ClrTimeBar2 = 8;
++  ClrSymbolOn = 4;
++  ClrSymbolOff = 8;
++  ClrErrorFont = 1;
++  ClrInfoFont = 0;
++  ClrConfirmFont = 0;
++  MenuCommandPos = 1;
+ }
+ 
+ cSetup& cSetup::operator= (const cSetup &s)
+@@ -439,6 +485,49 @@
+   else if (!strcasecmp(Name, "CaCaps"))              return ParseCaCaps(Value);
+   else if (!strcasecmp(Name, "CurrentChannel"))      CurrentChannel     = atoi(Value);
+   else if (!strcasecmp(Name, "CurrentVolume"))       CurrentVolume      = atoi(Value);
++  else if (!strcasecmp(Name, "Theme"))               Theme              = atoi(Value);
++  else if (!strcasecmp(Name, "SmallFonts"))          SmallFonts         = atoi(Value);
++  else if (!strcasecmp(Name, "ChannelLogo"))         ChannelLogo        = atoi(Value);
++  else if (!strcasecmp(Name, "LogoColorScheme"))     LogoColorScheme    = atoi(Value);
++  else if (!strcasecmp(Name, "Symbol"))              Symbol             = atoi(Value);
++  else if (!strcasecmp(Name, "TimeBar"))             TimeBar            = atoi(Value);
++  else if (!strcasecmp(Name, "ProgressBar"))         ProgressBar        = atoi(Value);
++  else if (!strcasecmp(Name, "OSDxoffset"))          OSDxoffset         = atoi(Value);
++  else if (!strcasecmp(Name, "ShowWeekdays"))        ShowWeekdays       = 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, "MenuCommandPos"))      MenuCommandPos     = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrBackground"))     BgClrBackground    = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrChannelName"))    BgClrChannelName   = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrChannelDate"))    BgClrChannelDate   = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrEpgTime"))        BgClrEpgTime       = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrEpgData"))        BgClrEpgData       = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrTitleLine"))      BgClrTitleLine     = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrScrolLine"))      BgClrScrolLine     = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrHelpRed"))        BgClrHelpRed       = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrHelpGreen"))      BgClrHelpGreen     = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrHelpYellow"))     BgClrHelpYellow    = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrHelpBlue"))       BgClrHelpBlue      = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrErrorLine"))      BgClrErrorLine     = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrInfoLine"))       BgClrInfoLine      = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrConfirmLine"))    BgClrConfirmLine   = atoi(Value);
++  else if (!strcasecmp(Name, "ClrChannelName"))      ClrChannelName     = atoi(Value);
++  else if (!strcasecmp(Name, "ClrChannelDate"))      ClrChannelDate     = atoi(Value);
++  else if (!strcasecmp(Name, "ClrEpgTime"))          ClrEpgTime         = atoi(Value);
++  else if (!strcasecmp(Name, "ClrTitle"))            ClrTitle           = atoi(Value);
++  else if (!strcasecmp(Name, "ClrSubTitle"))         ClrSubTitle        = atoi(Value);
++  else if (!strcasecmp(Name, "ClrMenuFont"))         ClrMenuFont        = atoi(Value);
++  else if (!strcasecmp(Name, "ClrTitleLine"))        ClrTitleLine       = atoi(Value);
++  else if (!strcasecmp(Name, "ClrScrolLine"))        ClrScrolLine       = atoi(Value);
++  else if (!strcasecmp(Name, "ClrVolumeBar"))        ClrVolumeBar       = atoi(Value);
++  else if (!strcasecmp(Name, "ClrTimeBar1"))         ClrTimeBar1        = atoi(Value);
++  else if (!strcasecmp(Name, "ClrTimeBar2"))         ClrTimeBar2        = atoi(Value);
++  else if (!strcasecmp(Name, "ClrSymbolOn"))         ClrSymbolOn        = atoi(Value);
++  else if (!strcasecmp(Name, "ClrSymbolOff"))        ClrSymbolOff       = atoi(Value);
++  else if (!strcasecmp(Name, "ClrErrorFont"))        ClrErrorFont       = atoi(Value);
++  else if (!strcasecmp(Name, "ClrInfoFont"))         ClrInfoFont        = atoi(Value);
++  else if (!strcasecmp(Name, "ClrConfirmFont"))      ClrConfirmFont     = atoi(Value);
+   else
+      return false;
+   return true;
+@@ -489,6 +578,49 @@
+   StoreCaCaps("CaCaps");
+   Store("CurrentChannel",     CurrentChannel);
+   Store("CurrentVolume",      CurrentVolume);
++  Store("Theme",              Theme);
++  Store("SmallFonts",         SmallFonts);
++  Store("ChannelLogo",        ChannelLogo);
++  Store("LogoColorScheme",    LogoColorScheme);
++  Store("Symbol",             Symbol);
++  Store("TimeBar",            TimeBar);
++  Store("ProgressBar",        ProgressBar);
++  Store("OSDxoffset",         OSDxoffset);
++  Store("ShowWeekdays",       ShowWeekdays);
++  Store("ShowRecDate",        ShowRecDate);
++  Store("ShowRecTime",        ShowRecTime);
++  Store("ShowRecLength",      ShowRecLength);
++  Store("MenuCommandPos",     MenuCommandPos);
++  Store("BgClrBackground",    BgClrBackground);
++  Store("BgClrChannelName",   BgClrChannelName);
++  Store("BgClrChannelDate",   BgClrChannelDate);
++  Store("BgClrEpgTime",       BgClrEpgTime);
++  Store("BgClrEpgData",       BgClrEpgData);
++  Store("BgClrTitleLine",     BgClrTitleLine);
++  Store("BgClrScrolLine",     BgClrScrolLine);
++  Store("BgClrHelpRed",       BgClrHelpRed);
++  Store("BgClrHelpGreen",     BgClrHelpGreen);
++  Store("BgClrHelpYellow",    BgClrHelpYellow);
++  Store("BgClrHelpBlue",      BgClrHelpBlue);
++  Store("BgClrErrorLine",     BgClrErrorLine);
++  Store("BgClrInfoLine",      BgClrInfoLine);
++  Store("BgClrConfirmLine",   BgClrConfirmLine);
++  Store("ClrChannelName",     ClrChannelName); 
++  Store("ClrChannelDate",     ClrChannelDate);
++  Store("ClrEpgTime",         ClrEpgTime);
++  Store("ClrTitle",           ClrTitle);
++  Store("ClrSubTitle",        ClrSubTitle);
++  Store("ClrMenuFont",        ClrMenuFont);
++  Store("ClrTitleLine",       ClrTitleLine);
++  Store("ClrScrolLine",       ClrScrolLine);
++  Store("ClrVolumeBar",       ClrVolumeBar);
++  Store("ClrTimeBar1",        ClrTimeBar1);
++  Store("ClrTimeBar2",        ClrTimeBar2); 
++  Store("ClrSymbolOn",        ClrSymbolOn);
++  Store("ClrSymbolOff",       ClrSymbolOff);
++  Store("ClrErrorFont",       ClrErrorFont);
++  Store("ClrInfoFont",        ClrInfoFont);
++  Store("ClrConfirmFont",     ClrConfirmFont);
+ 
+   Sort();
+ 
+@@ -498,3 +630,184 @@
+      }
+   return false;
+ }
++
++// --- cColorSchemeFile ------------------------------------------------------
++
++cColorSchemeSetup::cColorSchemeSetup(void)
++{
++  BgClrBackground  = 0x88000000;
++  BgClrChannelName = BgClrBackground;
++  BgClrChannelDate = 0x88FFFFFF;
++  BgClrEpgTime     = BgClrBackground;
++  BgClrEpgData     = BgClrBackground;
++  BgClrTitleLine   = 0xFFFFFF00;
++  BgClrScrolLine   = BgClrTitleLine;
++  BgClrHelpRed     = 0xFF1111CC;
++  BgClrHelpGreen   = 0xFF22CC22;
++  BgClrHelpYellow  = 0xFF22BBCC;
++  BgClrHelpBlue    = 0xFFCC0000;
++  BgClrErrorLine   = 0xFF1111CC;
++  BgClrInfoLine    = 0xFF22CC22;
++  BgClrConfirmLine = 0xFF22BBCC;
++
++  ClrChannelName   = 1;
++  ClrChannelDate   = 1;
++  ClrEpgTime       = 4;
++  ClrTitle         = 7;
++  ClrSubTitle      = 7;
++  ClrMenuFont      = 1;
++  ClrTitleLine     = 0;
++  ClrScrolLine     = 0;
++  ClrVolumeBar     = 3;
++  ClrTimeBar1      = 0;
++  ClrTimeBar2      = 8;
++  ClrSymbolOn      = 4;
++  ClrSymbolOff     = 8;
++  ClrErrorFont     = 1;
++  ClrInfoFont      = 0;
++  ClrConfirmFont   = 0;
++
++  strcpy(Description,  "");
++  strcpy(DescriptionX, "");
++}
++
++bool cColorSchemeSetup::Load(const char *FileName)
++{
++  if (cConfig<cSetupLine>::Load(FileName, true)) {
++     bool result = true;
++     for (cSetupLine *l = First(); l; l = Next(l)) {
++         bool error = false;
++         if (!Parse(l->Name(), l->Value())) {
++            error = true;
++            }
++         if (error) {
++            esyslog("ERROR: unknown color scheme config parameter: %s = %s", l->Name(), l->Value());
++            result = false;
++            }
++         }
++     return result;
++     }
++  return false;
++}
++
++bool cColorSchemeSetup::Parse(const char *Name, const char *Value)
++{
++  char *xDescription = NULL;
++
++  asprintf(&xDescription, "Description%d", Setup.OSDLanguage);
++
++       if (!strcasecmp(Name, "BgClrBackground"))  BgClrBackground  = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrChannelName")) BgClrChannelName = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrChannelDate")) BgClrChannelDate = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrEpgTime"))     BgClrEpgTime     = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrEpgData"))     BgClrEpgData     = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrTitleLine"))   BgClrTitleLine   = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrScrolLine"))   BgClrScrolLine   = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrHelpRed"))     BgClrHelpRed     = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrHelpGreen"))   BgClrHelpGreen   = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrHelpYellow"))  BgClrHelpYellow  = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrHelpBlue"))    BgClrHelpBlue    = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrErrorLine"))   BgClrErrorLine   = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrInfoLine"))    BgClrInfoLine    = atoi(Value);
++  else if (!strcasecmp(Name, "BgClrConfirmLine")) BgClrConfirmLine = atoi(Value);
++  else if (!strcasecmp(Name, "ClrChannelName"))   ClrChannelName   = atoi(Value);
++  else if (!strcasecmp(Name, "ClrChannelDate"))   ClrChannelDate   = atoi(Value);
++  else if (!strcasecmp(Name, "ClrEpgTime"))       ClrEpgTime       = atoi(Value);
++  else if (!strcasecmp(Name, "ClrTitle"))         ClrTitle         = atoi(Value);
++  else if (!strcasecmp(Name, "ClrSubTitle"))      ClrSubTitle      = atoi(Value);
++  else if (!strcasecmp(Name, "ClrMenuFont"))      ClrMenuFont      = atoi(Value);
++  else if (!strcasecmp(Name, "ClrTitleLine"))     ClrTitleLine     = atoi(Value);
++  else if (!strcasecmp(Name, "ClrScrolLine"))     ClrScrolLine     = atoi(Value);
++  else if (!strcasecmp(Name, "ClrVolumeBar"))     ClrVolumeBar     = atoi(Value);
++  else if (!strcasecmp(Name, "ClrTimeBar1"))      ClrTimeBar1      = atoi(Value);
++  else if (!strcasecmp(Name, "ClrTimeBar2"))      ClrTimeBar2      = atoi(Value);
++  else if (!strcasecmp(Name, "ClrSymbolOn"))      ClrSymbolOn      = atoi(Value);
++  else if (!strcasecmp(Name, "ClrSymbolOff"))     ClrSymbolOff     = atoi(Value);
++  else if (!strcasecmp(Name, "ClrErrorFont"))     ClrErrorFont     = atoi(Value);
++  else if (!strcasecmp(Name, "ClrInfoFont"))      ClrInfoFont      = atoi(Value);
++  else if (!strcasecmp(Name, "ClrConfirmFont"))   ClrConfirmFont   = atoi(Value);
++  else if (!strcasecmp(Name, "Description"))      strn0cpy(Description, Value, MaxFileName);
++  else if (!strcasecmp(Name, xDescription))       strn0cpy(DescriptionX, Value, MaxFileName);
++
++  free(xDescription);
++  return true;
++}
++
++cSetupLine *cColorSchemeSetup::Get(const char *Name)
++{
++  for (cSetupLine *l = First(); l; l = Next(l)) {
++      if (strcasecmp(l->Name(), Name) == 0)
++         return l;
++      }
++  return NULL;
++}
++
++void cColorSchemeSetup::Store(const char *Name, const char *Value)
++{
++  if (Name && *Name) {
++     cSetupLine *l = Get(Name);
++     if (l)
++        Del(l);
++     if (Value)
++        Add(new cSetupLine(Name, Value));
++     }
++}
++
++void cColorSchemeSetup::Store(const char *Name, int Value)
++{
++  char *buffer = NULL;
++  asprintf(&buffer, "%d", Value);
++  Store(Name, buffer);
++  free(buffer);
++}
++
++bool cColorSchemeSetup::Save(void)
++{
++  char *xDescription = NULL;
++
++  if (!cConfig<cSetupLine>::FileName())
++     return false;
++
++  asprintf(&xDescription, "Description%d", Setup.OSDLanguage);
++
++  Store("BgClrBackground",    BgClrBackground);
++  Store("BgClrChannelName",   BgClrChannelName);
++  Store("BgClrChannelDate",   BgClrChannelDate);
++  Store("BgClrEpgTime",       BgClrEpgTime);
++  Store("BgClrEpgData",       BgClrEpgData);
++  Store("BgClrTitleLine",     BgClrTitleLine);
++  Store("BgClrScrolLine",     BgClrScrolLine);
++  Store("BgClrHelpRed",       BgClrHelpRed);
++  Store("BgClrHelpGreen",     BgClrHelpGreen);
++  Store("BgClrHelpYellow",    BgClrHelpYellow);
++  Store("BgClrHelpBlue",      BgClrHelpBlue);
++  Store("BgClrErrorLine",     BgClrErrorLine);
++  Store("BgClrInfoLine",      BgClrInfoLine);
++  Store("BgClrConfirmLine",   BgClrConfirmLine);
++  Store("ClrChannelName",     ClrChannelName); 
++  Store("ClrChannelDate",     ClrChannelDate);
++  Store("ClrEpgTime",         ClrEpgTime);
++  Store("ClrTitle",           ClrTitle);
++  Store("ClrSubTitle",        ClrSubTitle);
++  Store("ClrMenuFont",        ClrMenuFont);
++  Store("ClrTitleLine",       ClrTitleLine);
++  Store("ClrScrolLine",       ClrScrolLine);
++  Store("ClrVolumeBar",       ClrVolumeBar);
++  Store("ClrTimeBar1",        ClrTimeBar1);
++  Store("ClrTimeBar2",        ClrTimeBar2); 
++  Store("ClrSymbolOn",        ClrSymbolOn);
++  Store("ClrSymbolOff",       ClrSymbolOff);
++  Store("ClrErrorFont",       ClrErrorFont);
++  Store("Description",        Description);
++  Store(xDescription,         DescriptionX);
++
++  free(xDescription);
++
++  Sort();
++
++  if (cConfig<cSetupLine>::Save()) {
++     isyslog("saved color scheme setup: %s", cConfig<cSetupLine>::FileName());
++     return true;
++     }
++  return false;
++}
+diff -Nur vdr.orig/config.h vdr/config.h
+--- vdr.orig/config.h	2004-07-22 20:19:11.000000000 +0200
++++ vdr/config.h	2004-08-01 13:40:47.000000000 +0200
+@@ -22,6 +22,8 @@
+ #define VDRVERSION  "1.2.6"
+ #define VDRVERSNUM   10206  // Version * 10000 + Major * 100 + Minor
+ 
++#define ELCHIAIOVERSION 413
++
+ #define MAXPRIORITY 99
+ #define MAXLIFETIME 99
+ 
+@@ -32,6 +34,8 @@
+ 
+ #define MaxFileName 256
+ 
++extern const char *ConfigDirectory;
++
+ class cCommand : public cListObject {
+ private:
+   char *title;
+@@ -240,6 +244,48 @@
+   int CaCaps[MAXDEVICES][MAXCACAPS];
+   int CurrentChannel;
+   int CurrentVolume;
++  int BgColor;
++  int BgClrBackground;
++  int BgClrChannelName;
++  int BgClrChannelDate;
++  int BgClrEpgTime; 
++  int BgClrEpgData; 
++  int BgClrTitleLine;
++  int BgClrScrolLine;
++  int BgClrHelpRed;
++  int BgClrHelpGreen;
++  int BgClrHelpYellow;
++  int BgClrHelpBlue; 
++  int BgClrErrorLine;
++  int BgClrInfoLine;
++  int BgClrConfirmLine;
++  int ClrChannelName;
++  int ClrChannelDate;
++  int ClrEpgTime;
++  int ClrTitle;
++  int ClrSubTitle;
++  int ClrMenuFont;
++  int ClrTitleLine;
++  int ClrScrolLine;
++  int ClrVolumeBar;
++  int ClrTimeBar1;
++  int ClrTimeBar2;
++  int ClrSymbolOn;
++  int ClrSymbolOff;
++  int ClrErrorFont;
++  int ClrInfoFont;
++  int ClrConfirmFont;
++  int Red, Green, Blue, Transparency;
++  int Theme;
++  int SmallFonts;
++  int ChannelLogo;
++  int LogoColorScheme;
++  int Symbol;
++  int TimeBar;
++  int ProgressBar;
++  int OSDxoffset;
++  int ShowWeekdays, ShowRecDate, ShowRecTime, ShowRecLength;
++  int MenuCommandPos;
+   int __EndData__;
+   cSetup(void);
+   cSetup& operator= (const cSetup &s);
+@@ -249,4 +295,50 @@
+ 
+ extern cSetup Setup;
+ 
++class cColorSchemeSetup : public cConfig<cSetupLine> {
++private:
++  bool Parse(const char *Name, const char *Value);
++  cSetupLine *Get(const char *Name);
++  void Store(const char *Name, const char *Value);
++  void Store(const char *Name, int Value);
++public:
++  int __BeginData__;
++  char Description[MaxFileName];
++  char DescriptionX[MaxFileName];
++  int BgClrBackground;
++  int BgClrChannelName;
++  int BgClrChannelDate;
++  int BgClrEpgTime;
++  int BgClrEpgData;
++  int BgClrTitleLine;
++  int BgClrScrolLine;
++  int BgClrHelpRed;
++  int BgClrHelpGreen;
++  int BgClrHelpYellow;
++  int BgClrHelpBlue;
++  int BgClrErrorLine;
++  int BgClrInfoLine;
++  int BgClrConfirmLine;
++  int ClrChannelName;
++  int ClrChannelDate;
++  int ClrEpgTime;
++  int ClrTitle;
++  int ClrSubTitle;
++  int ClrMenuFont;
++  int ClrTitleLine;
++  int ClrScrolLine;
++  int ClrVolumeBar;
++  int ClrTimeBar1;
++  int ClrTimeBar2;
++  int ClrSymbolOn;
++  int ClrSymbolOff;
++  int ClrErrorFont;
++  int ClrInfoFont;
++  int ClrConfirmFont;
++  int __EndData__;
++  cColorSchemeSetup(void);
++  bool Load(const char *FileName);
++  bool Save(void);
++};
++
+ #endif //__CONFIG_H
+diff -Nur vdr.orig/dvbplayer.c vdr/dvbplayer.c
+--- vdr.orig/dvbplayer.c	2004-07-17 17:27:25.000000000 +0200
++++ vdr/dvbplayer.c	2004-08-01 13:40:47.000000000 +0200
+@@ -173,7 +173,7 @@
+ //XXX+ also used in recorder.c - find a better place???
+ // The size of the array used to buffer video data:
+ // (must be larger than MINVIDEODATA - see remux.h)
+-#define VIDEOBUFSIZE  MEGABYTE(1)
++#define VIDEOBUFSIZE  MEGABYTE(4)
+ 
+ // The number of frames to back up when resuming an interrupted replay session:
+ #define RESUMEBACKUP (10 * FRAMESPERSEC)
+diff -Nur vdr.orig/eit.c vdr/eit.c
+--- vdr.orig/eit.c	2004-07-17 17:27:25.000000000 +0200
++++ vdr/eit.c	2004-08-01 13:40:47.000000000 +0200
+@@ -280,6 +280,16 @@
+    return szEndTime;
+ }
+ /**  */
++const char * cEventInfo::GetWeekdayString() const
++{
++   static char szWeekday[4];
++
++   struct tm tm_r;
++   strn0cpy(szWeekday, WeekDayName(localtime_r(&tTime, &tm_r)->tm_wday), sizeof(szWeekday));
++
++   return szWeekday;
++}
++/**  */
+ time_t cEventInfo::GetTime() const
+ {
+    return tTime;
+diff -Nur vdr.orig/eit.h vdr/eit.h
+--- vdr.orig/eit.h	2004-07-17 17:27:25.000000000 +0200
++++ vdr/eit.h	2004-08-01 13:40:47.000000000 +0200
+@@ -60,6 +60,7 @@
+   const unsigned char GetTableID(void) const;
+   const char *GetTimeString(void) const;
+   const char *GetEndTimeString(void) const;
++  const char *GetWeekdayString(void) const;
+   const char *GetDate(void) const;
+   bool IsFollowing(void) const;
+   bool IsPresent(void) const;
+diff -Nur vdr.orig/font.c vdr/font.c
+--- vdr.orig/font.c	2004-07-17 17:27:25.000000000 +0200
++++ vdr/font.c	2004-08-01 13:40:47.000000000 +0200
+@@ -12,6 +12,8 @@
+ 
+ #include "fontfix.c"
+ #include "fontosd.c"
++#include "fontsym.c"
++#include "fontsml.c"
+ 
+ cFont::cFont(eDvbFont Font)
+ {
+@@ -24,7 +26,9 @@
+   switch (Font) {
+     default:
+     FONTINDEX(Osd);
++    FONTINDEX(Sml);
+     FONTINDEX(Fix);
++    FONTINDEX(Sym);
+     // TODO others...
+     }
+ }
+diff -Nur vdr.orig/font.h vdr/font.h
+--- vdr.orig/font.h	2004-07-17 17:27:25.000000000 +0200
++++ vdr/font.h	2004-08-01 13:40:47.000000000 +0200
+@@ -12,13 +12,17 @@
+ 
+ enum eDvbFont {
+   fontOsd,
++  fontSml,
+   fontFix,
++  fontSym,
+ /* TODO as soon as we have the font files...
+   fontTtxSmall,
+   fontTtxLarge,
+ */
+   };
+ 
++#define fontOsd2 fontSml
++
+ class cFont {
+ public:
+   enum { NUMCHARS = 256 };
+diff -Nur vdr.orig/fontsml.c vdr/fontsml.c
+--- vdr.orig/fontsml.c	1970-01-01 01:00:00.000000000 +0100
++++ vdr/fontsml.c	2004-08-01 13:40:47.000000000 +0200
+@@ -0,0 +1,5602 @@
++cFont::tPixelData FontSml[][24] = {
++  {             // 32
++     5, 22,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++  },
++  {             // 33
++     6, 22,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000010,  // ..*...
++     0x00000010,  // ..*...
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 34
++     5, 22,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000036,  // **.**
++     0x00000036,  // **.**
++     0x00000036,  // **.**
++     0x00000036,  // **.**
++     0x00000036,  // **.**
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++  },
++  {             // 35
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000048,  // ....*..*..
++     0x00000048,  // ....*..*..
++     0x00000048,  // ....*..*..
++     0x000003FE,  // .*********
++     0x000003FE,  // .*********
++     0x00000090,  // ...*..*...
++     0x00000090,  // ...*..*...
++     0x00000090,  // ...*..*...
++     0x000007FC,  // *********.
++     0x000007FC,  // *********.
++     0x00000120,  // ..*..*....
++     0x00000120,  // ..*..*....
++     0x00000120,  // ..*..*....
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 36
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000020,  // .....*....
++     0x000000F8,  // ...*****..
++     0x000001FC,  // ..*******.
++     0x0000032C,  // .**..*.**.
++     0x00000320,  // .**..*....
++     0x000003A0,  // .***.*....
++     0x000001E0,  // ..****....
++     0x000000F8,  // ...*****..
++     0x0000003C,  // .....****.
++     0x00000026,  // .....*..**
++     0x00000326,  // .**..*..**
++     0x000003AE,  // .***.*.***
++     0x000001FC,  // ..*******.
++     0x000000F8,  // ...*****..
++     0x00000020,  // .....*....
++     0x00000020,  // .....*....
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 37
++     16, 22,
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00007860,  // ..****....**....
++     0x0000CCC0,  // .**..**..**.....
++     0x0000CCC0,  // .**..**..**.....
++     0x0000CD80,  // .**..**.**......
++     0x0000CD80,  // .**..**.**......
++     0x00007B00,  // ..****.**.......
++     0x00000300,  // .......**.......
++     0x00000678,  // ......**..****..
++     0x000006CC,  // ......**.**..**.
++     0x00000CCC,  // .....**..**..**.
++     0x00000CCC,  // .....**..**..**.
++     0x000018CC,  // ....**...**..**.
++     0x00001878,  // ....**....****..
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++  },
++  {             // 38
++     13, 22,
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000780,  // ...****......
++     0x00000FC0,  // ..******.....
++     0x00000CC0,  // ..**..**.....
++     0x00000CC0,  // ..**..**.....
++     0x00000780,  // ...****......
++     0x00000F80,  // ..*****......
++     0x00001DD8,  // .***.***.**..
++     0x000018D8,  // .**...**.**..
++     0x00001878,  // .**....****..
++     0x00001870,  // .**....***...
++     0x00001CF8,  // .***..*****..
++     0x00000FDC,  // ..******.***.
++     0x0000078E,  // ...****...***
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 39
++     3, 22,
++     0x00000000,  // ...
++     0x00000000,  // ...
++     0x00000000,  // ...
++     0x00000000,  // ...
++     0x00000004,  // .*.
++     0x00000004,  // .*.
++     0x00000004,  // .*.
++     0x00000004,  // .*.
++     0x00000004,  // .*.
++     0x00000000,  // ...
++     0x00000000,  // ...
++     0x00000000,  // ...
++     0x00000000,  // ...
++     0x00000000,  // ...
++     0x00000000,  // ...
++     0x00000000,  // ...
++     0x00000000,  // ...
++     0x00000000,  // ...
++     0x00000000,  // ...
++     0x00000000,  // ...
++     0x00000000,  // ...
++     0x00000000,  // ...
++  },
++  {             // 40
++     6, 22,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000008,  // ...*..
++     0x00000018,  // ..**..
++     0x00000030,  // .**...
++     0x00000030,  // .**...
++     0x00000060,  // **....
++     0x00000060,  // **....
++     0x00000060,  // **....
++     0x00000060,  // **....
++     0x00000060,  // **....
++     0x00000060,  // **....
++     0x00000060,  // **....
++     0x00000060,  // **....
++     0x00000060,  // **....
++     0x00000060,  // **....
++     0x00000030,  // .**...
++     0x00000030,  // .**...
++     0x00000018,  // ..**..
++     0x00000008,  // ...*..
++  },
++  {             // 41
++     6, 22,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000020,  // .*....
++     0x00000030,  // .**...
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x0000000C,  // ...**.
++     0x0000000C,  // ...**.
++     0x0000000C,  // ...**.
++     0x0000000C,  // ...**.
++     0x0000000C,  // ...**.
++     0x0000000C,  // ...**.
++     0x0000000C,  // ...**.
++     0x0000000C,  // ...**.
++     0x0000000C,  // ...**.
++     0x0000000C,  // ...**.
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000030,  // .**...
++     0x00000020,  // .*....
++  },
++  {             // 42
++     7, 22,
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000010,  // ...*...
++     0x00000054,  // .*.*.*.
++     0x0000007C,  // .*****.
++     0x00000010,  // ...*...
++     0x0000007C,  // .*****.
++     0x00000054,  // .*.*.*.
++     0x00000010,  // ...*...
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++  },
++  {             // 43
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x000003FC,  // .********.
++     0x000003FC,  // .********.
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 44
++     5, 22,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000010,  // .*...
++     0x00000000,  // .....
++  },
++  {             // 45
++     6, 22,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x0000007C,  // *****. added by hand to avoid flickering!!!
++     0x0000007C,  // *****.
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 46
++     5, 22,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++  },
++  {             // 47
++     5, 22,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000006,  // ...**
++     0x00000006,  // ...**
++     0x00000006,  // ...**
++     0x00000006,  // ...**
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000030,  // **...
++     0x00000030,  // **...
++     0x00000030,  // **...
++     0x00000030,  // **...
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++  },
++  {             // 48
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000F0,  // ...****...
++     0x000001F8,  // ..******..
++     0x00000198,  // ..**..**..
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x00000198,  // ..**..**..
++     0x000001F8,  // ..******..
++     0x000000F0,  // ...****...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 49
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000030,  // .....**...
++     0x000001F0,  // ..*****...
++     0x000001F0,  // ..*****...
++     0x00000030,  // .....**...
++     0x00000030,  // .....**...
++     0x00000030,  // .....**...
++     0x00000030,  // .....**...
++     0x00000030,  // .....**...
++     0x00000030,  // .....**...
++     0x00000030,  // .....**...
++     0x00000030,  // .....**...
++     0x00000030,  // .....**...
++     0x00000030,  // .....**...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 50
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000F0,  // ...****...
++     0x000003F8,  // .*******..
++     0x0000030C,  // .**....**.
++     0x0000000C,  // .......**.
++     0x0000001C,  // ......***.
++     0x00000038,  // .....***..
++     0x00000070,  // ....***...
++     0x000000E0,  // ...***....
++     0x000001C0,  // ..***.....
++     0x00000380,  // .***......
++     0x00000300,  // .**.......
++     0x000003FC,  // .********.
++     0x000003FC,  // .********.
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 51
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000F8,  // ...*****..
++     0x000001FC,  // ..*******.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x00000018,  // ......**..
++     0x00000070,  // ....***...
++     0x00000078,  // ....****..
++     0x0000001C,  // ......***.
++     0x0000000C,  // .......**.
++     0x0000030C,  // .**....**.
++     0x0000031C,  // .**...***.
++     0x000001F8,  // ..******..
++     0x000000F0,  // ...****...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 52
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000018,  // ......**..
++     0x00000038,  // .....***..
++     0x00000078,  // ....****..
++     0x000000D8,  // ...**.**..
++     0x00000198,  // ..**..**..
++     0x00000198,  // ..**..**..
++     0x00000318,  // .**...**..
++     0x00000618,  // **....**..
++     0x000007FC,  // *********.
++     0x000007FC,  // *********.
++     0x00000018,  // ......**..
++     0x00000018,  // ......**..
++     0x00000018,  // ......**..
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 53
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000003F8,  // .*******..
++     0x000003F8,  // .*******..
++     0x00000300,  // .**.......
++     0x00000300,  // .**.......
++     0x000003F0,  // .******...
++     0x000003F8,  // .*******..
++     0x0000031C,  // .**...***.
++     0x0000000C,  // .......**.
++     0x0000000C,  // .......**.
++     0x0000030C,  // .**....**.
++     0x0000031C,  // .**...***.
++     0x000003F8,  // .*******..
++     0x000001F0,  // ..*****...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 54
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000F0,  // ...****...
++     0x000001FC,  // ..*******.
++     0x0000018C,  // ..**...**.
++     0x00000300,  // .**.......
++     0x00000300,  // .**.......
++     0x00000370,  // .**.***...
++     0x000003F8,  // .*******..
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000038C,  // .***...**.
++     0x000001F8,  // ..******..
++     0x000000F0,  // ...****...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 55
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000003FC,  // .********.
++     0x000003FC,  // .********.
++     0x0000000C,  // .......**.
++     0x00000018,  // ......**..
++     0x00000030,  // .....**...
++     0x00000030,  // .....**...
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x000000C0,  // ...**.....
++     0x000000C0,  // ...**.....
++     0x00000180,  // ..**......
++     0x00000180,  // ..**......
++     0x00000180,  // ..**......
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 56
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000F0,  // ...****...
++     0x000001F8,  // ..******..
++     0x0000039C,  // .***..***.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x00000198,  // ..**..**..
++     0x000001F8,  // ..******..
++     0x0000039C,  // .***..***.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000039C,  // .***..***.
++     0x000001F8,  // ..******..
++     0x000000F0,  // ...****...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 57
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000F0,  // ...****...
++     0x000001F8,  // ..******..
++     0x0000031C,  // .**...***.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x000001FC,  // ..*******.
++     0x000000EC,  // ...***.**.
++     0x0000000C,  // .......**.
++     0x0000000C,  // .......**.
++     0x00000318,  // .**...**..
++     0x000003F8,  // .*******..
++     0x000001F0,  // ..*****...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 58
++     5, 22,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++  },
++  {             // 59
++     5, 22,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000008,  // ..*..
++     0x00000008,  // ..*..
++     0x00000010,  // .*...
++     0x00000000,  // .....
++  },
++  {             // 60
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x0000000C,  // .......**.
++     0x0000003C,  // .....****.
++     0x000000F0,  // ...****...
++     0x000001C0,  // ..***.....
++     0x00000300,  // .**.......
++     0x000001C0,  // ..***.....
++     0x000000F0,  // ...****...
++     0x0000003C,  // .....****.
++     0x0000000C,  // .......**.
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 61
++     11, 22,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000003F8,  // ..*******..
++     0x000003F8,  // ..*******..
++     0x00000000,  // ...........
++     0x000003F8,  // ..*******..
++     0x000003F8,  // ..*******..
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 62
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000300,  // .**.......
++     0x000003C0,  // .****.....
++     0x000000F0,  // ...****...
++     0x00000038,  // .....***..
++     0x0000000C,  // .......**.
++     0x00000038,  // .....***..
++     0x000000F0,  // ...****...
++     0x000003C0,  // .****.....
++     0x00000300,  // .**.......
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 63
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000001F0,  // ..*****...
++     0x000003F8,  // .*******..
++     0x00000318,  // .**...**..
++     0x00000318,  // .**...**..
++     0x00000038,  // .....***..
++     0x00000070,  // ....***...
++     0x000000E0,  // ...***....
++     0x000000C0,  // ...**.....
++     0x000000C0,  // ...**.....
++     0x000000C0,  // ...**.....
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000C0,  // ...**.....
++     0x000000C0,  // ...**.....
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 64
++     18, 22,
++     0x00000000,  // ..................
++     0x00000000,  // ..................
++     0x00000000,  // ..................
++     0x00000000,  // ..................
++     0x00000FC0,  // .......******.....
++     0x00003FF0,  // .....**********...
++     0x00007038,  // ....***......***..
++     0x0000C018,  // ...**.........**..
++     0x00018F4C,  // ..**...****.*..**.
++     0x00019DCC,  // ..**..***.***..**.
++     0x000318CC,  // .**...**...**..**.
++     0x0003318C,  // .**..**...**...**.
++     0x00033198,  // .**..**...**..**..
++     0x00033198,  // .**..**...**..**..
++     0x00033330,  // .**..**..**..**...
++     0x00033FE0,  // .**..*********....
++     0x00019DC0,  // ..**..***.***.....
++     0x0001C000,  // ..***.............
++     0x0000E000,  // ...***............
++     0x00007FC0,  // ....*********.....
++     0x00001F80,  // ......******......
++     0x00000000,  // ..................
++  },
++  {             // 65
++     13, 22,
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000180,  // .....**......
++     0x00000180,  // .....**......
++     0x000003C0,  // ....****.....
++     0x000003C0,  // ....****.....
++     0x00000660,  // ...**..**....
++     0x00000660,  // ...**..**....
++     0x00000C30,  // ..**....**...
++     0x00000C30,  // ..**....**...
++     0x00000FF0,  // ..********...
++     0x00001FF8,  // .**********..
++     0x00001818,  // .**......**..
++     0x00001818,  // .**......**..
++     0x0000300C,  // **........**.
++     0x0000300C,  // **........**.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 66
++     13, 22,
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00001FE0,  // .********....
++     0x00001FF0,  // .*********...
++     0x00001838,  // .**.....***..
++     0x00001818,  // .**......**..
++     0x00001818,  // .**......**..
++     0x00001830,  // .**.....**...
++     0x00001FF0,  // .*********...
++     0x00001FF8,  // .**********..
++     0x0000181C,  // .**......***.
++     0x0000180C,  // .**.......**.
++     0x0000180C,  // .**.......**.
++     0x0000181C,  // .**......***.
++     0x00001FF8,  // .**********..
++     0x00001FF0,  // .*********...
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 67
++     14, 22,
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x000003E0,  // .....*****....
++     0x00000FF8,  // ...*********..
++     0x00001C1C,  // ..***.....***.
++     0x0000180C,  // ..**.......**.
++     0x00003800,  // .***..........
++     0x00003000,  // .**...........
++     0x00003000,  // .**...........
++     0x00003000,  // .**...........
++     0x00003000,  // .**...........
++     0x00003800,  // .***..........
++     0x0000180C,  // ..**.......**.
++     0x00001C1C,  // ..***.....***.
++     0x00000FF8,  // ...*********..
++     0x000003E0,  // .....*****....
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++  },
++  {             // 68
++     14, 22,
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00003FE0,  // .*********....
++     0x00003FF0,  // .**********...
++     0x00003038,  // .**......***..
++     0x00003018,  // .**.......**..
++     0x0000300C,  // .**........**.
++     0x0000300C,  // .**........**.
++     0x0000300C,  // .**........**.
++     0x0000300C,  // .**........**.
++     0x0000300C,  // .**........**.
++     0x0000300C,  // .**........**.
++     0x00003018,  // .**.......**..
++     0x00003038,  // .**......***..
++     0x00003FF0,  // .**********...
++     0x00003FE0,  // .*********....
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++  },
++  {             // 69
++     13, 22,
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000FFC,  // ..**********.
++     0x00000FFC,  // ..**********.
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000FF8,  // ..*********..
++     0x00000FF8,  // ..*********..
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000FFC,  // ..**********.
++     0x00000FFC,  // ..**********.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 70
++     12, 22,
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x000007FC,  // ..*********.
++     0x000007FC,  // ..*********.
++     0x00000600,  // ..**........
++     0x00000600,  // ..**........
++     0x00000600,  // ..**........
++     0x00000600,  // ..**........
++     0x000007F8,  // ..********..
++     0x000007F8,  // ..********..
++     0x00000600,  // ..**........
++     0x00000600,  // ..**........
++     0x00000600,  // ..**........
++     0x00000600,  // ..**........
++     0x00000600,  // ..**........
++     0x00000600,  // ..**........
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++  },
++  {             // 71
++     15, 22,
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x000007E0,  // .....******....
++     0x00001FF8,  // ...**********..
++     0x0000381C,  // ..***......***.
++     0x0000300C,  // ..**........**.
++     0x0000700C,  // .***........**.
++     0x00006000,  // .**............
++     0x00006000,  // .**............
++     0x0000607C,  // .**......*****.
++     0x0000607C,  // .**......*****.
++     0x0000700C,  // .***........**.
++     0x0000300C,  // ..**........**.
++     0x0000381C,  // ..***......***.
++     0x00001FFC,  // ...***********.
++     0x000007EC,  // .....******.**.
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++  },
++  {             // 72
++     14, 22,
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003FF8,  // .***********..
++     0x00003FF8,  // .***********..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++  },
++  {             // 73
++     6, 22,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 74
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000018,  // ......**..
++     0x00000018,  // ......**..
++     0x00000018,  // ......**..
++     0x00000018,  // ......**..
++     0x00000018,  // ......**..
++     0x00000018,  // ......**..
++     0x00000018,  // ......**..
++     0x00000018,  // ......**..
++     0x00000018,  // ......**..
++     0x00000618,  // **....**..
++     0x00000618,  // **....**..
++     0x00000738,  // ***..***..
++     0x000003F0,  // .******...
++     0x000001E0,  // ..****....
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 75
++     13, 22,
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x0000181C,  // ..**......***.
++     0x00001838,  // ..**.....***..
++     0x00001870,  // ..**....***...
++     0x000018E0,  // ..**...***....
++     0x000019C0,  // ..**..***.....
++     0x00001B80,  // ..**.***......
++     0x00001F00,  // ..*****.......
++     0x00001F80,  // ..******......
++     0x000019C0,  // ..**..***.....
++     0x000018E0,  // ..**...***....
++     0x00001870,  // ..**....***...
++     0x00001838,  // ..**.....***..
++     0x0000181C,  // ..**......***.
++     0x0000180E,  // ..**.......***
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++  },
++  {             // 76
++     11, 22,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000600,  // .**........
++     0x00000600,  // .**........
++     0x00000600,  // .**........
++     0x00000600,  // .**........
++     0x00000600,  // .**........
++     0x00000600,  // .**........
++     0x00000600,  // .**........
++     0x00000600,  // .**........
++     0x00000600,  // .**........
++     0x00000600,  // .**........
++     0x00000600,  // .**........
++     0x00000600,  // .**........
++     0x000007FC,  // .*********.
++     0x000007FC,  // .*********.
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 77
++     16, 22,
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x0000C00C,  // .**..........**.
++     0x0000C00C,  // .**..........**.
++     0x0000E01C,  // .***........***.
++     0x0000E01C,  // .***........***.
++     0x0000F03C,  // .****......****.
++     0x0000F03C,  // .****......****.
++     0x0000D86C,  // .**.**....**.**.
++     0x0000D86C,  // .**.**....**.**.
++     0x0000CCCC,  // .**..**..**..**.
++     0x0000CCCC,  // .**..**..**..**.
++     0x0000C48C,  // .**...*..*...**.
++     0x0000C78C,  // .**...****...**.
++     0x0000C30C,  // .**....**....**.
++     0x0000C30C,  // .**....**....**.
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++  },
++  {             // 78
++     14, 22,
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00003018,  // .**.......**..
++     0x00003818,  // .***......**..
++     0x00003C18,  // .****.....**..
++     0x00003C18,  // .****.....**..
++     0x00003618,  // .**.**....**..
++     0x00003318,  // .**..**...**..
++     0x00003318,  // .**..**...**..
++     0x00003198,  // .**...**..**..
++     0x00003198,  // .**...**..**..
++     0x000030D8,  // .**....**.**..
++     0x00003078,  // .**.....****..
++     0x00003078,  // .**.....****..
++     0x00003038,  // .**......***..
++     0x00003018,  // .**.......**..
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++  },
++  {             // 79
++     15, 22,
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x000007C0,  // .....*****.....
++     0x00001FF0,  // ...*********...
++     0x00003838,  // ..***.....***..
++     0x00003018,  // ..**.......**..
++     0x0000701C,  // .***.......***.
++     0x0000600C,  // .**.........**.
++     0x0000600C,  // .**.........**.
++     0x0000600C,  // .**.........**.
++     0x0000600C,  // .**.........**.
++     0x0000701C,  // .***.......***.
++     0x00003018,  // ..**.......**..
++     0x00003838,  // ..***.....***..
++     0x00001FF0,  // ...*********...
++     0x000007C0,  // .....*****.....
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++  },
++  {             // 80
++     13, 22,
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000FF0,  // ..********...
++     0x00000FF8,  // ..*********..
++     0x00000C1C,  // ..**.....***.
++     0x00000C0C,  // ..**......**.
++     0x00000C0C,  // ..**......**.
++     0x00000C1C,  // ..**.....***.
++     0x00000FF8,  // ..*********..
++     0x00000FF0,  // ..********...
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 81
++     15, 22,
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x000007C0,  // .....*****.....
++     0x00001FF0,  // ...*********...
++     0x00003838,  // ..***.....***..
++     0x00003018,  // ..**.......**..
++     0x0000701C,  // .***.......***.
++     0x0000600C,  // .**.........**.
++     0x0000600C,  // .**.........**.
++     0x0000600C,  // .**.........**.
++     0x0000600C,  // .**.........**.
++     0x000070DC,  // .***....**.***.
++     0x000030D8,  // ..**....**.**..
++     0x00003878,  // ..***....****..
++     0x00001FF0,  // ...*********...
++     0x000007D8,  // .....*****.**..
++     0x00000018,  // ...........**..
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++  },
++  {             // 82
++     14, 22,
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00003FE0,  // .*********....
++     0x00003FF0,  // .**********...
++     0x00003038,  // .**......***..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003038,  // .**......***..
++     0x00003FF0,  // .**********...
++     0x00003FE0,  // .*********....
++     0x00003030,  // .**......**...
++     0x00003030,  // .**......**...
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++  },
++  {             // 83
++     13, 22,
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x000003C0,  // ....****.....
++     0x00000FF0,  // ..********...
++     0x00001C38,  // .***....***..
++     0x00001818,  // .**......**..
++     0x00001C00,  // .***.........
++     0x00000F80,  // ..*****......
++     0x000003E0,  // ....*****....
++     0x00000070,  // .......***...
++     0x00000038,  // ........***..
++     0x00000018,  // .........**..
++     0x00001818,  // .**......**..
++     0x00001C38,  // .***....***..
++     0x00000FF0,  // ..********...
++     0x000007E0,  // ...******....
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 84
++     12, 22,
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000FFC,  // .**********.
++     0x00000FFC,  // .**********.
++     0x000000C0,  // .....**.....
++     0x000000C0,  // .....**.....
++     0x000000C0,  // .....**.....
++     0x000000C0,  // .....**.....
++     0x000000C0,  // .....**.....
++     0x000000C0,  // .....**.....
++     0x000000C0,  // .....**.....
++     0x000000C0,  // .....**.....
++     0x000000C0,  // .....**.....
++     0x000000C0,  // .....**.....
++     0x000000C0,  // .....**.....
++     0x000000C0,  // .....**.....
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++  },
++  {             // 85
++     14, 22,
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00001830,  // ..**.....**...
++     0x00001FF0,  // ..*********...
++     0x000007C0,  // ....*****.....
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++  },
++  {             // 86
++     13, 22,
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x0000300C,  // **........**.
++     0x0000300C,  // **........**.
++     0x00001818,  // .**......**..
++     0x00001818,  // .**......**..
++     0x00001818,  // .**......**..
++     0x00000C30,  // ..**....**...
++     0x00000C30,  // ..**....**...
++     0x00000C30,  // ..**....**...
++     0x00000660,  // ...**..**....
++     0x00000660,  // ...**..**....
++     0x00000660,  // ...**..**....
++     0x000003C0,  // ....****.....
++     0x000003C0,  // ....****.....
++     0x00000180,  // .....**......
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 87
++     18, 22,
++     0x00000000,  // ..................
++     0x00000000,  // ..................
++     0x00000000,  // ..................
++     0x00000000,  // ..................
++     0x0003060C,  // .**.....**.....**.
++     0x0003060C,  // .**.....**.....**.
++     0x0003060C,  // .**.....**.....**.
++     0x00030F0C,  // .**....****....**.
++     0x00018F18,  // ..**...****...**..
++     0x00018918,  // ..**...*..*...**..
++     0x00019998,  // ..**..**..**..**..
++     0x00019998,  // ..**..**..**..**..
++     0x0000D9B0,  // ...**.**..**.**...
++     0x0000D9B0,  // ...**.**..**.**...
++     0x0000D0B0,  // ...**.*....*.**...
++     0x000070E0,  // ....***....***....
++     0x00006060,  // ....**......**....
++     0x00006060,  // ....**......**....
++     0x00000000,  // ..................
++     0x00000000,  // ..................
++     0x00000000,  // ..................
++     0x00000000,  // ..................
++  },
++  {             // 88
++     13, 22,
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x0000180C,  // .**.......**.
++     0x0000180C,  // .**.......**.
++     0x00000C18,  // ..**.....**..
++     0x00000E38,  // ..***...***..
++     0x00000630,  // ...**...**...
++     0x00000360,  // ....**.**....
++     0x000001C0,  // .....***.....
++     0x000001C0,  // .....***.....
++     0x00000360,  // ....**.**....
++     0x00000630,  // ...**...**...
++     0x00000E38,  // ..***...***..
++     0x00000C18,  // ..**.....**..
++     0x0000180C,  // .**.......**.
++     0x0000180C,  // .**.......**.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 89
++     13, 22,
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x0000300C,  // **........**.
++     0x0000300C,  // **........**.
++     0x00001818,  // .**......**..
++     0x00001818,  // .**......**..
++     0x00000C30,  // ..**....**...
++     0x00000E70,  // ..***..***...
++     0x00000660,  // ...**..**....
++     0x000003C0,  // ....****.....
++     0x00000180,  // .....**......
++     0x00000180,  // .....**......
++     0x00000180,  // .....**......
++     0x00000180,  // .....**......
++     0x00000180,  // .....**......
++     0x00000180,  // .....**......
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 90
++     12, 22,
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000FFC,  // .**********.
++     0x00000FFC,  // .**********.
++     0x0000000C,  // .........**.
++     0x00000018,  // ........**..
++     0x00000030,  // .......**...
++     0x00000060,  // ......**....
++     0x000000C0,  // .....**.....
++     0x000001C0,  // ....***.....
++     0x00000180,  // ....**......
++     0x00000300,  // ...**.......
++     0x00000600,  // ..**........
++     0x00000C00,  // .**.........
++     0x00000FFC,  // .**********.
++     0x00000FFC,  // .**********.
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++  },
++  {             // 91
++     5, 22,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x0000003C,  // ****.
++     0x0000003C,  // ****.
++     0x00000030,  // **...
++     0x00000030,  // **...
++     0x00000030,  // **...
++     0x00000030,  // **...
++     0x00000030,  // **...
++     0x00000030,  // **...
++     0x00000030,  // **...
++     0x00000030,  // **...
++     0x00000030,  // **...
++     0x00000030,  // **...
++     0x00000030,  // **...
++     0x00000030,  // **...
++     0x00000030,  // **...
++     0x00000030,  // **...
++     0x0000003C,  // ****.
++     0x0000003C,  // ****.
++  },
++  {             // 92
++     5, 22,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000030,  // **...
++     0x00000030,  // **...
++     0x00000030,  // **...
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x00000006,  // ...**
++     0x00000006,  // ...**
++     0x00000006,  // ...**
++     0x00000006,  // ...**
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++  },
++  {             // 93
++     5, 22,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x0000003C,  // ****.
++     0x0000003C,  // ****.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000003C,  // ****.
++     0x0000003C,  // ****.
++  },
++  {             // 94
++     9, 22,
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000020,  // ....*....
++     0x00000070,  // ...***...
++     0x000000D8,  // ..**.**..
++     0x000000D8,  // ..**.**..
++     0x0000018C,  // .**...**.
++     0x0000018C,  // .**...**.
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++  },
++  {             // 95
++     11, 22,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000FFE,  // ***********
++     0x00000FFE,  // ***********
++  },
++  {             // 96
++     4, 22,
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000018,  // **..
++     0x0000000C,  // .**.
++     0x00000006,  // ..**
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++  },
++  {             // 97
++     11, 22,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000003F0,  // ..******...
++     0x00000738,  // .***..***..
++     0x00000618,  // .**....**..
++     0x00000038,  // ......***..
++     0x000003F8,  // ..*******..
++     0x00000718,  // .***...**..
++     0x00000618,  // .**....**..
++     0x00000618,  // .**....**..
++     0x0000073C,  // .***..****.
++     0x000003CC,  // ..****..**.
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 98
++     11, 22,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000600,  // .**........
++     0x00000600,  // .**........
++     0x00000600,  // .**........
++     0x00000600,  // .**........
++     0x000006F0,  // .**.****...
++     0x000007F8,  // .********..
++     0x00000718,  // .***...**..
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x00000718,  // .***...**..
++     0x000007F8,  // .********..
++     0x000006F0,  // .**.****...
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 99
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000F8,  // ...*****..
++     0x000001FC,  // ..*******.
++     0x0000018C,  // ..**...**.
++     0x00000300,  // .**.......
++     0x00000300,  // .**.......
++     0x00000300,  // .**.......
++     0x00000300,  // .**.......
++     0x0000018C,  // ..**...**.
++     0x000001FC,  // ..*******.
++     0x000000F8,  // ...*****..
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 100
++     11, 22,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x0000000C,  // ........**.
++     0x0000000C,  // ........**.
++     0x0000000C,  // ........**.
++     0x0000000C,  // ........**.
++     0x000001EC,  // ...****.**.
++     0x000003FC,  // ..********.
++     0x0000031C,  // ..**...***.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000031C,  // ..**...***.
++     0x000003FC,  // ..********.
++     0x000001EC,  // ...****.**.
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 101
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000F0,  // ...****...
++     0x000001F8,  // ..******..
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x000003FC,  // .********.
++     0x00000300,  // .**.......
++     0x00000300,  // .**.......
++     0x0000038C,  // .***...**.
++     0x000001FC,  // ..*******.
++     0x000000F0,  // ...****...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 102
++     6, 22,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x0000000E,  // ...***
++     0x0000001E,  // ..****
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x0000007E,  // ******
++     0x0000007E,  // ******
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 103
++     11, 22,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000001EC,  // ...****.**.
++     0x000003FC,  // ..********.
++     0x0000030C,  // ..**....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000031C,  // ..**...***.
++     0x000003FC,  // ..********.
++     0x000001EC,  // ...****.**.
++     0x0000000C,  // ........**.
++     0x00000318,  // ..**...**..
++     0x000003F8,  // ..*******..
++     0x000000E0,  // ....***....
++  },
++  {             // 104
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000300,  // .**.......
++     0x00000300,  // .**.......
++     0x00000300,  // .**.......
++     0x00000300,  // .**.......
++     0x00000378,  // .**.****..
++     0x000003FC,  // .********.
++     0x0000038C,  // .***...**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 105
++     4, 22,
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++  },
++  {             // 106
++     4, 22,
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000000C,  // ..**.
++     0x0000003C,  // ****.
++     0x00000038,  // ***..
++  },
++  {             // 107
++     9, 22,
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000180,  // .**......
++     0x00000180,  // .**......
++     0x00000180,  // .**......
++     0x00000180,  // .**......
++     0x0000018C,  // .**...**.
++     0x00000198,  // .**..**..
++     0x000001B0,  // .**.**...
++     0x000001E0,  // .****....
++     0x000001F0,  // .*****...
++     0x000001B0,  // .**.**...
++     0x00000198,  // .**..**..
++     0x0000019C,  // .**..***.
++     0x0000018C,  // .**...**.
++     0x0000018E,  // .**...***
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++  },
++  {             // 108
++     4, 22,
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++  },
++  {             // 109
++     16, 22,
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x0000DE78,  // .**.****..****..
++     0x0000FFFC,  // .**************.
++     0x0000E38C,  // .***...***...**.
++     0x0000C30C,  // .**....**....**.
++     0x0000C30C,  // .**....**....**.
++     0x0000C30C,  // .**....**....**.
++     0x0000C30C,  // .**....**....**.
++     0x0000C30C,  // .**....**....**.
++     0x0000C30C,  // .**....**....**.
++     0x0000C30C,  // .**....**....**.
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++     0x00000000,  // ................
++  },
++  {             // 110
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000378,  // .**.****..
++     0x000003FC,  // .********.
++     0x0000038C,  // .***...**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 111
++     11, 22,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000001F0,  // ...*****...
++     0x000003F8,  // ..*******..
++     0x00000318,  // ..**...**..
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x00000318,  // ..**...**..
++     0x000003F8,  // ..*******..
++     0x000001F0,  // ...*****...
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 112
++     11, 22,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000006F0,  // .**.****...
++     0x000007F8,  // .********..
++     0x00000718,  // .***...**..
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x00000718,  // .***...**..
++     0x000007F8,  // .********..
++     0x000006F0,  // .**.****...
++     0x00000600,  // .**........
++     0x00000600,  // .**........
++     0x00000600,  // .**........
++     0x00000600,  // .**........
++  },
++  {             // 113
++     11, 22,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000001EC,  // ...****.**.
++     0x000003FC,  // ..********.
++     0x0000031C,  // ..**...***.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000031C,  // ..**...***.
++     0x000003FC,  // ..********.
++     0x000001EC,  // ...****.**.
++     0x0000000C,  // ........**.
++     0x0000000C,  // ........**.
++     0x0000000C,  // ........**.
++     0x0000000C,  // ........**.
++  },
++  {             // 114
++     6, 22,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000036,  // .**.**
++     0x00000036,  // .**.**
++     0x00000038,  // .***..
++     0x00000030,  // .**...
++     0x00000030,  // .**...
++     0x00000030,  // .**...
++     0x00000030,  // .**...
++     0x00000030,  // .**...
++     0x00000030,  // .**...
++     0x00000030,  // .**...
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 115
++     9, 22,
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000078,  // ...****..
++     0x000000FC,  // ..******.
++     0x0000018C,  // .**...**.
++     0x00000180,  // .**......
++     0x000001F8,  // .******..
++     0x0000007C,  // ...*****.
++     0x0000000C,  // ......**.
++     0x0000018C,  // .**...**.
++     0x000001F8,  // .******..
++     0x000000F0,  // ..****...
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++  },
++  {             // 116
++     6, 22,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x0000007E,  // ******
++     0x0000007E,  // ******
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x0000001E,  // ..****
++     0x0000000E,  // ...***
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 117
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000031C,  // .**...***.
++     0x000003FC,  // .********.
++     0x000001EC,  // ..****.**.
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 118
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x00000198,  // ..**..**..
++     0x00000198,  // ..**..**..
++     0x00000198,  // ..**..**..
++     0x00000090,  // ...*..*...
++     0x000000F0,  // ...****...
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 119
++     14, 22,
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x0000318C,  // .**...**...**.
++     0x0000318C,  // .**...**...**.
++     0x0000318C,  // .**...**...**.
++     0x00001998,  // ..**..**..**..
++     0x00001998,  // ..**..**..**..
++     0x00001A58,  // ..**.*..*.**..
++     0x00000A50,  // ...*.*..*.*...
++     0x00000E70,  // ...***..***...
++     0x00000660,  // ....**..**....
++     0x00000660,  // ....**..**....
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++  },
++  {             // 120
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x0000030C,  // .**....**.
++     0x0000039C,  // .***..***.
++     0x00000198,  // ..**..**..
++     0x000000F0,  // ...****...
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x000000F0,  // ...****...
++     0x00000198,  // ..**..**..
++     0x0000039C,  // .***..***.
++     0x0000030C,  // .**....**.
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 121
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x00000198,  // ..**..**..
++     0x00000198,  // ..**..**..
++     0x00000198,  // ..**..**..
++     0x00000090,  // ...*..*...
++     0x000000F0,  // ...****...
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x000001C0,  // ..***.....
++     0x000001C0,  // ..***.....
++  },
++  {             // 122
++     9, 22,
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x000001FC,  // .*******.
++     0x000001FC,  // .*******.
++     0x0000000C,  // ......**.
++     0x00000018,  // .....**..
++     0x00000030,  // ....**...
++     0x00000060,  // ...**....
++     0x000000C0,  // ..**.....
++     0x00000180,  // .**......
++     0x000001FC,  // .*******.
++     0x000001FC,  // .*******.
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++  },
++  {             // 123
++     6, 22,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x0000000C,  // ....**.
++     0x00000018,  // ...**..
++     0x00000030,  // ..**...
++     0x00000030,  // ..**...
++     0x00000030,  // ..**...
++     0x00000030,  // ..**...
++     0x00000030,  // ..**...
++     0x00000060,  // .**....
++     0x000000C0,  // **.....
++     0x00000060,  // .**....
++     0x00000030,  // ..**...
++     0x00000030,  // ..**...
++     0x00000030,  // ..**...
++     0x00000030,  // ..**...
++     0x00000030,  // ..**...
++     0x00000030,  // ..**...
++     0x00000018,  // ...**..
++     0x0000000C,  // ....**.
++  },
++  {             // 124
++     5, 22,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++  },
++  {             // 125
++     6, 22,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000060,  // **....
++     0x00000030,  // .**...
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x0000000C,  // ...**.
++     0x00000006,  // ....**
++     0x0000000C,  // ...**.
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000030,  // .**...
++     0x00000060,  // **....
++  },
++  {             // 126
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000001CC,  // ..***..**.
++     0x000003FC,  // .********.
++     0x00000338,  // .**..***..
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 127
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 128
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 129
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 130
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 131
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 132
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 133
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 134
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 135
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 136
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 137
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 138
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 139
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 140
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 141
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 142
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 143
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 144
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 145
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 146
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 147
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 148
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 149
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 150
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 151
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 152
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 153
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 154
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 155
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 156
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 157
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 158
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 159
++     0, 22,
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++     0x00000000,  // 
++  },
++  {             // 160
++     5, 22,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++  },
++  {             // 161
++     6, 22,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000008,  // ...*..
++     0x00000008,  // ...*..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++  },
++  {             // 162
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000010,  // ......*...
++     0x00000010,  // ......*...
++     0x000000F8,  // ...*****..
++     0x000001FC,  // ..*******.
++     0x000001AC,  // ..**.*.**.
++     0x00000320,  // .**..*....
++     0x00000320,  // .**..*....
++     0x00000320,  // .**..*....
++     0x00000320,  // .**..*....
++     0x000001AC,  // ..**.*.**.
++     0x000001FC,  // ..*******.
++     0x000000F8,  // ...*****..
++     0x00000040,  // ....*.....
++     0x00000040,  // ....*.....
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 163
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000F0,  // ...****...
++     0x000001F8,  // ..******..
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x00000300,  // .**.......
++     0x00000180,  // ..**......
++     0x000003F0,  // .******...
++     0x000000C0,  // ...**.....
++     0x000000C0,  // ...**.....
++     0x00000180,  // ..**......
++     0x00000304,  // .**.....*.
++     0x000007FC,  // *********.
++     0x000006F8,  // **.*****..
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 164
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x0000030C,  // .**....**.
++     0x000003FC,  // .********.
++     0x00000198,  // ..**..**..
++     0x00000198,  // ..**..**..
++     0x00000198,  // ..**..**..
++     0x000003FC,  // .********.
++     0x0000030C,  // .**....**.
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 165
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x00000198,  // ..**..**..
++     0x00000198,  // ..**..**..
++     0x00000198,  // ..**..**..
++     0x000000F0,  // ...****...
++     0x000003FC,  // .********.
++     0x00000060,  // ....**....
++     0x000003FC,  // .********.
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 166
++     5, 22,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++  },
++  {             // 167
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000F0,  // ...****...
++     0x000001F8,  // ..******..
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x000003C0,  // .****.....
++     0x000001F0,  // ..*****...
++     0x000001B8,  // ..**.***..
++     0x0000031C,  // .**...***.
++     0x0000030C,  // .**....**.
++     0x0000038C,  // .***...**.
++     0x000001CC,  // ..***..**.
++     0x000000F8,  // ...*****..
++     0x00000038,  // .....***..
++     0x0000001C,  // ......***.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x000001F8,  // ..******..
++     0x000000F0,  // ...****...
++  },
++  {             // 168
++     6, 22,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x0000006C,  // **.**.
++     0x0000006C,  // **.**.
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 169
++     15, 22,
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x000007C0,  // .....*****.....
++     0x00001830,  // ...**.....**...
++     0x00002008,  // ..*.........*..
++     0x00002388,  // ..*...***...*..
++     0x00004444,  // .*...*...*...*.
++     0x00004844,  // .*..*....*...*.
++     0x00004804,  // .*..*........*.
++     0x00004804,  // .*..*........*.
++     0x00004804,  // .*..*........*.
++     0x00004444,  // .*...*...*...*.
++     0x00002388,  // ..*...***...*..
++     0x00002008,  // ..*.........*..
++     0x00001830,  // ...**.....**...
++     0x000007C0,  // .....*****.....
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++  },
++  {             // 170
++     7, 22,
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000038,  // ..***..
++     0x0000004C,  // .*..**.
++     0x0000001C,  // ...***.
++     0x00000024,  // ..*..*.
++     0x0000006C,  // .**.**.
++     0x00000034,  // ..**.*.
++     0x00000000,  // .......
++     0x0000007C,  // .*****.
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++  },
++  {             // 171
++     9, 22,
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x0000006C,  // ...**.**.
++     0x000000D8,  // ..**.**..
++     0x000001B0,  // .**.**...
++     0x000001B0,  // .**.**...
++     0x000000D8,  // ..**.**..
++     0x0000006C,  // ...**.**.
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++  },
++  {             // 172
++     11, 22,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000007FC,  // .*********.
++     0x000007FC,  // .*********.
++     0x0000000C,  // ........**.
++     0x0000000C,  // ........**.
++     0x0000000C,  // ........**.
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 173
++     6, 22,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x0000007C,  // *****.
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 174
++     14, 22,
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x000007C0,  // ....*****.....
++     0x00001830,  // ..**.....**...
++     0x00002008,  // .*.........*..
++     0x000027C8,  // .*..*****..*..
++     0x00004424,  // *...*....*..*.
++     0x00004424,  // *...*....*..*.
++     0x00004424,  // *...*....*..*.
++     0x000047C4,  // *...*****...*.
++     0x00004484,  // *...*..*....*.
++     0x00004444,  // *...*...*...*.
++     0x00002428,  // .*..*....*.*..
++     0x00002008,  // .*.........*..
++     0x00001830,  // ..**.....**...
++     0x000007C0,  // ....*****.....
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++  },
++  {             // 175
++     5, 22,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x0000003E,  // *****
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++  },
++  {             // 176
++     7, 22,
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000038,  // ..***..
++     0x0000006C,  // .**.**.
++     0x00000044,  // .*...*.
++     0x0000006C,  // .**.**.
++     0x00000038,  // ..***..
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++  },
++  {             // 177
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x000003FC,  // .********.
++     0x000003FC,  // .********.
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x00000000,  // ..........
++     0x000003FC,  // .********.
++     0x000003FC,  // .********.
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 178
++     6, 22,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000038,  // .***..
++     0x0000007C,  // *****.
++     0x0000004C,  // *..**.
++     0x0000000C,  // ...**.
++     0x00000018,  // ..**..
++     0x00000030,  // .**...
++     0x0000007C,  // *****.
++     0x0000007C,  // *****.
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 179
++     6, 22,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000038,  // .***..
++     0x0000007C,  // *****.
++     0x0000004C,  // *..**.
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x0000004C,  // *..**.
++     0x0000007C,  // *****.
++     0x00000038,  // .***..
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 180
++     4, 22,
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000006,  // ..**
++     0x0000000C,  // .**.
++     0x00000018,  // **..
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++  },
++  {             // 181
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000039C,  // .***..***.
++     0x000003FC,  // .********.
++     0x0000036C,  // .**.**.**.
++     0x00000300,  // .**.......
++     0x00000300,  // .**.......
++     0x00000300,  // .**.......
++     0x00000300,  // .**.......
++  },
++  {             // 182
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000FC,  // ...******.
++     0x000001C8,  // ..***..*..
++     0x000003C8,  // .****..*..
++     0x000003C8,  // .****..*..
++     0x000003C8,  // .****..*..
++     0x000003C8,  // .****..*..
++     0x000003C8,  // .****..*..
++     0x000001C8,  // ..***..*..
++     0x000000C8,  // ...**..*..
++     0x00000048,  // ....*..*..
++     0x00000048,  // ....*..*..
++     0x00000048,  // ....*..*..
++     0x00000048,  // ....*..*..
++     0x00000048,  // ....*..*..
++     0x00000048,  // ....*..*..
++     0x00000048,  // ....*..*..
++     0x00000048,  // ....*..*..
++     0x00000048,  // ....*..*..
++  },
++  {             // 183
++     4, 22,
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++  },
++  {             // 184
++     5, 22,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000018,  // .**..
++     0x0000001C,  // .***.
++     0x00000006,  // ...**
++     0x00000036,  // **.**
++     0x0000003C,  // ****.
++  },
++  {             // 185
++     6, 22,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000018,  // ..**..
++     0x00000078,  // ****..
++     0x00000078,  // ****..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 186
++     7, 22,
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000038,  // ..***..
++     0x0000006C,  // .**.**.
++     0x00000044,  // .*...*.
++     0x00000044,  // .*...*.
++     0x0000006C,  // .**.**.
++     0x00000038,  // ..***..
++     0x00000000,  // .......
++     0x0000007C,  // .*****.
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++     0x00000000,  // .......
++  },
++  {             // 187
++     9, 22,
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x000001B0,  // .**.**...
++     0x000000D8,  // ..**.**..
++     0x0000006C,  // ...**.**.
++     0x0000006C,  // ...**.**.
++     0x000000D8,  // ..**.**..
++     0x000001B0,  // .**.**...
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++  },
++  {             // 188
++     15, 22,
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00003030,  // ..**......**...
++     0x0000F030,  // ****......**...
++     0x0000F060,  // ****.....**....
++     0x000030C0,  // ..**....**.....
++     0x000030C0,  // ..**....**.....
++     0x00003188,  // ..**...**...*..
++     0x00003118,  // ..**...*...**..
++     0x00003338,  // ..**..**..***..
++     0x00000678,  // .....**..****..
++     0x000006D8,  // .....**.**.**..
++     0x00000CFC,  // ....**..******.
++     0x00001818,  // ...**......**..
++     0x00001818,  // ...**......**..
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++  },
++  {             // 189
++     15, 22,
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00003030,  // ..**......**...
++     0x0000F030,  // ****......**...
++     0x0000F060,  // ****.....**....
++     0x000030C0,  // ..**....**.....
++     0x000030C0,  // ..**....**.....
++     0x000031B8,  // ..**...**.***..
++     0x0000317C,  // ..**...*.*****.
++     0x0000334C,  // ..**..**.*..**.
++     0x0000060C,  // .....**.....**.
++     0x00000618,  // .....**....**..
++     0x00000C30,  // ....**....**...
++     0x0000187C,  // ...**....*****.
++     0x0000187C,  // ...**....*****.
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++  },
++  {             // 190
++     15, 22,
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00007030,  // .***......**...
++     0x0000F830,  // *****.....**...
++     0x00009860,  // *..**....**....
++     0x000030C0,  // ..**....**.....
++     0x000030C0,  // ..**....**.....
++     0x00009988,  // *..**..**...*..
++     0x0000F918,  // *****..*...**..
++     0x00007338,  // .***..**..***..
++     0x00000678,  // .....**..****..
++     0x000006D8,  // .....**.**.**..
++     0x00000CFC,  // ....**..******.
++     0x00001818,  // ...**......**..
++     0x00001818,  // ...**......**..
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++  },
++  {             // 191
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x000000E0,  // ...***....
++     0x000001C0,  // ..***.....
++     0x00000380,  // .***......
++     0x00000318,  // .**...**..
++     0x00000318,  // .**...**..
++     0x000003F8,  // .*******..
++     0x000001F0,  // ..*****...
++  },
++  {             // 192
++     13, 22,
++     0x00000600,  // ...**........
++     0x00000300,  // ....**.......
++     0x00000180,  // .....**......
++     0x00000000,  // .............
++     0x00000180,  // .....**......
++     0x00000180,  // .....**......
++     0x000003C0,  // ....****.....
++     0x000003C0,  // ....****.....
++     0x00000660,  // ...**..**....
++     0x00000660,  // ...**..**....
++     0x00000C30,  // ..**....**...
++     0x00000C30,  // ..**....**...
++     0x00000FF0,  // ..********...
++     0x00001FF8,  // .**********..
++     0x00001818,  // .**......**..
++     0x00001818,  // .**......**..
++     0x0000300C,  // **........**.
++     0x0000300C,  // **........**.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 193
++     13, 22,
++     0x00000060,  // .......**....
++     0x000000C0,  // ......**.....
++     0x00000180,  // .....**......
++     0x00000000,  // .............
++     0x00000180,  // .....**......
++     0x00000180,  // .....**......
++     0x000003C0,  // ....****.....
++     0x000003C0,  // ....****.....
++     0x00000660,  // ...**..**....
++     0x00000660,  // ...**..**....
++     0x00000C30,  // ..**....**...
++     0x00000C30,  // ..**....**...
++     0x00000FF0,  // ..********...
++     0x00001FF8,  // .**********..
++     0x00001818,  // .**......**..
++     0x00001818,  // .**......**..
++     0x0000300C,  // **........**.
++     0x0000300C,  // **........**.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 194
++     13, 22,
++     0x00000180,  // .....**......
++     0x000003C0,  // ....****.....
++     0x00000660,  // ...**..**....
++     0x00000000,  // .............
++     0x00000180,  // .....**......
++     0x00000180,  // .....**......
++     0x000003C0,  // ....****.....
++     0x000003C0,  // ....****.....
++     0x00000660,  // ...**..**....
++     0x00000660,  // ...**..**....
++     0x00000C30,  // ..**....**...
++     0x00000C30,  // ..**....**...
++     0x00000FF0,  // ..********...
++     0x00001FF8,  // .**********..
++     0x00001818,  // .**......**..
++     0x00001818,  // .**......**..
++     0x0000300C,  // **........**.
++     0x0000300C,  // **........**.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 195
++     13, 22,
++     0x00000320,  // ....**..*....
++     0x000005A0,  // ...*.**.*....
++     0x000004C0,  // ...*..**.....
++     0x00000000,  // .............
++     0x00000180,  // .....**......
++     0x00000180,  // .....**......
++     0x000003C0,  // ....****.....
++     0x000003C0,  // ....****.....
++     0x00000660,  // ...**..**....
++     0x00000660,  // ...**..**....
++     0x00000C30,  // ..**....**...
++     0x00000C30,  // ..**....**...
++     0x00000FF0,  // ..********...
++     0x00001FF8,  // .**********..
++     0x00001818,  // .**......**..
++     0x00001818,  // .**......**..
++     0x0000300C,  // **........**.
++     0x0000300C,  // **........**.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 196
++     13, 22,
++     0x00000000,  // .............
++     0x00000660,  // ...**..**....
++     0x00000660,  // ...**..**....
++     0x00000000,  // .............
++     0x00000180,  // .....**......
++     0x00000180,  // .....**......
++     0x000003C0,  // ....****.....
++     0x000003C0,  // ....****.....
++     0x00000660,  // ...**..**....
++     0x00000660,  // ...**..**....
++     0x00000C30,  // ..**....**...
++     0x00000C30,  // ..**....**...
++     0x00000FF0,  // ..********...
++     0x00001FF8,  // .**********..
++     0x00001818,  // .**......**..
++     0x00001818,  // .**......**..
++     0x0000300C,  // **........**.
++     0x0000300C,  // **........**.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 197
++     13, 22,
++     0x00000000,  // .............
++     0x00000180,  // .....**......
++     0x00000240,  // ....*..*.....
++     0x00000240,  // ....*..*.....
++     0x00000180,  // .....**......
++     0x00000180,  // .....**......
++     0x000003C0,  // ....****.....
++     0x000003C0,  // ....****.....
++     0x00000660,  // ...**..**....
++     0x00000660,  // ...**..**....
++     0x00000C30,  // ..**....**...
++     0x00000C30,  // ..**....**...
++     0x00000FF0,  // ..********...
++     0x00001FF8,  // .**********..
++     0x00001818,  // .**......**..
++     0x00001818,  // .**......**..
++     0x0000300C,  // **........**.
++     0x0000300C,  // **........**.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 198
++     18, 22,
++     0x00000000,  // ..................
++     0x00000000,  // ..................
++     0x00000000,  // ..................
++     0x00000000,  // ..................
++     0x00001FFC,  // ......***********.
++     0x00001FFC,  // ......***********.
++     0x00003600,  // .....**.**........
++     0x00003600,  // .....**.**........
++     0x00006600,  // ....**..**........
++     0x00006600,  // ....**..**........
++     0x0000C7F8,  // ...**...********..
++     0x0000C7F8,  // ...**...********..
++     0x0000FE00,  // ...*******........
++     0x0001FE00,  // ..********........
++     0x00018600,  // ..**....**........
++     0x00018600,  // ..**....**........
++     0x000307FC,  // .**.....*********.
++     0x000307FC,  // .**.....*********.
++     0x00000000,  // ..................
++     0x00000000,  // ..................
++     0x00000000,  // ..................
++     0x00000000,  // ..................
++  },
++  {             // 199
++     14, 22,
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x000003E0,  // .....*****....
++     0x00000FF8,  // ...*********..
++     0x00001C1C,  // ..***.....***.
++     0x0000180C,  // ..**.......**.
++     0x00003800,  // .***..........
++     0x00003000,  // .**...........
++     0x00003000,  // .**...........
++     0x00003000,  // .**...........
++     0x00003000,  // .**...........
++     0x00003800,  // .***..........
++     0x0000180C,  // ..**.......**.
++     0x00001C1C,  // ..***.....***.
++     0x00000FF8,  // ...*********..
++     0x000003E0,  // .....*****....
++     0x00000180,  // ......**......
++     0x000000C0,  // .......**.....
++     0x000006C0,  // ....**.**.....
++     0x00000780,  // ....****......
++  },
++  {             // 200
++     13, 22,
++     0x00000300,  // ....**.......
++     0x00000180,  // .....**......
++     0x000000C0,  // ......**.....
++     0x00000000,  // .............
++     0x00000FFC,  // ..**********.
++     0x00000FFC,  // ..**********.
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000FF8,  // ..*********..
++     0x00000FF8,  // ..*********..
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000FFC,  // ..**********.
++     0x00000FFC,  // ..**********.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 201
++     13, 22,
++     0x00000030,  // ........**...
++     0x00000060,  // .......**....
++     0x000000C0,  // ......**.....
++     0x00000000,  // .............
++     0x00000FFC,  // ..**********.
++     0x00000FFC,  // ..**********.
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000FF8,  // ..*********..
++     0x00000FF8,  // ..*********..
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000FFC,  // ..**********.
++     0x00000FFC,  // ..**********.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 202
++     13, 22,
++     0x000000C0,  // ......**.....
++     0x000001E0,  // .....****....
++     0x00000330,  // ....**..**...
++     0x00000000,  // .............
++     0x00000FFC,  // ..**********.
++     0x00000FFC,  // ..**********.
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000FF8,  // ..*********..
++     0x00000FF8,  // ..*********..
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000FFC,  // ..**********.
++     0x00000FFC,  // ..**********.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 203
++     13, 22,
++     0x00000000,  // .............
++     0x00000330,  // ....**..**...
++     0x00000330,  // ....**..**...
++     0x00000000,  // .............
++     0x00000FFC,  // ..**********.
++     0x00000FFC,  // ..**********.
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000FF8,  // ..*********..
++     0x00000FF8,  // ..*********..
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000C00,  // ..**.........
++     0x00000FFC,  // ..**********.
++     0x00000FFC,  // ..**********.
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 204
++     6, 22,
++     0x00000060,  // **....
++     0x00000030,  // .**...
++     0x00000018,  // ..**..
++     0x00000000,  // ......
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 205
++     6, 22,
++     0x00000006,  // ....**
++     0x0000000C,  // ...**.
++     0x00000018,  // ..**..
++     0x00000000,  // ......
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 206
++     6, 22,
++     0x00000018,  // ..**..
++     0x0000003C,  // .****.
++     0x00000042,  // *....*
++     0x00000000,  // ......
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 207
++     6, 22,
++     0x00000000,  // ......
++     0x00000066,  // **..**
++     0x00000066,  // **..**
++     0x00000000,  // ......
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 208
++     14, 22,
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00003FE0,  // ..*********....
++     0x00003FF0,  // ..**********...
++     0x00003038,  // ..**......***..
++     0x00003018,  // ..**.......**..
++     0x0000300C,  // ..**........**.
++     0x0000300C,  // ..**........**.
++     0x0000FE0C,  // *******.....**.
++     0x0000FE0C,  // *******.....**.
++     0x0000300C,  // ..**........**.
++     0x0000300C,  // ..**........**.
++     0x00003018,  // ..**.......**..
++     0x00003038,  // ..**......***..
++     0x00003FF0,  // ..**********...
++     0x00003FE0,  // ..*********....
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++  },
++  {             // 209
++     14, 22,
++     0x00000320,  // .....**..*....
++     0x000005A0,  // ....*.**.*....
++     0x000004C0,  // ....*..**.....
++     0x00000000,  // ..............
++     0x00003018,  // .**.......**..
++     0x00003818,  // .***......**..
++     0x00003C18,  // .****.....**..
++     0x00003C18,  // .****.....**..
++     0x00003618,  // .**.**....**..
++     0x00003318,  // .**..**...**..
++     0x00003318,  // .**..**...**..
++     0x00003198,  // .**...**..**..
++     0x00003198,  // .**...**..**..
++     0x000030D8,  // .**....**.**..
++     0x00003078,  // .**.....****..
++     0x00003078,  // .**.....****..
++     0x00003038,  // .**......***..
++     0x00003018,  // .**.......**..
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++  },
++  {             // 210
++     15, 22,
++     0x00000C00,  // ....**.........
++     0x00000600,  // .....**........
++     0x00000300,  // ......**.......
++     0x00000000,  // ...............
++     0x000007C0,  // .....*****.....
++     0x00001FF0,  // ...*********...
++     0x00003838,  // ..***.....***..
++     0x00003018,  // ..**.......**..
++     0x0000701C,  // .***.......***.
++     0x0000600C,  // .**.........**.
++     0x0000600C,  // .**.........**.
++     0x0000600C,  // .**.........**.
++     0x0000600C,  // .**.........**.
++     0x0000701C,  // .***.......***.
++     0x00003018,  // ..**.......**..
++     0x00003838,  // ..***.....***..
++     0x00001FF0,  // ...*********...
++     0x000007C0,  // .....*****.....
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++  },
++  {             // 211
++     15, 22,
++     0x000000C0,  // ........**.....
++     0x00000180,  // .......**......
++     0x00000300,  // ......**.......
++     0x00000000,  // ...............
++     0x000007C0,  // .....*****.....
++     0x00001FF0,  // ...*********...
++     0x00003838,  // ..***.....***..
++     0x00003018,  // ..**.......**..
++     0x0000701C,  // .***.......***.
++     0x0000600C,  // .**.........**.
++     0x0000600C,  // .**.........**.
++     0x0000600C,  // .**.........**.
++     0x0000600C,  // .**.........**.
++     0x0000701C,  // .***.......***.
++     0x00003018,  // ..**.......**..
++     0x00003838,  // ..***.....***..
++     0x00001FF0,  // ...*********...
++     0x000007C0,  // .....*****.....
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++  },
++  {             // 212
++     15, 22,
++     0x00000180,  // .......**......
++     0x000003C0,  // ......****.....
++     0x00000660,  // .....**..**....
++     0x00000000,  // ...............
++     0x000007C0,  // .....*****.....
++     0x00001FF0,  // ...*********...
++     0x00003838,  // ..***.....***..
++     0x00003018,  // ..**.......**..
++     0x0000701C,  // .***.......***.
++     0x0000600C,  // .**.........**.
++     0x0000600C,  // .**.........**.
++     0x0000600C,  // .**.........**.
++     0x0000600C,  // .**.........**.
++     0x0000701C,  // .***.......***.
++     0x00003018,  // ..**.......**..
++     0x00003838,  // ..***.....***..
++     0x00001FF0,  // ...*********...
++     0x000007C0,  // .....*****.....
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++  },
++  {             // 213
++     15, 22,
++     0x00000320,  // ......**..*....
++     0x000005A0,  // .....*.**.*....
++     0x000004C0,  // .....*..**.....
++     0x00000000,  // ...............
++     0x000007C0,  // .....*****.....
++     0x00001FF0,  // ...*********...
++     0x00003838,  // ..***.....***..
++     0x00003018,  // ..**.......**..
++     0x0000701C,  // .***.......***.
++     0x0000600C,  // .**.........**.
++     0x0000600C,  // .**.........**.
++     0x0000600C,  // .**.........**.
++     0x0000600C,  // .**.........**.
++     0x0000701C,  // .***.......***.
++     0x00003018,  // ..**.......**..
++     0x00003838,  // ..***.....***..
++     0x00001FF0,  // ...*********...
++     0x000007C0,  // .....*****.....
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++  },
++  {             // 214
++     15, 22,
++     0x00000000,  // ...............
++     0x00000660,  // .....**..**....
++     0x00000660,  // .....**..**....
++     0x00000000,  // ...............
++     0x000007C0,  // .....*****.....
++     0x00001FF0,  // ...*********...
++     0x00003838,  // ..***.....***..
++     0x00003018,  // ..**.......**..
++     0x0000701C,  // .***.......***.
++     0x0000600C,  // .**.........**.
++     0x0000600C,  // .**.........**.
++     0x0000600C,  // .**.........**.
++     0x0000600C,  // .**.........**.
++     0x0000701C,  // .***.......***.
++     0x00003018,  // ..**.......**..
++     0x00003838,  // ..***.....***..
++     0x00001FF0,  // ...*********...
++     0x000007C0,  // .....*****.....
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++  },
++  {             // 215
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000606,  // **......**
++     0x0000030C,  // .**....**.
++     0x00000198,  // ..**..**..
++     0x000000F0,  // ...****...
++     0x00000060,  // ....**....
++     0x000000F0,  // ...****...
++     0x00000198,  // ..**..**..
++     0x0000030C,  // .**....**.
++     0x00000606,  // **......**
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 216
++     15, 22,
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x000007CC,  // .....*****..**.
++     0x00001FF8,  // ...**********..
++     0x00003830,  // ..***.....**...
++     0x00003078,  // ..**.....****..
++     0x000070DC,  // .***....**.***.
++     0x0000618C,  // .**....**...**.
++     0x0000630C,  // .**...**....**.
++     0x0000620C,  // .**...*.....**.
++     0x0000660C,  // .**..**.....**.
++     0x00006C1C,  // .**.**.....***.
++     0x00003818,  // ..***......**..
++     0x00003838,  // ..***.....***..
++     0x00006FF0,  // .**.********...
++     0x0000C7C0,  // **...*****.....
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++     0x00000000,  // ...............
++  },
++  {             // 217
++     14, 22,
++     0x00000600,  // ....**........
++     0x00000300,  // .....**.......
++     0x00000180,  // ......**......
++     0x00000000,  // ..............
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00001830,  // ..**.....**...
++     0x00001FF0,  // ..*********...
++     0x000007C0,  // ....*****.....
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++  },
++  {             // 218
++     14, 22,
++     0x000000C0,  // .......**.....
++     0x00000180,  // ......**......
++     0x00000300,  // .....**.......
++     0x00000000,  // ..............
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00001830,  // ..**.....**...
++     0x00001FF0,  // ..*********...
++     0x000007C0,  // ....*****.....
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++  },
++  {             // 219
++     14, 22,
++     0x00000180,  // ......**......
++     0x000003C0,  // .....****.....
++     0x00000660,  // ....**..**....
++     0x00000000,  // ..............
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00001830,  // ..**.....**...
++     0x00001FF0,  // ..*********...
++     0x000007C0,  // ....*****.....
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++  },
++  {             // 220
++     14, 22,
++     0x00000000,  // ..............
++     0x00000C60,  // ...**...**....
++     0x00000C60,  // ...**...**....
++     0x00000000,  // ..............
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00003018,  // .**.......**..
++     0x00001830,  // ..**.....**...
++     0x00001FF0,  // ..*********...
++     0x000007C0,  // ....*****.....
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++     0x00000000,  // ..............
++  },
++  {             // 221
++     13, 22,
++     0x00000060,  // .......**....
++     0x000000C0,  // ......**.....
++     0x00000180,  // .....**......
++     0x00000000,  // .............
++     0x0000300C,  // **........**.
++     0x0000300C,  // **........**.
++     0x00001818,  // .**......**..
++     0x00001818,  // .**......**..
++     0x00000C30,  // ..**....**...
++     0x00000E70,  // ..***..***...
++     0x00000660,  // ...**..**....
++     0x000003C0,  // ....****.....
++     0x00000180,  // .....**......
++     0x00000180,  // .....**......
++     0x00000180,  // .....**......
++     0x00000180,  // .....**......
++     0x00000180,  // .....**......
++     0x00000180,  // .....**......
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++     0x00000000,  // .............
++  },
++  {             // 222
++     12, 22,
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000C00,  // .**.........
++     0x00000C00,  // .**.........
++     0x00000C00,  // .**.........
++     0x00000FF0,  // .********...
++     0x00000FF8,  // .*********..
++     0x00000C1C,  // .**.....***.
++     0x00000C0C,  // .**......**.
++     0x00000C0C,  // .**......**.
++     0x00000C1C,  // .**.....***.
++     0x00000FF8,  // .*********..
++     0x00000FF0,  // .********...
++     0x00000C00,  // .**.........
++     0x00000C00,  // .**.........
++     0x00000C00,  // .**.........
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++     0x00000000,  // ............
++  },
++  {             // 223
++     9, 22,
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000070,  // ...***...
++     0x000000F8,  // ..*****..
++     0x0000018C,  // .**...**.
++     0x0000018C,  // .**...**.
++     0x0000018C,  // .**...**.
++     0x0000018C,  // .**...**.
++     0x000001B8,  // .**.***..
++     0x000001B8,  // .**.***..
++     0x0000018C,  // .**...**.
++     0x0000018C,  // .**...**.
++     0x0000018C,  // .**...**.
++     0x0000018C,  // .**...**.
++     0x000001BC,  // .**.****.
++     0x000001B8,  // .**.***..
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++     0x00000000,  // .........
++  },
++  {             // 224
++     11, 22,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000180,  // ...**......
++     0x000000C0,  // ....**.....
++     0x00000060,  // .....**....
++     0x00000000,  // ...........
++     0x000003F0,  // ..******...
++     0x00000738,  // .***..***..
++     0x00000618,  // .**....**..
++     0x00000038,  // ......***..
++     0x000003F8,  // ..*******..
++     0x00000718,  // .***...**..
++     0x00000618,  // .**....**..
++     0x00000618,  // .**....**..
++     0x0000073C,  // .***..****.
++     0x000003CC,  // ..****..**.
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 225
++     11, 22,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000060,  // .....**....
++     0x000000C0,  // ....**.....
++     0x00000180,  // ...**......
++     0x00000000,  // ...........
++     0x000003F0,  // ..******...
++     0x00000738,  // .***..***..
++     0x00000618,  // .**....**..
++     0x00000038,  // ......***..
++     0x000003F8,  // ..*******..
++     0x00000718,  // .***...**..
++     0x00000618,  // .**....**..
++     0x00000618,  // .**....**..
++     0x0000073C,  // .***..****.
++     0x000003CC,  // ..****..**.
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 226
++     11, 22,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000000C0,  // ....**.....
++     0x000001E0,  // ...****....
++     0x00000330,  // ..**..**...
++     0x00000000,  // ...........
++     0x000003F0,  // ..******...
++     0x00000738,  // .***..***..
++     0x00000618,  // .**....**..
++     0x00000038,  // ......***..
++     0x000003F8,  // ..*******..
++     0x00000718,  // .***...**..
++     0x00000618,  // .**....**..
++     0x00000618,  // .**....**..
++     0x0000073C,  // .***..****.
++     0x000003CC,  // ..****..**.
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 227
++     11, 22,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000190,  // ...**..*...
++     0x000002D0,  // ..*.**.*...
++     0x00000260,  // ..*..**....
++     0x00000000,  // ...........
++     0x000003F0,  // ..******...
++     0x00000738,  // .***..***..
++     0x00000618,  // .**....**..
++     0x00000038,  // ......***..
++     0x000003F8,  // ..*******..
++     0x00000718,  // .***...**..
++     0x00000618,  // .**....**..
++     0x00000618,  // .**....**..
++     0x0000073C,  // .***..****.
++     0x000003CC,  // ..****..**.
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 228
++     11, 22,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000330,  // ..**..**...
++     0x00000330,  // ..**..**...
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000003F0,  // ..******...
++     0x00000738,  // .***..***..
++     0x00000618,  // .**....**..
++     0x00000038,  // ......***..
++     0x000003F8,  // ..*******..
++     0x00000718,  // .***...**..
++     0x00000618,  // .**....**..
++     0x00000618,  // .**....**..
++     0x0000073C,  // .***..****.
++     0x000003CC,  // ..****..**.
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 229
++     11, 22,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000000C0,  // ....**.....
++     0x00000120,  // ...*..*....
++     0x00000120,  // ...*..*....
++     0x000000C0,  // ....**.....
++     0x000003F0,  // ..******...
++     0x00000738,  // .***..***..
++     0x00000618,  // .**....**..
++     0x00000038,  // ......***..
++     0x000003F8,  // ..*******..
++     0x00000718,  // .***...**..
++     0x00000618,  // .**....**..
++     0x00000618,  // .**....**..
++     0x0000073C,  // .***..****.
++     0x000003CC,  // ..****..**.
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 230
++     17, 22,
++     0x00000000,  // .................
++     0x00000000,  // .................
++     0x00000000,  // .................
++     0x00000000,  // .................
++     0x00000000,  // .................
++     0x00000000,  // .................
++     0x00000000,  // .................
++     0x00000000,  // .................
++     0x00007EF0,  // ...******.****...
++     0x0000E7F8,  // ..***..********..
++     0x0000C30C,  // ..**....**....**.
++     0x0000070C,  // .......***....**.
++     0x00007FFC,  // ...*************.
++     0x0000E300,  // ..***...**.......
++     0x0000C300,  // ..**....**.......
++     0x0000C38C,  // ..**....***...**.
++     0x0000E7FC,  // ..***..*********.
++     0x00007AF0,  // ...****.*.****...
++     0x00000000,  // .................
++     0x00000000,  // .................
++     0x00000000,  // .................
++     0x00000000,  // .................
++  },
++  {             // 231
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000F8,  // ...*****..
++     0x000001FC,  // ..*******.
++     0x0000018C,  // ..**...**.
++     0x00000300,  // .**.......
++     0x00000300,  // .**.......
++     0x00000300,  // .**.......
++     0x00000300,  // .**.......
++     0x0000018C,  // ..**...**.
++     0x000001FC,  // ..*******.
++     0x000000F8,  // ...*****..
++     0x00000060,  // ....**....
++     0x00000030,  // .....**...
++     0x000001B0,  // ..**.**...
++     0x000001E0,  // ..****....
++  },
++  {             // 232
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000C0,  // ...**.....
++     0x00000060,  // ....**....
++     0x00000030,  // .....**...
++     0x00000000,  // ..........
++     0x000000F0,  // ...****...
++     0x000001F8,  // ..******..
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x000003FC,  // .********.
++     0x00000300,  // .**.......
++     0x00000300,  // .**.......
++     0x0000038C,  // .***...**.
++     0x000001FC,  // ..*******.
++     0x000000F0,  // ...****...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 233
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000030,  // .....**...
++     0x00000060,  // ....**....
++     0x000000C0,  // ...**.....
++     0x00000000,  // ..........
++     0x000000F0,  // ...****...
++     0x000001F8,  // ..******..
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x000003FC,  // .********.
++     0x00000300,  // .**.......
++     0x00000300,  // .**.......
++     0x0000038C,  // .***...**.
++     0x000001FC,  // ..*******.
++     0x000000F0,  // ...****...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 234
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000060,  // ....**....
++     0x000000F0,  // ...****...
++     0x00000198,  // ..**..**..
++     0x00000000,  // ..........
++     0x000000F0,  // ...****...
++     0x000001F8,  // ..******..
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x000003FC,  // .********.
++     0x00000300,  // .**.......
++     0x00000300,  // .**.......
++     0x0000038C,  // .***...**.
++     0x000001FC,  // ..*******.
++     0x000000F0,  // ...****...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 235
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000198,  // ..**..**..
++     0x00000198,  // ..**..**..
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000F0,  // ...****...
++     0x000001F8,  // ..******..
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x000003FC,  // .********.
++     0x00000300,  // .**.......
++     0x00000300,  // .**.......
++     0x0000038C,  // .***...**.
++     0x000001FC,  // ..*******.
++     0x000000F0,  // ...****...
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 236
++     4, 22,
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000018,  // **..
++     0x0000000C,  // .**.
++     0x00000006,  // ..**
++     0x00000000,  // ....
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++  },
++  {             // 237
++     4, 22,
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000006,  // ..**
++     0x0000000C,  // .**.
++     0x00000018,  // **..
++     0x00000000,  // ....
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x0000000C,  // .**.
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++     0x00000000,  // ....
++  },
++  {             // 238
++     4, 22,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000018,  // ..**..
++     0x0000003C,  // .****.
++     0x00000066,  // **..**
++     0x00000000,  // ......
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000018,  // ..**..
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++  },
++  {             // 239
++     4, 22,
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000036,  // **.**
++     0x00000036,  // **.**
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000018,  // .**..
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++     0x00000000,  // .....
++  },
++  {             // 240
++     11, 22,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000300,  // ..**.......
++     0x000001B0,  // ...**.**...
++     0x000001C0,  // ...***.....
++     0x00000260,  // ..*..**....
++     0x000001F0,  // ...*****...
++     0x000003F8,  // ..*******..
++     0x00000318,  // ..**...**..
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x00000318,  // ..**...**..
++     0x000003F8,  // ..*******..
++     0x000001F0,  // ...*****...
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 241
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000C8,  // ...**..*..
++     0x00000168,  // ..*.**.*..
++     0x00000130,  // ..*..**...
++     0x00000000,  // ..........
++     0x00000378,  // .**.****..
++     0x000003FC,  // .********.
++     0x0000038C,  // .***...**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 242
++     11, 22,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000180,  // ...**......
++     0x000000C0,  // ....**.....
++     0x00000060,  // .....**....
++     0x00000000,  // ...........
++     0x000001F0,  // ...*****...
++     0x000003F8,  // ..*******..
++     0x00000318,  // ..**...**..
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x00000318,  // ..**...**..
++     0x000003F8,  // ..*******..
++     0x000001F0,  // ...*****...
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 243
++     11, 22,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000030,  // ......**...
++     0x00000060,  // .....**....
++     0x000000C0,  // ....**.....
++     0x00000000,  // ...........
++     0x000001F0,  // ...*****...
++     0x000003F8,  // ..*******..
++     0x00000318,  // ..**...**..
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x00000318,  // ..**...**..
++     0x000003F8,  // ..*******..
++     0x000001F0,  // ...*****...
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 244
++     11, 22,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000000C0,  // ....**.....
++     0x000001E0,  // ...****....
++     0x00000330,  // ..**..**...
++     0x00000000,  // ...........
++     0x000001F0,  // ...*****...
++     0x000003F8,  // ..*******..
++     0x00000318,  // ..**...**..
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x00000318,  // ..**...**..
++     0x000003F8,  // ..*******..
++     0x000001F0,  // ...*****...
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 245
++     11, 22,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000190,  // ...**..*...
++     0x000002D0,  // ..*.**.*...
++     0x00000260,  // ..*..**....
++     0x00000000,  // ...........
++     0x000001F0,  // ...*****...
++     0x000003F8,  // ..*******..
++     0x00000318,  // ..**...**..
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x00000318,  // ..**...**..
++     0x000003F8,  // ..*******..
++     0x000001F0,  // ...*****...
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 246
++     11, 22,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000198,  // ...**..**..
++     0x00000198,  // ...**..**..
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000001F0,  // ...*****...
++     0x000003F8,  // ..*******..
++     0x00000318,  // ..**...**..
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x00000318,  // ..**...**..
++     0x000003F8,  // ..*******..
++     0x000001F0,  // ...*****...
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 247
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x00000000,  // ..........
++     0x000003FC,  // .********.
++     0x000003FC,  // .********.
++     0x00000000,  // ..........
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 248
++     11, 22,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x000000E6,  // ....***..**
++     0x000003FC,  // ..********.
++     0x00000318,  // ..**...**..
++     0x0000063C,  // .**...****.
++     0x0000066C,  // .**..**.**.
++     0x000006CC,  // .**.**..**.
++     0x0000078C,  // .****...**.
++     0x00000318,  // ..**...**..
++     0x000007F8,  // .********..
++     0x00000CE0,  // **..***....
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++  },
++  {             // 249
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x000000C0,  // ...**.....
++     0x00000060,  // ....**....
++     0x00000030,  // .....**...
++     0x00000000,  // ..........
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000031C,  // .**...***.
++     0x000003FC,  // .********.
++     0x000001EC,  // ..****.**.
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 250
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000018,  // ......**..
++     0x00000030,  // .....**...
++     0x00000060,  // ....**....
++     0x00000000,  // ..........
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000031C,  // .**...***.
++     0x000003FC,  // .********.
++     0x000001EC,  // ..****.**.
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 251
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000060,  // ....**....
++     0x000000F0,  // ...****...
++     0x00000198,  // ..**..**..
++     0x00000000,  // ..........
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000031C,  // .**...***.
++     0x000003FC,  // .********.
++     0x000001EC,  // ..****.**.
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 252
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000198,  // ..**..**..
++     0x00000198,  // ..**..**..
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000031C,  // .**...***.
++     0x000003FC,  // .********.
++     0x000001EC,  // ..****.**.
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++  },
++  {             // 253
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000018,  // ......**..
++     0x00000030,  // .....**...
++     0x00000060,  // ....**....
++     0x00000000,  // ..........
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x00000198,  // ..**..**..
++     0x00000198,  // ..**..**..
++     0x00000198,  // ..**..**..
++     0x00000090,  // ...*..*...
++     0x000000F0,  // ...****...
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x000001C0,  // ..***.....
++     0x000001C0,  // ..***.....
++  },
++  {             // 254
++     11, 22,
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000000,  // ...........
++     0x00000600,  // .**........
++     0x00000600,  // .**........
++     0x00000600,  // .**........
++     0x00000600,  // .**........
++     0x000006F0,  // .**.****...
++     0x000007F8,  // .********..
++     0x00000718,  // .***...**..
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x0000060C,  // .**.....**.
++     0x00000718,  // .***...**..
++     0x000007F8,  // .********..
++     0x000006F0,  // .**.****...
++     0x00000600,  // .**........
++     0x00000600,  // .**........
++     0x00000600,  // .**........
++     0x00000600,  // .**........
++  },
++  {             // 255
++     10, 22,
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x00000198,  // ..**..**..
++     0x00000198,  // ..**..**..
++     0x00000000,  // ..........
++     0x00000000,  // ..........
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x0000030C,  // .**....**.
++     0x00000198,  // ..**..**..
++     0x00000198,  // ..**..**..
++     0x00000198,  // ..**..**..
++     0x00000090,  // ...*..*...
++     0x000000F0,  // ...****...
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x00000060,  // ....**....
++     0x000001C0,  // ..***.....
++     0x000001C0,  // ..***.....
++  },
++  };
+diff -Nur vdr.orig/fontsym.c vdr/fontsym.c
+--- vdr.orig/fontsym.c	1970-01-01 01:00:00.000000000 +0100
++++ vdr/fontsym.c	2004-08-01 13:40:47.000000000 +0200
+@@ -0,0 +1,1724 @@
++cFont::tPixelData FontSym[][29] = {
++  {             // 32
++     6,  27,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 33
++     28,  27,
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x01ffdffc,  // ...###########.###########..
++     0x01bfdfec,  // ...##.########.########.##..
++     0x018fdf8c,  // ...##...######.######...##..
++     0x0183de0c,  // ...##.....####.####.....##..
++     0x0181dc0c,  // ...##......###.###......##..
++     0x0180d80c,  // ...##.......##.##.......##..
++     0x0180d80c,  // ...##.......##.##.......##..
++     0x0180d80c,  // ...##.......##.##.......##..
++     0x0180d80c,  // ...##.......##.##.......##..
++     0x0181dc0c,  // ...##......###.###......##..
++     0x0183de0c,  // ...##.....####.####.....##..
++     0x018fdf8c,  // ...##...######.######...##..
++     0x01bfdfec,  // ...##.########.########.##..
++     0x01ffdffc,  // ...###########.###########..
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++  },
++  {             // 34
++     28,  27,
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x01fffffc,  // ...#######################..
++     0x01fffffc,  // ...#######################..
++     0x0180000c,  // ...##...................##..
++     0x019fffcc,  // ...##..###############..##..
++     0x019fffcc,  // ...##..###############..##..
++     0x0180000c,  // ...##...................##..
++     0x019fffcc,  // ...##..###############..##..
++     0x019fffcc,  // ...##..###############..##..
++     0x0180000c,  // ...##...................##..
++     0x019fffcc,  // ...##..###############..##..
++     0x019fffcc,  // ...##..###############..##..
++     0x0180000c,  // ...##...................##..
++     0x01fffffc,  // ...#######################..
++     0x01fffffc,  // ...#######################..
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++  },
++  {             // 35
++     28,  27,
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x01fffffc,  // ...#######################..
++     0x01fffffc,  // ...#######################..
++     0x0180000c,  // ...##...................##..
++     0x0180000c,  // ...##...................##..
++     0x0180078c,  // ...##............####...##..
++     0x01800ccc,  // ...##...........##..##..##..
++     0x01bff86c,  // ...##.###########....##.##..
++     0x01bff86c,  // ...##.###########....##.##..
++     0x019c0ccc,  // ...##..###......##..##..##..
++     0x019c078c,  // ...##..###.......####...##..
++     0x0180000c,  // ...##...................##..
++     0x0180000c,  // ...##...................##..
++     0x01fffffc,  // ...#######################..
++     0x01fffffc,  // ...#######################..
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++  },
++  {             // 36
++     28,  27,
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x01fffffc,  // ...#######################..
++     0x01fffffc,  // ...#######################..
++     0x0180000c,  // ...##...................##..
++     0x0180000c,  // ...##...................##..
++     0x018f078c,  // ...##...####.....####...##..
++     0x01998ccc,  // ...##..##..##...##..##..##..
++     0x01b0d86c,  // ...##.##....##.##....##.##..
++     0x01998ccc,  // ...##..##..##...##..##..##..
++     0x018f078c,  // ...##...####.....####...##..
++     0x0180000c,  // ...##...................##..
++     0x0180000c,  // ...##...................##..
++     0x0180000c,  // ...##...................##..
++     0x01fffffc,  // ...#######################..
++     0x01fffffc,  // ...#######################..
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++  },
++  {             // 37
++      28,  27,
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x01f8fcfc,  // ...######...######..######..
++     0x01fdfdfc,  // ...#######.#######.#######..
++     0x018d8180,  // ...##...##.##......##.......
++     0x018d8180,  // ...##...##.##......##.......
++     0x018d8180,  // ...##...##.##......##.......
++     0x018d8180,  // ...##...##.##......##.......
++     0x01f9f180,  // ...######..#####...##.......
++     0x01e1f180,  // ...####....#####...##.......
++     0x01b18180,  // ...##.##...##......##.......
++     0x01998180,  // ...##..##..##......##.......
++     0x018d8180,  // ...##...##.##......##.......
++     0x018d8180,  // ...##...##.##......##.......
++     0x018dfdfc,  // ...##...##.#######.#######..
++     0x018cfcfc,  // ...##...##..######..######..
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++  },
++  {             // 38
++     28,  27,
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00007c00,  // .............#####..........
++     0x00007fc0,  // .............#########......
++     0x00007ff0,  // .............###########....
++     0x000071f8,  // .............###...######...
++     0x00007078,  // .............###.....####...
++     0x00007070,  // .............###.....###....
++     0x00007060,  // .............###.....##.....
++     0x00007000,  // .............###............
++     0x00007000,  // .............###............
++     0x00007000,  // .............###............
++     0x00007000,  // .............###............
++     0x001ff000,  // .......#########............
++     0x00fff800,  // ....#############...........
++     0x01fffc00,  // ...###############..........
++     0x01fffc00,  // ...###############..........
++     0x00fff800,  // ....#############...........
++     0x003ff000,  // ......##########............
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++  },
++  {             // 39 not used yet
++     6,  27,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 40 not used yet
++     6,  27,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 41
++   28,  27,
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000001,  // ...........................#
++     0x00000003,  // ..........................##
++     0x00000007,  // .........................###
++     0x0000000f,  // ........................####
++     0x0000003f,  // ......................######
++     0x000000ff,  // ....................########
++     0x000003ff,  // ..................##########
++     0x00000fff,  // ................############
++     0x00003fff,  // ..............##############
++     0x0001ffff,  // ...........#################
++     0x000fffff,  // ........####################
++     0x00ffffff,  // ....########################
++     0x0fffffff,  // ############################
++  },
++  {             // 42
++      28,  27,
++     0x00000000,  // ............................
++     0x0000000f,  // ........................####
++     0x000000ff,  // ....................########
++     0x000007ff,  // .................###########
++     0x00003fff,  // ..............##############
++     0x0000ffff,  // ............################
++     0x0003ffff,  // ..........##################
++     0x000fffff,  // ........####################
++     0x003fffff,  // ......######################
++     0x007fffff,  // .....#######################
++     0x00ffffff,  // ....########################
++     0x01ffffff,  // ...#########################
++     0x03ffffff,  // ..##########################
++     0x07ffffff,  // .###########################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++  },
++  {             // 43
++     28, 27,
++     0x0fffffff,  // ############################
++     0x00ffffff,  // ....########################
++     0x000fffff,  // ........####################
++     0x0001ffff,  // ...........#################
++     0x00003fff,  // ..............##############
++     0x00000fff,  // ................############
++     0x000003ff,  // ..................##########
++     0x000000ff,  // ....................########
++     0x0000003f,  // ......................######
++     0x0000000f,  // ........................####
++     0x00000007,  // .........................###
++     0x00000003,  // ..........................##
++     0x00000001,  // ...........................#
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++  },
++  {             // 44
++     28, 27,
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x07ffffff,  // .###########################
++     0x03ffffff,  // ..##########################
++     0x01ffffff,  // ...#########################
++     0x00ffffff,  // ....########################
++     0x007fffff,  // .....#######################
++     0x003fffff,  // ......######################
++     0x000fffff,  // ........####################
++     0x0003ffff,  // ..........##################
++     0x0000ffff,  // ............################
++     0x00003fff,  // ..............##############
++     0x000007ff,  // .................###########
++     0x000000ff,  // ....................########
++     0x0000000f,  // ........................####
++     0x00000000,  // ............................
++  },
++  {             // 45
++     28,  27,
++     0x00003fff,  // ..............##############
++     0x0003ffff,  // ..........##################
++     0x001fffff,  // .......#####################
++     0x007fffff,  // .....#######################
++     0x00ffffff,  // ....########################
++     0x01ffffff,  // ...#########################
++     0x01ffffff,  // ...#########################
++     0x03ffffff,  // ..##########################
++     0x03ffffff,  // ..##########################
++     0x03ffffff,  // ..##########################
++     0x07ffffff,  // .###########################
++     0x07ffffff,  // .###########################
++     0x07ffffff,  // .###########################
++     0x07ffffff,  // .###########################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++  },
++  {             // 46
++     28, 27,
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x07ffffff,  // .###########################
++     0x07ffffff,  // .###########################
++     0x07ffffff,  // .###########################
++     0x07ffffff,  // .###########################
++     0x03ffffff,  // ..##########################
++     0x03ffffff,  // ..##########################
++     0x03ffffff,  // ..##########################
++     0x01ffffff,  // ...#########################
++     0x01ffffff,  // ...#########################
++     0x00ffffff,  // ....########################
++     0x007fffff,  // .....#######################
++     0x001fffff,  // .......#####################
++     0x0003ffff,  // ..........##################
++     0x00003fff,  // ..............##############
++  },
++  {             // 47
++     28, 27,
++     0x0fffc000,  // ##############..............
++     0x0ffffc00,  // ##################..........
++     0x0fffff80,  // #####################.......
++     0x0fffffe0,  // #######################.....
++     0x0ffffff0,  // ########################....
++     0x0ffffff8,  // #########################...
++     0x0ffffff8,  // #########################...
++     0x0ffffffc,  // ##########################..
++     0x0ffffffc,  // ##########################..
++     0x0ffffffc,  // ##########################..
++     0x0ffffffe,  // ###########################.
++     0x0ffffffe,  // ###########################.
++     0x0ffffffe,  // ###########################.
++     0x0ffffffe,  // ###########################.
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++  },
++  {             // 48
++     28, 27,
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0fffffff,  // ############################
++     0x0ffffffe,  // ###########################.
++     0x0ffffffe,  // ###########################.
++     0x0ffffffe,  // ###########################.
++     0x0ffffffe,  // ###########################.
++     0x0ffffffc,  // ##########################..
++     0x0ffffffc,  // ##########################..
++     0x0ffffffc,  // ##########################..
++     0x0ffffff8,  // #########################...
++     0x0ffffff8,  // #########################...
++     0x0ffffff0,  // ########################....
++     0x0fffffe0,  // #######################.....
++     0x0fffff80,  // #####################.......
++     0x0ffffc00,  // ##################..........
++     0x0fffc000,  // ##############..............
++  },
++  {             // 49
++     14, 27,
++     0x00000000,  // ..............
++     0x00003c00,  // ####..........
++     0x00003f80,  // #######.......
++     0x00003fe0,  // #########.....
++     0x00003ff0,  // ##########....
++     0x00003ff8,  // ###########...
++     0x00003ff8,  // ###########...
++     0x00003ffc,  // ############..
++     0x00003ffc,  // ############..
++     0x00003ffc,  // ############..
++     0x00003ffe,  // #############.
++     0x00003ffe,  // #############.
++     0x00003ffe,  // #############.
++     0x00003ffe,  // #############.
++     0x00003ffe,  // #############.
++     0x00003ffe,  // #############.
++     0x00003ffe,  // #############.
++     0x00003ffc,  // ############..
++     0x00003ffc,  // ############..
++     0x00003ffc,  // ############..
++     0x00003ff8,  // ###########...
++     0x00003ff8,  // ###########...
++     0x00003ff0,  // ##########....
++     0x00003fe0,  // #########.....
++     0x00003f80,  // #######.......
++     0x00003c00,  // ####..........
++     0x00000000,  // ..............
++  },
++  {             // 50
++     14, 27,
++     0x00000000,  // ..............
++     0x0000000f,  // ..........####
++     0x0000007f,  // .......#######
++     0x000001ff,  // .....#########
++     0x000003ff,  // ....##########
++     0x000007ff,  // ...###########
++     0x000007ff,  // ...###########
++     0x00000fff,  // ..############
++     0x00000fff,  // ..############
++     0x00000fff,  // ..############
++     0x00001fff,  // .#############
++     0x00001fff,  // .#############
++     0x00001fff,  // .#############
++     0x00001fff,  // .#############
++     0x00001fff,  // .#############
++     0x00001fff,  // .#############
++     0x00001fff,  // .#############
++     0x00000fff,  // ..############
++     0x00000fff,  // ..############
++     0x00000fff,  // ..############
++     0x000007ff,  // ...###########
++     0x000007ff,  // ...###########
++     0x000003ff,  // ....##########
++     0x000001ff,  // .....#########
++     0x0000007f,  // .......#######
++     0x0000000f,  // ..........####
++     0x00000000,  // ..............
++  },
++  {             // 51
++     12, 27,
++     0x00000000,  // ............
++     0x00000c00,  // ##..........
++     0x00000f80,  // #####.......
++     0x00000fe0,  // #######.....
++     0x00000ff0,  // ########....
++     0x00000ff8,  // #########...
++     0x00000ff8,  // #########...
++     0x00000ffc,  // ##########..
++     0x00000ffc,  // ##########..
++     0x00000ffc,  // ##########..
++     0x00000ffe,  // ###########.
++     0x00000ffe,  // ###########.
++     0x00000ffe,  // ###########.
++     0x00000ffe,  // ###########.
++     0x00000ffe,  // ###########.
++     0x00000ffe,  // ###########.
++     0x00000ffe,  // ###########.
++     0x00000ffc,  // ##########..
++     0x00000ffc,  // ##########..
++     0x00000ffc,  // ##########..
++     0x00000ff8,  // #########...
++     0x00000ff8,  // #########...
++     0x00000ff0,  // ########....
++     0x00000fe0,  // #######.....
++     0x00000f80,  // #####.......
++     0x00000c00,  // ##..........
++     0x00000000,  // ............
++  },
++  {             // 52
++     24, 27,
++     0x00ffc000,  // ##########..............
++     0x00fffc00,  // ##############..........
++     0x00ffff80,  // #################.......
++     0x00ffffe0,  // ###################.....
++     0x00fffff0,  // ####################....
++     0x00fffff8,  // #####################...
++     0x00fffff8,  // #####################...
++     0x00fffffc,  // ######################..
++     0x00fffffc,  // ######################..
++     0x00fffffc,  // ######################..
++     0x00fffffe,  // #######################.
++     0x00fffffe,  // #######################.
++     0x00fffffe,  // #######################.
++     0x00fffffe,  // #######################.
++     0x00ffffff,  // ########################
++     0x00ffffff,  // ########################
++     0x00ffffff,  // ########################
++     0x00ffffff,  // ########################
++     0x00ffffff,  // ########################
++     0x00ffffff,  // ########################
++     0x00ffffff,  // ########################
++     0x00ffffff,  // ########################
++     0x00ffffff,  // ########################
++     0x00ffffff,  // ########################
++     0x00ffffff,  // ########################
++     0x00ffffff,  // ########################
++     0x00ffffff,  // ########################
++  },
++  {             // 53
++     24, 27,
++     0x00ffffff,  // ########################
++     0x00ffffff,  // ########################
++     0x00ffffff,  // ########################
++     0x00ffffff,  // ########################
++     0x00ffffff,  // ########################
++     0x00ffffff,  // ########################
++     0x00ffffff,  // ########################
++     0x00ffffff,  // ########################
++     0x00ffffff,  // ########################
++     0x00ffffff,  // ########################
++     0x00ffffff,  // ########################
++     0x00ffffff,  // ########################
++     0x00ffffff,  // ########################
++     0x00fffffe,  // #######################.
++     0x00fffffe,  // #######################.
++     0x00fffffe,  // #######################.
++     0x00fffffe,  // #######################.
++     0x00fffffc,  // ######################..
++     0x00fffffc,  // ######################..
++     0x00fffffc,  // ######################..
++     0x00fffff8,  // #####################...
++     0x00fffff8,  // #####################...
++     0x00fffff0,  // ####################....
++     0x00ffffe0,  // ###################.....
++     0x00ffff80,  // #################.......
++     0x00fffc00,  // ##############..........
++     0x00ffc000,  // ##########..............
++  },
++  {             // 54
++     14, 27,
++     0x00003fff,  // ##############
++     0x00003ffe,  // #############.
++     0x00003ffe,  // #############.
++     0x00003ffc,  // ############..
++     0x00003ffc,  // ############..
++     0x00003ff8,  // ###########...
++     0x00003ff8,  // ###########...
++     0x00003ff0,  // ##########....
++     0x00003ff0,  // ##########....
++     0x00003fe0,  // #########.....
++     0x00003fe0,  // #########.....
++     0x00003fc0,  // ########......
++     0x00003fc0,  // ########......
++     0x00003f80,  // #######.......
++     0x00003f80,  // #######.......
++     0x00003f00,  // ######........
++     0x00003f00,  // ######........
++     0x00003e00,  // #####.........
++     0x00003e00,  // #####.........
++     0x00003c00,  // ####..........
++     0x00003c00,  // ####..........
++     0x00003800,  // ###...........
++     0x00003800,  // ###...........
++     0x00003000,  // ##............
++     0x00003000,  // ##............
++     0x00002000,  // #.............
++     0x00002000,  // #.............
++  },
++  {             // 55 not used yet
++     6,  27,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 56 not used yet
++     6,  27,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 57
++     28,  27,
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x03c00000,  // ..####......................
++     0x03e00000,  // ..#####.....................
++     0x03fc0000,  // ..########..................
++     0x03fe0000,  // ..#########.................
++     0x03ffc000,  // ..############..............
++     0x03ffe000,  // ..#############.............
++     0x03e7fc00,  // ..#####..#########..........
++     0x03e3fe00,  // ..#####...#########.........
++     0x03e07fc0,  // ..#####......#########......
++     0x03e03fe0,  // ..#####.......#########.....
++     0x03e007fc,  // ..#####..........#########..
++     0x03e007fc,  // ..#####..........#########..
++     0x03e03fe0,  // ..#####.......#########.....
++     0x03e07fc0,  // ..#####......#########......
++     0x03e3fe00,  // ..#####...#########.........
++     0x03e7fc00,  // ..#####..#########..........
++     0x03ffe000,  // ..#############.............
++     0x03ffc000,  // ..############..............
++     0x03fe0000,  // ..#########.................
++     0x03fc0000,  // ..########..................
++     0x03e00000,  // ..#####.....................
++     0x03c00000,  // ..####......................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++  },
++  {             // 58
++     28,  27,
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x0381c000,  // ..###......###..............
++     0x03c1e000,  // ..####.....####.............
++     0x03f1f800,  // ..######...######...........
++     0x00f87c00,  // ....#####....#####..........
++     0x007e3f00,  // .....######...######........
++     0x001f0f80,  // .......#####....#####.......
++     0x000fc7e0,  // ........######...######.....
++     0x0003e1f0,  // ..........#####....#####....
++     0x0001f8fc,  // ...........######...######..
++     0x0001f8fc,  // ...........######...######..
++     0x0003e1f0,  // ..........#####....#####....
++     0x000fc7e0,  // ........######...######.....
++     0x001f0f80,  // .......#####....#####.......
++     0x007e3f00,  // .....######...######........
++     0x00f87c00,  // ....#####....#####..........
++     0x03f1f800,  // ..######...######...........
++     0x03c1e000,  // ..####.....####.............
++     0x0381c000,  // ..###......###..............
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x03f80000,  // ..#######...................
++     0x03f80000,  // ..#######...................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++  },
++  {             // 59
++     28,  27,
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x0381c000,  // ..###......###..............
++     0x03c1e000,  // ..####.....####.............
++     0x03f1f800,  // ..######...######...........
++     0x00f87c00,  // ....#####....#####..........
++     0x007e3f00,  // .....######...######........
++     0x001f0f80,  // .......#####....#####.......
++     0x000fc7e0,  // ........######...######.....
++     0x0003e1f0,  // ..........#####....#####....
++     0x0001f8fc,  // ...........######...######..
++     0x0001f8fc,  // ...........######...######..
++     0x0003e1f0,  // ..........#####....#####....
++     0x000fc7e0,  // ........######...######.....
++     0x001f0f80,  // .......#####....#####.......
++     0x007e3f00,  // .....######...######........
++     0x00f87c00,  // ....#####....#####..........
++     0x03f1f800,  // ..######...######...........
++     0x03c1e000,  // ..####.....####.............
++     0x0381c000,  // ..###......###..............
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x03f9fc00,  // ..#######..#######..........
++     0x03f9fc00,  // ..#######..#######..........
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++  },
++  {             // 60
++     28,  27,
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x0381c000,  // ..###......###..............
++     0x03c1e000,  // ..####.....####.............
++     0x03f1f800,  // ..######...######...........
++     0x00f87c00,  // ....#####....#####..........
++     0x007e3f00,  // .....######...######........
++     0x001f0f80,  // .......#####....#####.......
++     0x000fc7e0,  // ........######...######.....
++     0x0003e1f0,  // ..........#####....#####....
++     0x0001f8fc,  // ...........######...######..
++     0x0001f8fc,  // ...........######...######..
++     0x0003e1f0,  // ..........#####....#####....
++     0x000fc7e0,  // ........######...######.....
++     0x001f0f80,  // .......#####....#####.......
++     0x007e3f00,  // .....######...######........
++     0x00f87c00,  // ....#####....#####..........
++     0x03f1f800,  // ..######...######...........
++     0x03c1e000,  // ..####.....####.............
++     0x0381c000,  // ..###......###..............
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x03f9fcfe,  // ..#######..#######..#######.
++     0x03f9fcfe,  // ..#######..#######..#######.
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++  },
++  {             // 61
++     28,  27,
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00fe07f0,  // ....#######......#######....
++     0x00fe07f0,  // ....#######......#######....
++     0x00fe07f0,  // ....#######......#######....
++     0x00fe07f0,  // ....#######......#######....
++     0x00fe07f0,  // ....#######......#######....
++     0x00fe07f0,  // ....#######......#######....
++     0x00fe07f0,  // ....#######......#######....
++     0x00fe07f0,  // ....#######......#######....
++     0x00fe07f0,  // ....#######......#######....
++     0x00fe07f0,  // ....#######......#######....
++     0x00fe07f0,  // ....#######......#######....
++     0x00fe07f0,  // ....#######......#######....
++     0x00fe07f0,  // ....#######......#######....
++     0x00fe07f0,  // ....#######......#######....
++     0x00fe07f0,  // ....#######......#######....
++     0x00fe07f0,  // ....#######......#######....
++     0x00fe07f0,  // ....#######......#######....
++     0x00fe07f0,  // ....#######......#######....
++     0x00fe07f0,  // ....#######......#######....
++     0x00fe07f0,  // ....#######......#######....
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++  },
++  {             // 62
++     28,  27,
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x0000381c,  // ..............###......###..
++     0x0000783c,  // .............####.....####..
++     0x0001f8fc,  // ...........######...######..
++     0x0003e1f0,  // ..........#####....#####....
++     0x000fc7e0,  // ........######...######.....
++     0x001f0f80,  // .......#####....#####.......
++     0x007e3f00,  // .....######...######........
++     0x00f87c00,  // ....#####....#####..........
++     0x03f1f800,  // ..######...######...........
++     0x03f1f800,  // ..######...######...........
++     0x00f87c00,  // ....#####....#####..........
++     0x007e3f00,  // .....######...######........
++     0x001f0f80,  // .......#####....#####.......
++     0x000fc7e0,  // ........######...######.....
++     0x0003e1f0,  // ..........#####....#####....
++     0x0001f8fc,  // ...........######...######..
++     0x0000783c,  // .............####.....####..
++     0x0000381c,  // ..............###......###..
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x03f80000,  // ..#######...................
++     0x03f80000,  // ..#######...................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++  },
++  {             // 63
++     28,  27,
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x0000381c,  // ..............###......###..
++     0x0000783c,  // .............####.....####..
++     0x0001f8fc,  // ...........######...######..
++     0x0003e1f0,  // ..........#####....#####....
++     0x000fc7e0,  // ........######...######.....
++     0x001f0f80,  // .......#####....#####.......
++     0x007e3f00,  // .....######...######........
++     0x00f87c00,  // ....#####....#####..........
++     0x03f1f800,  // ..######...######...........
++     0x03f1f800,  // ..######...######...........
++     0x00f87c00,  // ....#####....#####..........
++     0x007e3f00,  // .....######...######........
++     0x001f0f80,  // .......#####....#####.......
++     0x000fc7e0,  // ........######...######.....
++     0x0003e1f0,  // ..........#####....#####....
++     0x0001f8fc,  // ...........######...######..
++     0x0000783c,  // .............####.....####..
++     0x0000381c,  // ..............###......###..
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x03f9fc00,  // ..#######..#######..........
++     0x03f9fc00,  // ..#######..#######..........
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++  },
++  {             // 64
++     28,  27,
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x0000381c,  // ..............###......###..
++     0x0000783c,  // .............####.....####..
++     0x0001f8fc,  // ...........######...######..
++     0x0003e1f0,  // ..........#####....#####....
++     0x000fc7e0,  // ........######...######.....
++     0x001f0f80,  // .......#####....#####.......
++     0x007e3f00,  // .....######...######........
++     0x00f87c00,  // ....#####....#####..........
++     0x03f1f800,  // ..######...######...........
++     0x03f1f800,  // ..######...######...........
++     0x00f87c00,  // ....#####....#####..........
++     0x007e3f00,  // .....######...######........
++     0x001f0f80,  // .......#####....#####.......
++     0x000fc7e0,  // ........######...######.....
++     0x0003e1f0,  // ..........#####....#####....
++     0x0001f8fc,  // ...........######...######..
++     0x0000783c,  // .............####.....####..
++     0x0000381c,  // ..............###......###..
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x03f9fcfe,  // ..#######..#######..#######.
++     0x03f9fcfe,  // ..#######..#######..#######.
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++  },
++  {             // 65
++     28,  27,
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++  },
++  {             // 66
++     28,  27,
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x0381c000,  // ..###......###..............
++     0x03c1e000,  // ..####.....####.............
++     0x03f1f800,  // ..######...######...........
++     0x00f87c00,  // ....#####....#####..........
++     0x007e3f00,  // .....######...######........
++     0x001f0f80,  // .......#####....#####.......
++     0x000fc7e0,  // ........######...######.....
++     0x0003e1f0,  // ..........#####....#####....
++     0x0001f8fc,  // ...........######...######..
++     0x0001f8fc,  // ...........######...######..
++     0x0003e1f0,  // ..........#####....#####....
++     0x000fc7e0,  // ........######...######.....
++     0x001f0f80,  // .......#####....#####.......
++     0x007e3f00,  // .....######...######........
++     0x00f87c00,  // ....#####....#####..........
++     0x03f1f800,  // ..######...######...........
++     0x03c1e000,  // ..####.....####.............
++     0x0381c000,  // ..###......###..............
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++  },
++  {             // 67
++     28,  27,
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x0000381c,  // ..............###......###..
++     0x0000783c,  // .............####.....####..
++     0x0001f8fc,  // ...........######...######..
++     0x0003e1f0,  // ..........#####....#####....
++     0x000fc7e0,  // ........######...######.....
++     0x001f0f80,  // .......#####....#####.......
++     0x007e3f00,  // .....######...######........
++     0x00f87c00,  // ....#####....#####..........
++     0x03f1f800,  // ..######...######...........
++     0x03f1f800,  // ..######...######...........
++     0x00f87c00,  // ....#####....#####..........
++     0x007e3f00,  // .....######...######........
++     0x001f0f80,  // .......#####....#####.......
++     0x000fc7e0,  // ........######...######.....
++     0x0003e1f0,  // ..........#####....#####....
++     0x0001f8fc,  // ...........######...######..
++     0x0000783c,  // .............####.....####..
++     0x0000381c,  // ..............###......###..
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++  },
++  {             // 68 not used yet
++     6,  27,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 69 not used yet
++     6,  27,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 70
++     28,  21,
++     0x00000000,  // ............................
++     0x00e00000,  // ....###.....................
++     0x00f80000,  // ....#####...................
++     0x00ff0000,  // ....########................
++     0x00ffc000,  // ....##########..............
++     0x00fff000,  // ....############...........
++     0x00fffe00,  // ....###############.........
++     0x00ffff80,  // ....#################.......
++     0x00ffffe0,  // ....###################.....
++     0x00fffff8,  // ....#####################...
++     0x00fffff8,  // ....#####################...
++     0x00ffffe0,  // ....###################.....
++     0x00ffff80,  // ....#################.......
++     0x00fffe00,  // ....###############.........
++     0x00fff000,  // ....############............
++     0x00ffc000,  // ....##########..............
++     0x00ff0000,  // ....########................
++     0x00f80000,  // ....#####...................
++     0x00e00000,  // ....###.....................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++  },
++  {             // 71
++     28,  21,
++     0x00000000,  // ............................
++     0x03c1e000,  // ..####.....####.............
++     0x03f1f800,  // ..######...######...........
++     0x00f87c00,  // ....#####....#####..........
++     0x007e3f00,  // .....######...######........
++     0x001f0f80,  // .......#####....#####.......
++     0x000fc7e0,  // ........######...######.....
++     0x0003e1f0,  // ..........#####....#####....
++     0x0001f8fc,  // ...........######...######..
++     0x0001f8fc,  // ...........######...######..
++     0x0003e1f0,  // ..........#####....#####....
++     0x000fc7e0,  // ........######...######.....
++     0x001f0f80,  // .......#####....#####.......
++     0x007e3f00,  // .....######...######........
++     0x00f87c00,  // ....#####....#####..........
++     0x03f1f800,  // ..######...######...........
++     0x03c1e000,  // ..####.....####.............
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x03f80000,  // ..#######...................
++     0x03f80000,  // ..#######...................
++  },
++  {             // 72
++     28,  21,
++     0x00000000,  // ............................
++     0x03c1e000,  // ..####.....####.............
++     0x03f1f800,  // ..######...######...........
++     0x00f87c00,  // ....#####....#####..........
++     0x007e3f00,  // .....######...######........
++     0x001f0f80,  // .......#####....#####.......
++     0x000fc7e0,  // ........######...######.....
++     0x0003e1f0,  // ..........#####....#####....
++     0x0001f8fc,  // ...........######...######..
++     0x0001f8fc,  // ...........######...######..
++     0x0003e1f0,  // ..........#####....#####....
++     0x000fc7e0,  // ........######...######.....
++     0x001f0f80,  // .......#####....#####.......
++     0x007e3f00,  // .....######...######........
++     0x00f87c00,  // ....#####....#####..........
++     0x03f1f800,  // ..######...######...........
++     0x03c1e000,  // ..####.....####.............
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x03f9fc00,  // ..#######..#######..........
++     0x03f9fc00,  // ..#######..#######..........
++  },
++  {             // 73
++     28,  21,
++     0x00000000,  // ............................
++     0x03c1e000,  // ..####.....####.............
++     0x03f1f800,  // ..######...######...........
++     0x00f87c00,  // ....#####....#####..........
++     0x007e3f00,  // .....######...######........
++     0x001f0f80,  // .......#####....#####.......
++     0x000fc7e0,  // ........######...######.....
++     0x0003e1f0,  // ..........#####....#####....
++     0x0001f8fc,  // ...........######...######..
++     0x0001f8fc,  // ...........######...######..
++     0x0003e1f0,  // ..........#####....#####....
++     0x000fc7e0,  // ........######...######.....
++     0x001f0f80,  // .......#####....#####.......
++     0x007e3f00,  // .....######...######........
++     0x00f87c00,  // ....#####....#####..........
++     0x03f1f800,  // ..######...######...........
++     0x03c1e000,  // ..####.....####.............
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x03f9fcfe,  // ..#######..#######..#######.
++     0x03f9fcfe,  // ..#######..#######..#######.
++  },
++  {             // 74
++     28,  21,
++     0x00000000,  // ............................
++     0x007f0fe0,  // .....#######....#######.....
++     0x007f0fe0,  // .....#######....#######.....
++     0x007f0fe0,  // .....#######....#######.....
++     0x007f0fe0,  // .....#######....#######.....
++     0x007f0fe0,  // .....#######....#######.....
++     0x007f0fe0,  // .....#######....#######.....
++     0x007f0fe0,  // .....#######....#######.....
++     0x007f0fe0,  // .....#######....#######.....
++     0x007f0fe0,  // .....#######....#######.....
++     0x007f0fe0,  // .....#######....#######.....
++     0x007f0fe0,  // .....#######....#######.....
++     0x007f0fe0,  // .....#######....#######.....
++     0x007f0fe0,  // .....#######....#######.....
++     0x007f0fe0,  // .....#######....#######.....
++     0x007f0fe0,  // .....#######....#######.....
++     0x007f0fe0,  // .....#######....#######.....
++     0x007f0fe0,  // .....#######....#######.....
++     0x007f0fe0,  // .....#######....#######.....
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++  },
++  {             // 75
++     28,  21,
++     0x00000000,  // ............................
++     0x0000783c,  // .............####.....####..
++     0x0001f8fc,  // ...........######...######..
++     0x0003e1f0,  // ..........#####....#####....
++     0x000fc7e0,  // ........######...######.....
++     0x001f0f80,  // .......#####....#####.......
++     0x007e3f00,  // .....######...######........
++     0x00f87c00,  // ....#####....#####..........
++     0x03f1f800,  // ..######...######...........
++     0x03f1f800,  // ..######...######...........
++     0x00f87c00,  // ....#####....#####..........
++     0x007e3f00,  // .....######...######........
++     0x001f0f80,  // .......#####....#####.......
++     0x000fc7e0,  // ........######...######.....
++     0x0003e1f0,  // ..........#####....#####....
++     0x0001f8fc,  // ...........######...######..
++     0x0000783c,  // .............####.....####..
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x03f80000,  // ..#######...................
++     0x03f80000,  // ..#######...................
++  },
++  {             // 76
++     28,  21,
++     0x00000000,  // ............................
++     0x0000783c,  // .............####.....####..
++     0x0001f8fc,  // ...........######...######..
++     0x0003e1f0,  // ..........#####....#####....
++     0x000fc7e0,  // ........######...######.....
++     0x001f0f80,  // .......#####....#####.......
++     0x007e3f00,  // .....######...######........
++     0x00f87c00,  // ....#####....#####..........
++     0x03f1f800,  // ..######...######...........
++     0x03f1f800,  // ..######...######...........
++     0x00f87c00,  // ....#####....#####..........
++     0x007e3f00,  // .....######...######........
++     0x001f0f80,  // .......#####....#####.......
++     0x000fc7e0,  // ........######...######.....
++     0x0003e1f0,  // ..........#####....#####....
++     0x0001f8fc,  // ...........######...######..
++     0x0000783c,  // .............####.....####..
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x03f9fc00,  // ..#######..#######..........
++     0x03f9fc00,  // ..#######..#######..........
++  },
++  {             // 77
++     28,  21,
++     0x00000000,  // ............................
++     0x0000783c,  // .............####.....####..
++     0x0001f8fc,  // ...........######...######..
++     0x0003e1f0,  // ..........#####....#####....
++     0x000fc7e0,  // ........######...######.....
++     0x001f0f80,  // .......#####....#####.......
++     0x007e3f00,  // .....######...######........
++     0x00f87c00,  // ....#####....#####..........
++     0x03f1f800,  // ..######...######...........
++     0x03f1f800,  // ..######...######...........
++     0x00f87c00,  // ....#####....#####..........
++     0x007e3f00,  // .....######...######........
++     0x001f0f80,  // .......#####....#####.......
++     0x000fc7e0,  // ........######...######.....
++     0x0003e1f0,  // ..........#####....#####....
++     0x0001f8fc,  // ...........######...######..
++     0x0000783c,  // .............####.....####..
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x03f9fcfe,  // ..#######..#######..#######.
++     0x03f9fcfe,  // ..#######..#######..#######.
++  },
++  {             // 78
++     28,  27,
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++  },
++  {             // 79
++     28,  21,
++     0x00000000,  // ............................
++     0x03c1e000,  // ..####.....####.............
++     0x03f1f800,  // ..######...######...........
++     0x00f87c00,  // ....#####....#####..........
++     0x007e3f00,  // .....######...######........
++     0x001f0f80,  // .......#####....#####.......
++     0x000fc7e0,  // ........######...######.....
++     0x0003e1f0,  // ..........#####....#####....
++     0x0001f8fc,  // ...........######...######..
++     0x0001f8fc,  // ...........######...######..
++     0x0003e1f0,  // ..........#####....#####....
++     0x000fc7e0,  // ........######...######.....
++     0x001f0f80,  // .......#####....#####.......
++     0x007e3f00,  // .....######...######........
++     0x00f87c00,  // ....#####....#####..........
++     0x03f1f800,  // ..######...######...........
++     0x03c1e000,  // ..####.....####.............
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++  },
++  {             // 80
++     28,  21,
++     0x00000000,  // ............................
++     0x0000783c,  // .............####.....####..
++     0x0001f8fc,  // ...........######...######..
++     0x0003e1f0,  // ..........#####....#####....
++     0x000fc7e0,  // ........######...######.....
++     0x001f0f80,  // .......#####....#####.......
++     0x007e3f00,  // .....######...######........
++     0x00f87c00,  // ....#####....#####..........
++     0x03f1f800,  // ..######...######...........
++     0x03f1f800,  // ..######...######...........
++     0x00f87c00,  // ....#####....#####..........
++     0x007e3f00,  // .....######...######........
++     0x001f0f80,  // .......#####....#####.......
++     0x000fc7e0,  // ........######...######.....
++     0x0003e1f0,  // ..........#####....#####....
++     0x0001f8fc,  // ...........######...######..
++     0x0000783c,  // .............####.....####..
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++  },
++  {             // 81 not used yet
++     6,  27,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 82 not used yet
++     6,  27,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 83
++     28,  21,
++     0x03e1c000,  // ..#####....###..............
++     0x03e1e000,  // ..#####....####.............
++     0x03e1f800,  // ..#####....######...........
++     0x03e07c00,  // ..#####......#####..........
++     0x03e03f00,  // ..#####.......######........
++     0x03e00f80,  // ..#####.........#####.......
++     0x03e007e0,  // ..#####..........######.....
++     0x03e001f0,  // ..#####............#####....
++     0x03e000fc,  // ..#####.............######..
++     0x03e000fc,  // ..#####.............######..
++     0x03e001f0,  // ..#####............#####....
++     0x03e007e0,  // ..#####..........######.....
++     0x03e00f80,  // ..#####.........#####.......
++     0x03e03f00,  // ..#####.......######........
++     0x03e07c00,  // ..#####......#####..........
++     0x03e1f800,  // ..#####....######...........
++     0x03e1e000,  // ..#####....####.............
++     0x03e1c000,  // ..#####....###..............
++     0x00000000,  // ............................
++     0x03f80000,  // ..#######...................
++     0x03f80000,  // ..#######...................
++  },
++  {             // 84
++     28,  21,
++     0x03e1c000,  // ..#####....###..............
++     0x03e1e000,  // ..#####....####.............
++     0x03e1f800,  // ..#####....######...........
++     0x03e07c00,  // ..#####......#####..........
++     0x03e03f00,  // ..#####.......######........
++     0x03e00f80,  // ..#####.........#####.......
++     0x03e007e0,  // ..#####..........######.....
++     0x03e001f0,  // ..#####............#####....
++     0x03e000fc,  // ..#####.............######..
++     0x03e000fc,  // ..#####.............######..
++     0x03e001f0,  // ..#####............#####....
++     0x03e007e0,  // ..#####..........######.....
++     0x03e00f80,  // ..#####.........#####.......
++     0x03e03f00,  // ..#####.......######........
++     0x03e07c00,  // ..#####......#####..........
++     0x03e1f800,  // ..#####....######...........
++     0x03e1e000,  // ..#####....####.............
++     0x03e1c000,  // ..#####....###..............
++     0x00000000,  // ............................
++     0x03f9fc00,  // ..#######..#######..........
++     0x03f9fc00,  // ..#######..#######..........
++  },
++  {             // 85
++     28,  21,
++     0x03e1c000,  // ..#####....###..............
++     0x03e1e000,  // ..#####....####.............
++     0x03e1f800,  // ..#####....######...........
++     0x03e07c00,  // ..#####......#####..........
++     0x03e03f00,  // ..#####.......######........
++     0x03e00f80,  // ..#####.........#####.......
++     0x03e007e0,  // ..#####..........######.....
++     0x03e001f0,  // ..#####............#####....
++     0x03e000fc,  // ..#####.............######..
++     0x03e000fc,  // ..#####.............######..
++     0x03e001f0,  // ..#####............#####....
++     0x03e007e0,  // ..#####..........######.....
++     0x03e00f80,  // ..#####.........#####.......
++     0x03e03f00,  // ..#####.......######........
++     0x03e07c00,  // ..#####......#####..........
++     0x03e1f800,  // ..#####....######...........
++     0x03e1e000,  // ..#####....####.............
++     0x03e1c000,  // ..#####....###..............
++     0x00000000,  // ............................
++     0x03f9fcfe,  // ..#######..#######..#######.
++     0x03f9fcfe,  // ..#######..#######..#######.
++  },
++  {             // 86
++     28,  21,
++     0x0000387c,  // ..............###....#####..
++     0x0000787c,  // .............####....#####..
++     0x0001f87c,  // ...........######....#####..
++     0x0003e07c,  // ..........#####......#####..
++     0x000fc07c,  // ........######.......#####..
++     0x001f007c,  // .......#####.........#####..
++     0x007e007c,  // .....######..........#####..
++     0x00f8007c,  // ....#####............#####..
++     0x03f0007c,  // ..######.............#####..
++     0x03f0007c,  // ..######.............#####..
++     0x00f8007c,  // ....#####............#####..
++     0x007e007c,  // .....######..........#####..
++     0x001f007c,  // .......#####.........#####..
++     0x000fc07c,  // ........######.......#####..
++     0x0003e07c,  // ..........#####......#####..
++     0x0001f87c,  // ...........######....#####..
++     0x0000787c,  // .............####....#####..
++     0x0000387c,  // ..............###....#####..
++     0x00000000,  // ............................
++     0x03f80000,  // ..#######...................
++     0x03f80000,  // ..#######...................
++  },
++  {             // 87
++     28,  21,
++     0x0000387c,  // ..............###....#####..
++     0x0000787c,  // .............####....#####..
++     0x0001f87c,  // ...........######....#####..
++     0x0003e07c,  // ..........#####......#####..
++     0x000fc07c,  // ........######.......#####..
++     0x001f007c,  // .......#####.........#####..
++     0x007e007c,  // .....######..........#####..
++     0x00f8007c,  // ....#####............#####..
++     0x03f0007c,  // ..######.............#####..
++     0x03f0007c,  // ..######.............#####..
++     0x00f8007c,  // ....#####............#####..
++     0x007e007c,  // .....######..........#####..
++     0x001f007c,  // .......#####.........#####..
++     0x000fc07c,  // ........######.......#####..
++     0x0003e07c,  // ..........#####......#####..
++     0x0001f87c,  // ...........######....#####..
++     0x0000787c,  // .............####....#####..
++     0x0000387c,  // ..............###....#####..
++     0x00000000,  // ............................
++     0x03f9fc00,  // ..#######..#######..........
++     0x03f9fc00,  // ..#######..#######..........
++  },
++  {             // 88
++     28,  21,
++     0x0000387c,  // ..............###....#####..
++     0x0000787c,  // .............####....#####..
++     0x0001f87c,  // ...........######....#####..
++     0x0003e07c,  // ..........#####......#####..
++     0x000fc07c,  // ........######.......#####..
++     0x001f007c,  // .......#####.........#####..
++     0x007e007c,  // .....######..........#####..
++     0x00f8007c,  // ....#####............#####..
++     0x03f0007c,  // ..######.............#####..
++     0x03f0007c,  // ..######.............#####..
++     0x00f8007c,  // ....#####............#####..
++     0x007e007c,  // .....######..........#####..
++     0x001f007c,  // .......#####.........#####..
++     0x000fc07c,  // ........######.......#####..
++     0x0003e07c,  // ..........#####......#####..
++     0x0001f87c,  // ...........######....#####..
++     0x0000787c,  // .............####....#####..
++     0x0000387c,  // ..............###....#####..
++     0x00000000,  // ............................
++     0x03f9fcfe,  // ..#######..#######..#######.
++     0x03f9fcfe,  // ..#######..#######..#######.
++  },
++  {             // 89
++     28,  21,
++     0x01f1c000,  // ...#####...###..............
++     0x01f1e000,  // ...#####...####.............
++     0x01f1f800,  // ...#####...######...........
++     0x01f07c00,  // ...#####.....#####..........
++     0x01f03f00,  // ...#####......######........
++     0x01f00f80,  // ...#####........#####.......
++     0x01f007e0,  // ...#####.........######.....
++     0x01f001f0,  // ...#####...........#####....
++     0x01f000fc,  // ...#####............######..
++     0x01f000fc,  // ...#####............######..
++     0x01f001f0,  // ...#####...........#####....
++     0x01f007e0,  // ...#####.........######.....
++     0x01f00f80,  // ...#####........#####.......
++     0x01f03f00,  // ...#####......######........
++     0x01f07c00,  // ...#####.....#####..........
++     0x01f1f800,  // ...#####...######...........
++     0x01f1e000,  // ...#####...####.............
++     0x01f1c000,  // ...#####...###..............
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++  },
++  {             // 90
++     28,  21,
++     0x000038f8,  // ..............###...#####...
++     0x000078f8,  // .............####...#####...
++     0x0001f8f8,  // ...........######...#####...
++     0x0003e0f8,  // ..........#####.....#####...
++     0x000fc0f8,  // ........######......#####...
++     0x001f00f8,  // .......#####........#####...
++     0x007e00f8,  // .....######.........#####...
++     0x00f800f8,  // ....#####...........#####...
++     0x03f000f8,  // ..######............#####...
++     0x03f000f8,  // ..######............#####...
++     0x00f800f8,  // ....#####...........#####...
++     0x007e00f8,  // .....######.........#####...
++     0x001f00f8,  // .......#####........#####...
++     0x000fc0f8,  // ........######......#####...
++     0x0003e0f8,  // ..........#####.....#####...
++     0x0001f8f8,  // ...........######...#####...
++     0x000078f8,  // .............####...#####...
++     0x000038f8,  // ..............###...#####...
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++     0x00000000,  // ............................
++  },
++  {             // 91 not used yet
++     6,  27,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  {             // 92 not used yet
++     6,  27,
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++     0x00000000,  // ......
++  },
++  };
+diff -Nur vdr.orig/HISTORY-ElchiAIO vdr/HISTORY-ElchiAIO
+--- vdr.orig/HISTORY-ElchiAIO	1970-01-01 01:00:00.000000000 +0100
++++ vdr/HISTORY-ElchiAIO	2004-08-01 13:40:47.000000000 +0200
+@@ -0,0 +1,114 @@
++History ElchiAIO:
++-----------------
++
++version 1: 2002-12-25
++
++- changed stop cutting, recording und replay changed to line 1
++- changed subtiteltext in epg to fontosd-small
++- changed colorbuttontext and the menustateline to fontosd-small
++- added adjustable tranparency (parts of modcode from r.w. buchner)
++- added symbolpatch
++- added timebarpatch (code from maxime guilbot or olivier jacques???)
++- added rgb adjustable
++- changed volumebar (some cosmetic changes)
++- changed color for mute button
++
++version 2: 2003-01-01
++
++- added elchi style button (colors vanilla vdr <-> colors elchi) no color=1 at compiletime
++- moved color adjustment & transparency to a menu called color
++- progressbar (from matthias hilbig, andreas roedl, ulrich petri and andreas schultz)
++
++version 3: 2003-01-29
++
++- fixed a bug when channelnumber 
++- fixed a bug when channelinfo position is top
++- added mainmenu 0 from old aio
++- added replay beautypatch (from stefan huelswitt)
++- added adjustable fontcolors for channelinfo, mainmenu (parts of code from time plugin)
++- added adjustable channelinfo, helpbutton background colors
++- added adjustable colors for symbols on/off, volumebar and channelinfo timebar
++
++- not tested with vdr-1.1.21-22 and new ci driver
++- tested mit vdr-1.1.20 and driver from 2003-01-08
++
++version 3a: 2003-06-01
++
++- updated to vdr-1.2.0
++- added easyinput.diff (Thanks to Marcel Schaeben)
++- fixed bug when lcdplugin is used (breaked channelname)
++
++version 3b: 2003-09-17
++
++- updated to vdr-1.2.5
++- updated translations
++- fixed crash bug when '(NULL)' EPG titles
++- fixed volumebar text
++- fixed menu hotkeys
++- fixed some localization typos
++- added configurable 'Small Fonts' for titlebar & help buttons
++- added new shortcuts (play,rewind) for recordings menu
++- added configurable 'Show Weekdays' for timers and schedule (Thanks to Oskar Signell)
++- added recording_length-0.2 patch (Thanks to Tobias Faust)
++- merged easyinput-1.0 patch (Thanks to Patrick Maier)
++
++version 3c: 2003-11-14
++
++- updated to vdr-1.2.6
++- minimized the footprint of recording_length patch
++- modified easyinput patch to allow repeating keys and to shift cursor automatically
++  right if the last key is different than the current one.
++
++version 4: 2004-01-22
++
++- added and modified improved-osd-3a patch (Huge thanks to Sascha Volkenandt)
++  put your channel logos into $CONFIGDIR/logos/ - the logo feature can be disabled in SETUP/OSD-menu
++- merged fix from easyinput-1.1 patch (Thanks to Patrick Maier)
++- added findcmd patch to speedup recordings menu (Thanks to Jaakko Hyvätti)
++- added HDTV patch (Thanks to Reinhard Nissl)
++- fixed a few minor bugs (EGP,ShowWeekdays,...) and introduced many new ones :)
++
++version 4a: 2004-02-01
++
++- added and modified rename-0.2 patch (Thanks to Torsten Kunkel)
++  however recordings menu isn't automatically refreshed after renaming,
++  so you must do it manually by first close and then reopen the menu...
++- added shift-right-after-timeout feature into easyinput patch
++- fixed display channel info and other small bugs
++- added music symbol for radio channels (and reorganized the whole fontsym)
++- added ELCHIAIOVERSION define (config.h) for plugin developers
++- switching between themes doesn't reset colors and mess up texts anymore
++
++version 4b: 2004-02-08
++
++- changed "stop cutting/recording/replay" menu items back to the first line
++- added horizontal offset patch for OSD (SETUP/OSD/Horizontal Offset)
++- fixed help button layout (Thanks to Saxman2k @ VDRPortal)
++- fixed minor layout bug in "What's On Now" menu when using Scroll theme
++- fixed status line problems when using Scroll theme
++- renaming now automatically closes OSD
++- updated version number 
++
++version 4c: 2004-02-27
++
++- reworked the old 'COLOR' menu into separate 'OSD Themes' and 'Color Schemes' menus
++- added and modified the magnificent color-scheme patch (Thanks to gestein @ VDRPortal)
++  put your color schemes into $CONFIGDIR/schemes/
++- added option to select whether record/edit/replay commands are shown at the top or bottom of the mainmenu
++- added and slightly modified menu_selection-0.2a patch (Thanks to PeterD @ VDRPortal)
++- added russian translation for vdr-1.3.x
++- updated version number and it's also now written into logs during startup
++
++version 4d: 2004-03-14
++
++- added preliminary .xpm support for channel logos (Thanks to Sascha Volkenandt)
++  GIMP Howto: bicubic scale to 64x48, index to 16 colors, and save as xpm
++- color schemes use now only Description tags; please update your color scheme files
++- color edit menu allows now to edit also descriptions
++- color edit menu displays now active "variable color" in the scroll line and only relevant font color selections are shown
++- updated to menu_selection-0.3 patch; however status messages are currently disabled and the timeout is shortened
++- theme names are now included in translations
++- fixed "Symbols in Channelinfo" / "Logo in Channelinfo" theme bug
++- updated version number
++
++Please report any bugs/anomalies in VDRPortal forums - preferably with working fixes!
+diff -Nur vdr.orig/i18n.c vdr/i18n.c
+--- vdr.orig/i18n.c	2004-07-17 17:27:25.000000000 +0200
++++ vdr/i18n.c	2004-08-01 13:40:47.000000000 +0200
+@@ -3739,6 +3739,1230 @@
+     "Ennek a plugin-nak nincs setup-parametere!",
+     "Aquest plugin no admet configuració!",
+    },
++  { "Setup.OSD$Horizontal offset",
++    "Horizontale Offset",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Vaakakeskitys",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "OSD Themes",
++    "OSD Thema",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Kuvaruutunäytön teemat",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Themes$Theme",
++    "Thema",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Teema",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Themes$Vanilla",
++    "Vanilla",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Vanilja",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Themes$Elchi",
++    "Elchi",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Elchi",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Themes$Sascha Scroll",
++    "Sascha Scroll",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Saschan käärö",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Themes$Sascha Round",
++    "Sascha Round",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Saschan pyöreä",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Themes$Small Fonts",
++    "Kleine Schrift",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Pienet kirjasimet",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Themes$Symbols in Channelinfo",
++    "Symbole in der Kanalinfo",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Näytä symbolit kanavatiedossa",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Themes$Timebar in Channelinfo",
++    "Zeitbalken in der Kanalinfo",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Näytä aikajana kanavatiedossa",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Themes$Logo in Channelinfo",
++    "Logo in der Kanalinfo",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Näytä logo kanavatiedossa",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Themes$Color scheme for logos",
++    "Farbschema für Logos",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Käytä väriteemaa logossa",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Themes$Progressbar in 'Whats on Now?'",
++    "Zeitbalken in 'Was läuft jetzt?'",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Näytä aikajana ohjelmistossa",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Themes$Show Weekdays",
++    "Wochentag anzeigen",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Näytä viikonpäivät",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Themes$Main Menu command position",
++    "Befehle Position im Hauptmenü",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Komentojen sijainti päävalikossa",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Colors",
++    "Farben",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Värit",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Default Description",
++    "Standardbeschreibung",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Oletuskuvaus",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Localized Description",
++    "Übersetzte Beschreibung",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Suomennettu kuvaus",
++    "",//TODO  
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Variable Colors",
++    "Flexible Farben",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Vaihdettavat värit",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$  Transparency Value",
++    "  Transparenzwert max. 15",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "  Läpinäkyvyys",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$  Red Value",
++    "  Rotwert max. 15",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO   
++    "",//TODO
++    "  Punainen",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO   
++  },
++  { "Setup.Colors$  Green Value",
++    "  Grünwert max. 15",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "  Vihreä",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$  Blue Value",
++    "  Blauwert max. 15",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "  Sininen",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Fontcolor Channel Name",
++    "Schriftfarbe Kanalname",
++    "",//TODO
++    "",//TODO 
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Kanavan nimen kirjasin",
++    "",//TODO   
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Fontcolor Channel Number",
++    "Schriftfarbe Kanalzahl",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Kanavan numeron kirjasin",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Fontcolor EPG Time",
++    "Schriftfarbe EPG Zeit",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Ohjelma-ajan kirjasin",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Fontcolor EPG Title",
++    "Schriftfarbe EPG Titel",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO 
++    "",//TODO
++    "Ohjelmanimen kirjasin",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO   
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Fontcolor EPG Subtitle",
++    "Schriftfarbe EPG Subtitel",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Ohjelmakuvauksen kirjasin",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Fontcolor Main Menu",
++    "Schriftfarbe Hauptmenu",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Päävalikon kirjasin",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Fontcolor Title Line",
++    "Schriftfarbe Titelzeile",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Otsikkorivin kirjasin",
++    "",//TODO 
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Fontcolor Scroll Line",
++    "Schriftfarbe Scrollzeile",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Valitun rivin kirjasin",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Fontcolor Error Line",
++    "Schriftfarbe Status Fehler",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Virheviestin kirjasin",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Fontcolor Info Line",
++    "Schriftfarbe Status Info",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Infoviestin kirjasin",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Fontcolor Confirm Line",
++    "Schriftfarbe Status Bestätigung",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Varmenneviestin kirjasin",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Volumebar",
++    "Lautstärkeregler",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Äänenvoimakkuus",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Symbol Light Active",
++    "Symbolleuchte brennt",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Symbolivalo päällä",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO 
++  },
++  { "Setup.Colors$Symbol Light Off",
++    "Symbolleuchte ist aus",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Symbolivalo pois päältä",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Timebar Background",
++    "Zeitbalken Hintergrund",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Aikajanan tausta",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Timebar Variable",
++    "Zeitbalken Änderung",
++    "",//TODO 
++    "",//TODO
++    "",//TODO
++    "",//TODO  
++    "",//TODO   
++    "",//TODO
++    "Aikajana",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Black",
++    "Schwarz",
++    "",//TODO 
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO  
++    "",//TODO
++    "musta",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$White",
++    "Weiss",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "valkoinen",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Red",
++    "Rot",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO 
++    "",//TODO
++    "",//TODO
++    "punainen",
++    "",//TODO   
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Green",
++    "Grün",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO 
++    "",//TODO
++    "",//TODO
++    "vihreä",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Yellow",
++    "Gelb",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "keltainen",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Magenta",
++    "Magenta",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "magenta",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO   
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Blue",
++    "Blau",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "sininen",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Cyan",
++    "Cyan",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "syaani",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Grey",
++    "Grau",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "harmaa",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO   
++  },
++  { "Setup.Colors$Transparent",
++    "Transparent",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "läpinäkyvä",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO  
++  },
++  { "Setup.Colors$Background",
++    "Background",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "tausta",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Channel Name",
++    "Kanalname",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "kanavan nimi",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Channel Number",
++    "Kanalzahl",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "kanavan numero",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$EPG Time",
++    "EPG Zeit",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "ohjelma-aika",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$EPG Data",
++    "EPG Data",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "ohjelmatieto",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Title Line",
++    "Titelzeile",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "otsikkorivi",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Scroll Line",
++    "Scrollzeile",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "valittu rivi",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Red Button",
++    "Rote Taste",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "pun. näppäin",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Green Button",
++    "Grüne Taste",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "vihr. näppäin",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Yellow Button",
++    "Gelbe Taste",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "kelt. näppäin",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Blue Button",
++    "Blaue Taste",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "sin. näppäin",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Error Line",
++    "Statuszeile Fehler",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "virheviesti",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Info Line",
++    "Statuszeile Information",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "infoviesti",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Colors$Confirm Line",
++    "Statuszeile Bestätigung",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "varmenneviesti",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Color Schemes",
++    "Farbschema",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Väriteemat",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Scheme$Current Color Scheme",
++    "Aktuelles Farbschema",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Nykyinen",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Scheme$Save",
++    "Speichern",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Tallenna",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Scheme$Color scheme saved.",
++    "Farbschema gespeichert.",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Väriteema tallennettu.",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Scheme$Error while saving color scheme!",
++    "Fehler beim Speichern des Farbschemas!",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Väriteeman tallentaminen epäonnistui!",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Recording$Show Date",
++    "Aufnahmedatum anzeigen",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Näytä tallenteen päiväys",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Recording$Show Time",
++    "AufnahmeZeit anzeigen",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Näytä tallenteen ajankohta",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Setup.Recording$Show Length",
++    "Länge der Aufnahme anzeigen",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Näytä tallenteen kesto",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
++  { "Rename recording",
++    "Aufzeichnung umbenennen",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "Nimeä tallenne",
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++    "",//TODO
++  },
+   { NULL }
+   };
+ 
+diff -Nur vdr.orig/interface.c vdr/interface.c
+--- vdr.orig/interface.c	2004-07-17 17:27:25.000000000 +0200
++++ vdr/interface.c	2004-08-01 13:42:59.000000000 +0200
+@@ -14,6 +14,7 @@
+ #include "i18n.h"
+ #include "osd.h"
+ #include "status.h"
++#include "theme.h"
+ 
+ cInterface *Interface = NULL;
+ 
+@@ -35,12 +36,17 @@
+ 
+ void cInterface::Open(int NumCols, int NumLines)
+ {
++  Open(NumCols, NumLines, false);
++}
++
++void cInterface::Open(int NumCols, int NumLines, bool logo)
++{
+   if (!open++) {
+      if (NumCols == 0)
+         NumCols = Setup.OSDwidth;
+      if (NumLines == 0)
+         NumLines = Setup.OSDheight;
+-     cOsd::Open(width = NumCols, height = NumLines);
++     cOsd::Open(width = NumCols, height = NumLines, logo);
+      }
+ }
+ 
+@@ -214,6 +220,26 @@
+ void cInterface::WriteText(int x, int y, const char *s, eDvbColor FgColor, eDvbColor BgColor)
+ {
+   if (open) {
++     if ((Setup.Theme == themeSaschaRound || Setup.Theme == themeSaschaScroll) && (x < 2)) {
++        char symbol[3] = "";
++        eDvbFont oldFont = Interface->SetFont(fontSym);
++        if (Setup.Theme == themeSaschaScroll) {
++           Fill(1, y, Setup.OSDwidth - 2, 1, BgColor);
++           snprintf(symbol, sizeof(symbol), "%c", FSYM_ROUND_RIGHT);
++           Write(1, y, symbol, BgColor, clrBackground);
++           snprintf(symbol, sizeof(symbol), "%c", FSYM_THINROUND_RIGHT);
++           Write(Setup.OSDwidth - 2, y, symbol, BgColor, clrBackground);
++           }
++        else {
++           Fill(0, y, Setup.OSDwidth, 1, BgColor);
++           snprintf(symbol, sizeof(symbol), "%c", FSYM_ROUND_RIGHT);
++           Write(0, y, symbol, BgColor, clrBackground);
++           snprintf(symbol, sizeof(symbol), "%c", FSYM_THINROUND_RIGHT);
++           Write(Setup.OSDwidth - 1, y, symbol, BgColor, clrBackground);
++           }
++        SetFont(oldFont);
++        }
++     else
+      ClearEol(x, y, BgColor);
+      int col = 0;
+      for (;;) {
+@@ -229,6 +255,7 @@
+             p = buf;
+             s = t + 1;
+             }
++         if ((Setup.Theme == themeSaschaRound || Setup.Theme == themeSaschaScroll) && (x < 2)) x = Setup.Theme == themeSaschaScroll ? 2 : 1;
+          Write(x, y, p, FgColor, BgColor);
+          if (p == s)
+             break;
+@@ -239,7 +266,24 @@
+ 
+ void cInterface::Title(const char *s)
+ {
+-  ClearEol(0, 0, clrCyan);
++  ClearEol(0, 0, Setup.Theme == themeVanilla ? clrCyan : clrTitleLine);
++  if (Setup.Theme == themeSaschaRound || Setup.Theme == themeSaschaScroll) {
++     char symbol[3] = "";
++     eDvbFont oldFont = SetFont(fontSym);
++     if (Setup.Theme == themeSaschaScroll) {
++        snprintf(symbol, sizeof(symbol), "%c", FSYM_ROUND_RIGHT);
++        Write(0, 0, symbol, clrTitleLine, clrTransparent);
++        snprintf(symbol, sizeof(symbol), "%c", FSYM_THINROUND_RIGHT);
++        Write(Setup.OSDwidth - 1, 0, symbol, clrTitleLine, clrTransparent);
++        }
++     else {
++        snprintf(symbol, sizeof(symbol), "%c", FSYM_ROUND_LEFT1);
++        Write(0, 0, symbol, clrTitleLine, clrTransparent);
++        snprintf(symbol, sizeof(symbol), "%c", FSYM_THINROUND_RIGHT1);
++        Write(Setup.OSDwidth - 2, 0, symbol, clrTitleLine, clrTransparent);
++        }
++     SetFont(oldFont);
++     }
+   const char *t = strchr(s, '\t');
+   if (t) {
+      char buffer[Width() + 1];
+@@ -247,15 +291,27 @@
+      if (n >= sizeof(buffer))
+         n = sizeof(buffer) - 1;
+      strn0cpy(buffer, s, n + 1);
+-     Write(1, 0, buffer, clrBlack, clrCyan);
++     if (Setup.SmallFonts) {
++        eDvbFont OldFont = Interface->SetFont(fontSml);
++        Write(1, 0, buffer, Setup.Theme == themeVanilla ? clrBlack : (eDvbColor)fgtitleline, Setup.Theme == themeVanilla ? clrCyan : clrTitleLine);
++        Interface->SetFont(OldFont);
++        }
++     else
++        Write(1, 0, buffer, Setup.Theme == themeVanilla ? clrBlack : (eDvbColor)fgtitleline, Setup.Theme == themeVanilla ? clrCyan : clrTitleLine);
+      t++;
+-     Write(-(cOsd::WidthInCells(t) + 1), 0, t, clrBlack, clrCyan);
++     Write(-(cOsd::WidthInCells(t) + 1), 0, t, Setup.Theme == themeVanilla ? clrBlack : (eDvbColor)fgtitleline, Setup.Theme == themeVanilla ? clrCyan : clrTitleLine);
+      }
+   else {
+      int x = (Width() - strlen(s)) / 2;
+      if (x < 0)
+         x = 0;
+-     Write(x, 0, s, clrBlack, clrCyan);
++     if (Setup.SmallFonts) {
++        eDvbFont OldFont = Interface->SetFont(fontSml);
++        Write(x, 0, s, Setup.Theme == themeVanilla ? clrBlack : (eDvbColor)fgtitleline, Setup.Theme == themeVanilla ? clrCyan : clrTitleLine);
++        Interface->SetFont(OldFont);
++        }
++     else
++        Write(x, 0, s, Setup.Theme == themeVanilla ? clrBlack : (eDvbColor)fgtitleline, Setup.Theme == themeVanilla ? clrCyan : clrTitleLine);
+      }
+   cStatus::MsgOsdTitle(s);
+ }
+@@ -263,11 +319,12 @@
+ void cInterface::Status(const char *s, eDvbColor FgColor, eDvbColor BgColor)
+ {
+   int Line = (abs(height) == 1) ? 0 : -2;
+-  ClearEol(0, Line, s ? BgColor : clrBackground);
++  ClearEol((Setup.Theme == themeSaschaScroll) ? 1 : 0, Line, s ? BgColor == clrCyan ? (eDvbColor)clrInfoLine : BgColor : clrBackground);
+   if (s) {
+      int x = (Width() - int(strlen(s))) / 2;
+      if (x < 0)
+         x = 0;
++     if ((Setup.Theme == themeSaschaScroll) && (x < 1)) x = 1;
+      Write(x, Line, s, FgColor, BgColor);
+      }
+   cStatus::MsgOsdStatusMessage(s);
+@@ -277,7 +334,7 @@
+ {
+   Open(Setup.OSDwidth, -1);
+   isyslog("info: %s", s);
+-  Status(s, clrBlack, clrGreen);
++  Status(s, Setup.Theme == themeVanilla ? clrBlack : (eDvbColor)fginfofont, Setup.Theme == themeVanilla ? clrGreen : clrInfoLine);
+   Wait();
+   Status(NULL);
+   Close();
+@@ -287,7 +344,7 @@
+ {
+   Open(Setup.OSDwidth, -1);
+   esyslog("ERROR: %s", s);
+-  Status(s, clrWhite, clrRed);
++  Status(s, Setup.Theme == themeVanilla ? clrWhite : (eDvbColor)fgerrorfont, Setup.Theme == themeVanilla ? clrRed : clrErrorLine);
+   Wait();
+   Status(NULL);
+   Close();
+@@ -297,7 +354,7 @@
+ {
+   Open(Setup.OSDwidth, -1);
+   isyslog("confirm: %s", s);
+-  Status(s, clrBlack, clrYellow);
++  Status(s, Setup.Theme == themeVanilla ? clrBlack : (eDvbColor)fgconfirmfont, Setup.Theme == themeVanilla ? clrYellow : clrConfirmLine);
+   eKeys k = Wait(Seconds);
+   bool result = WaitForTimeout ? k == kNone : k == kOk;
+   Status(NULL);
+@@ -310,22 +367,57 @@
+ {
+   if (open) {
+      const int w = Width() / 4;
+-     cOsd::Fill(Index * w, -1, w, 1, Text ? BgColor : clrBackground);
++     if (Setup.Theme == themeSaschaRound || Setup.Theme == themeSaschaScroll) {
++        char symbol[3] = "";
++        eDvbFont oldFont = Interface->SetFont(fontSym);
++        Interface->Fill(Index * w + min((Width() % 4), Index), -1, w + ((Width() % 4) > Index ? 1 : 0), 1, Text ? BgColor : clrBackground);
++        if (Setup.Theme == themeSaschaScroll) {
++           snprintf(symbol, sizeof(symbol), "%c", FSYM_ROUND_RIGHT);
++           Interface->Write((Index * w + min((Width() % 4), Index)), -1, symbol, Text ? BgColor : clrBackground, Index == 0 ? clrTransparent : clrBackground);
++           snprintf(symbol, sizeof(symbol), "%c", FSYM_THINROUND_RIGHT);
++           Interface->Write((Index * w + min((Width() % 4), Index) + w + ((Width() % 4) > Index ? 1 : 0) - 1), -1, symbol, Text ? BgColor : clrBackground, Index == 3 ? clrTransparent : clrBackground);
++           }
++        else {
++           if (Index == 0) {
++              snprintf(symbol, sizeof(symbol), "%c", FSYM_ROUND_LEFT2);
++              Interface->Write(0, -1, symbol, Text ? BgColor : clrBackground, clrTransparent);
++              }
++           else if (Index == 3) {
++              snprintf(symbol, sizeof(symbol), "%c", FSYM_THINROUND_RIGHT2);
++              Interface->Write((Index * w + min((Width() % 4), Index) + w + ((Width() % 4) > Index ? 1 : 0) - 2), -1, symbol, Text ? BgColor : clrBackground, clrTransparent);
++              }
++           }
++        SetFont(oldFont);
++        }
++     else
++     cOsd::Fill(Index * w + min((Width() % 4), Index), -1, w + ((Width() % 4) > Index ? 1 : 0), 1, Text ? BgColor : clrBackground);
+      if (Text) {
+-        int l = (w - int(strlen(Text))) / 2;
++        int l;
++        eDvbFont oldFont = fontOsd;
++        if (Setup.SmallFonts) oldFont = Interface->SetFont(fontSml);
++        l = (w + ((Width() % 4) > Index ? 1 : 0) - cOsd::WidthInCells(Text)) / 2;
+         if (l < 0)
+            l = 0;
+-        cOsd::Text(Index * w + l, -1, Text, FgColor, BgColor);
++        cOsd::Text(Index * w + min((Width() % 4), Index) + l, -1, Text, FgColor, BgColor);
++        if (Setup.SmallFonts) Interface->SetFont(oldFont);
+         }
+      }
+ }
+ 
+ void cInterface::Help(const char *Red, const char *Green, const char *Yellow, const char *Blue)
+ {
+-  HelpButton(0, Red,    clrBlack, clrRed);
+-  HelpButton(1, Green,  clrBlack, clrGreen);
+-  HelpButton(2, Yellow, clrBlack, clrYellow);
+-  HelpButton(3, Blue,   clrWhite, clrBlue);
++  if (Setup.Theme == themeVanilla) {
++     HelpButton(0, Red,    clrBlack, clrRed);
++     HelpButton(1, Green,  clrBlack, clrGreen);
++     HelpButton(2, Yellow, clrBlack, clrYellow);
++     HelpButton(3, Blue,   clrWhite, clrBlue);
++     }
++  else {
++     HelpButton(0, Red,    clrWhite, clrHelpRed);
++     HelpButton(1, Green,  clrBlack, clrHelpGreen);
++     HelpButton(2, Yellow, clrBlack, clrHelpYellow);
++     HelpButton(3, Blue,   clrWhite, clrHelpBlue);
++     }
+   cStatus::MsgOsdHelpKeys(Red, Green, Yellow, Blue);
+ }
+ 
+diff -Nur vdr.orig/interface.h vdr/interface.h
+--- vdr.orig/interface.h	2004-05-30 00:23:11.000000000 +0200
++++ vdr/interface.h	2004-08-01 13:42:59.000000000 +0200
+@@ -32,6 +32,7 @@
+   ~cInterface();
+   bool IsOpen(void) { return open > 0; }
+   void Open(int NumCols = 0, int NumLines = 0);
++  void Open(int NumCols, int NumLines, bool logo);
+   void Close(void);
+   bool HasSVDRPConnection(void) { return SVDRP && SVDRP->HasConnection(); }
+   void Interrupt(void) { interrupted = true; }
+diff -Nur vdr.orig/Makefile vdr/Makefile
+--- vdr.orig/Makefile	2004-07-22 20:19:11.000000000 +0200
++++ vdr/Makefile	2004-08-01 13:40:47.000000000 +0200
+@@ -42,6 +42,9 @@
+ OSDFONT = -adobe-helvetica-medium-r-normal--23-*-100-100-p-*-iso8859-1
+ FIXFONT = -adobe-courier-bold-r-normal--25-*-100-100-m-*-iso8859-1
+ 
++# ElchiAIO
++OBJS += theme.o
++
+ ifndef NO_KBD
+ DEFINES += -DREMOTE_KBD
+ endif
+diff -Nur vdr.orig/menu.c vdr/menu.c
+--- vdr.orig/menu.c	2004-07-22 20:19:11.000000000 +0200
++++ vdr/menu.c	2004-08-01 13:42:59.000000000 +0200
+@@ -655,7 +655,7 @@
+ {
+   channel = Channel;
+   if (channel->GroupSep())
+-     SetColor(clrCyan, clrBackground);
++     SetColor(Setup.Theme == themeVanilla ? clrCyan : clrScrolLine, clrBackground);
+   Set();
+ }
+ 
+@@ -966,9 +966,12 @@
+ void cMenuTimerItem::Set(void)
+ {
+   char *buffer = NULL;
+-  asprintf(&buffer, "%c\t%d\t%s\t%02d:%02d\t%02d:%02d\t%s",
++  timer->Matches();
++  asprintf(&buffer, "%c\t%d\t%s%s%s\t%02d:%02d\t%02d:%02d\t%s",
+                     !timer->Active() ? ' ' : timer->FirstDay() ? '!' : timer->Recording() ? '#' : '>',
+                     timer->Channel()->Number(),
++                    !Setup.ShowWeekdays ? "" : timer->IsSingleEvent() ? timer->GetWDayString(timer->StartTime()) : "",
++                    !Setup.ShowWeekdays ? "" : timer->IsSingleEvent() ? " " : "",
+                     timer->PrintDay(timer->Day()),
+                     timer->Start() / 100,
+                     timer->Start() % 100,
+@@ -996,7 +999,7 @@
+   };
+ 
+ cMenuTimers::cMenuTimers(void)
+-:cOsdMenu(tr("Timers"), 2, CHNUMWIDTH, 10, 6, 6)
++:cOsdMenu(tr("Timers"), 2, CHNUMWIDTH, Setup.ShowWeekdays ? 7 : 4, 6, 6)
+ {
+   int i = 0;
+   cTimer *timer;
+@@ -1152,15 +1155,15 @@
+         const char *Subtitle = eventInfo->GetSubtitle();
+         const char *ExtendedDescription = eventInfo->GetExtendedDescription();
+         if (!isempty(Title)) {
+-           Add(item = new cMenuTextItem(Title, 1, Line, Setup.OSDwidth - 2, -1, clrCyan));
++           Add(item = new cMenuTextItem(Title, 1, Line, Setup.OSDwidth - 2, -1, Setup.Theme == themeVanilla ? clrCyan : (eDvbColor)fgtitle));
+            Line += item->Height() + 1;
+            }
+         if (!isempty(Subtitle)) {
+-           Add(item = new cMenuTextItem(Subtitle, 1, Line, Setup.OSDwidth - 2, -1, clrYellow));
++           Add(item = new cMenuTextItem(Subtitle, 1, Line, Setup.OSDwidth - 2, -1, Setup.Theme == themeVanilla ? clrYellow : (eDvbColor)fgsubtitle));
+            Line += item->Height() + 1;
+            }
+         if (!isempty(ExtendedDescription))
+-           Add(new cMenuTextItem(ExtendedDescription, 1, Line, Setup.OSDwidth - 2, Height() - Line - 2, clrCyan), true);
++           Add(new cMenuTextItem(ExtendedDescription, 1, Line, Setup.OSDwidth - 2, Height() - Line - 2, Setup.Theme == themeVanilla ? clrCyan : (eDvbColor)fgtitle), true);
+         SetHelp(tr("Record"), NULL, NULL, CanSwitch ? tr("Switch") : NULL);
+         }
+      }
+@@ -1186,16 +1189,72 @@
+ class cMenuWhatsOnItem : public cOsdItem {
+ public:
+   const cEventInfo *eventInfo;
+-  cMenuWhatsOnItem(const cEventInfo *EventInfo);
++  cMenuWhatsOnItem(const cEventInfo *EventInfo, bool ShowProgressBar);
++  ~cMenuWhatsOnItem();
++  virtual void Display(int Offset= -1, eDvbColor FgColor = clrWhite, eDvbColor BgColor = clrBackground);
++protected:
++  cBitmap *progressBar;
++  bool showProgressBar;
++  float percent;
++private:
++  void DrawProgressBar(eDvbColor FgColor, eDvbColor BgColor);
+ };
+ 
+-cMenuWhatsOnItem::cMenuWhatsOnItem(const cEventInfo *EventInfo)
++cMenuWhatsOnItem::cMenuWhatsOnItem(const cEventInfo *EventInfo, bool ShowProgressBar)
+ {
+   eventInfo = EventInfo;
+   char *buffer = NULL;
++  const char *Time = eventInfo->GetTimeString();
++  const char *Title = eventInfo->GetTitle();
+   cChannel *channel = Channels.GetByNumber(eventInfo->GetChannelNumber());
+-  asprintf(&buffer, "%d\t%.*s\t%.*s\t%s", eventInfo->GetChannelNumber(), 6, channel ? channel->Name() : "???", 5, eventInfo->GetTimeString(), eventInfo->GetTitle());
++  if (ShowProgressBar && Setup.ProgressBar) {
++     asprintf(&buffer, "%.*s\t%.*s\t\t%s", 10, channel ? channel->Name() : "???", 5, Time, Title ? Title : "???");
++     progressBar = new cBitmap(60, 27, 2);
++     percent = (float)(time(NULL) - eventInfo->GetTime()) / (float)(eventInfo->GetDuration());
++     if (percent < 0) percent = 0;
++     if (percent > 1.0) percent = 1.0;
++     }
++  else
++     asprintf(&buffer, "%.*s\t%.*s\t%s", 10, channel ? channel->Name() : "???", 5, Time, Title ? Title : "???");
+   SetText(buffer, false);
++  showProgressBar = ShowProgressBar && Setup.ProgressBar;
++}
++
++cMenuWhatsOnItem::~cMenuWhatsOnItem()
++{
++  if (showProgressBar)
++     delete progressBar;
++}
++
++void cMenuWhatsOnItem::DrawProgressBar(eDvbColor FgColor, eDvbColor BgColor)
++{
++  int width = progressBar->Width();
++  int height = progressBar->Height();
++
++  progressBar->Fill(0, 0, width, height, BgColor);
++  for (int i = 7; i < height - 7; i++) {
++      progressBar->SetPixel(0, i, FgColor);
++      progressBar->SetPixel(1, i, FgColor);
++      progressBar->SetPixel(2, i, FgColor);
++      progressBar->SetPixel(width - 3, i, FgColor);
++      progressBar->SetPixel(width - 2, i, FgColor);
++      progressBar->SetPixel(width - 1, i, FgColor);
++      }
++  progressBar->Fill(3, 7, (int)(percent * (width - 4)), height - 8, FgColor);
++}
++
++void cMenuWhatsOnItem::Display(int Offset, eDvbColor FgColor, eDvbColor BgColor)
++{
++  cOsdItem::Display(Offset, FgColor, BgColor);
++  if (showProgressBar) {
++     DrawProgressBar(userColor ? fgColor : FgColor, userColor ? bgColor: BgColor);
++     if (Setup.Theme == themeSaschaScroll)
++        Interface->SetBitmap(234, ((Offset + 2) * 27), *progressBar);
++     else if (Setup.Theme == themeSaschaRound)
++        Interface->SetBitmap(220, ((Offset + 2) * 27), *progressBar);
++     else
++        Interface->SetBitmap(206, ((Offset + 2) * 27), *progressBar);
++     }
+ }
+ 
+ // --- cMenuWhatsOn ----------------------------------------------------------
+@@ -1223,7 +1282,7 @@
+ }
+ 
+ cMenuWhatsOn::cMenuWhatsOn(const cSchedules *Schedules, bool Now, int CurrentChannelNr)
+-:cOsdMenu(Now ? tr("What's on now?") : tr("What's on next?"), CHNUMWIDTH, 7, 6)
++:cOsdMenu(Now ? tr("What's on now?") : tr("What's on next?"), 12, 6, 5)
+ {
+   const cSchedule *Schedule = Schedules->First();
+   const cEventInfo **pArray = NULL;
+@@ -1246,7 +1305,7 @@
+   qsort(pArray, num, sizeof(cEventInfo *), CompareEventChannel);
+ 
+   for (int a = 0; a < num; a++)
+-      Add(new cMenuWhatsOnItem(pArray[a]), pArray[a]->GetChannelNumber() == CurrentChannelNr);
++      Add(new cMenuWhatsOnItem(pArray[a], Now), pArray[a]->GetChannelNumber() == CurrentChannelNr);
+ 
+   currentChannel = CurrentChannelNr;
+   free(pArray);
+@@ -1327,6 +1386,9 @@
+ {
+   eventInfo = EventInfo;
+   char *buffer = NULL;
++  if (Setup.ShowWeekdays)
++     asprintf(&buffer, "%.*s\t%.*s\t%.*s\t%s", 3, eventInfo->GetWeekdayString(), 5, eventInfo->GetDate(), 5, eventInfo->GetTimeString(), eventInfo->GetTitle());
++  else
+   asprintf(&buffer, "%.*s\t%.*s\t%s", 5, eventInfo->GetDate(), 5, eventInfo->GetTimeString(), eventInfo->GetTitle());
+   SetText(buffer, false);
+ }
+@@ -1349,7 +1411,7 @@
+   };
+ 
+ cMenuSchedule::cMenuSchedule(void)
+-:cOsdMenu("", 6, 6)
++:cOsdMenu("", Setup.ShowWeekdays ? 5 : 6, 6, 6)
+ {
+   now = next = false;
+   otherChannel = 0;
+@@ -1525,7 +1587,7 @@
+         }
+      if (confirmed) {
+         asprintf(&buffer, "%s...", command->Title());
+-        Interface->Status(buffer);
++        Interface->Status(buffer, Setup.Theme == themeVanilla ? clrBlack : (eDvbColor)fginfofont, Setup.Theme == themeVanilla ? clrCyan : clrInfoLine);
+         Interface->Flush();
+         free(buffer);
+         const char *Result = command->Execute(parameters);
+@@ -1718,6 +1780,53 @@
+   SetText(buffer, false);
+ }
+ 
++// --- cMenuRenameRecording --------------------------------------------------
++
++class cMenuRenameRecording : public cOsdMenu {
++private:
++  int lifetime;
++  int priority;
++  char name[MaxFileName];
++  cRecording *recording;
++public:
++  cMenuRenameRecording(cRecording *Recording);
++  ~cMenuRenameRecording();
++  virtual eOSState ProcessKey(eKeys Key);
++  };
++
++cMenuRenameRecording::cMenuRenameRecording(cRecording *Recording)
++:cOsdMenu(tr("Rename recording"), 12)
++{
++  recording = Recording;
++  priority = recording->priority;
++  lifetime = recording->lifetime;
++  strncpy(name, recording->Name(), sizeof(name));
++
++  Add(new cMenuEditStrItem(tr("Name"),      name,     sizeof(name), tr(FileNameChars)));
++  Add(new cMenuEditIntItem(tr("Priority"), &priority, 0,            MAXPRIORITY      ));
++  Add(new cMenuEditIntItem(tr("Lifetime"), &lifetime, 0,            MAXLIFETIME      ));
++}
++
++cMenuRenameRecording::~cMenuRenameRecording()
++{
++}
++
++eOSState cMenuRenameRecording::ProcessKey(eKeys Key)
++{
++  eOSState state = cOsdMenu::ProcessKey(Key);
++
++  if (state == osUnknown) {
++     if (Key == kOk) {
++        if (recording->Rename(name, &priority, &lifetime))
++           return osRecordings; // rescan recordings by force
++        else
++           Interface->Error(tr("Error while accessing recording!"));
++        }
++     return osContinue;
++     }
++  return state;
++}
++
+ // --- cMenuRecordings -------------------------------------------------------
+ 
+ cRecordings cMenuRecordings::Recordings;
+@@ -1730,7 +1839,7 @@
+   level = Setup.RecordingDirs ? Level : -1;
+   Display(); // this keeps the higher level menus from showing up briefly when pressing 'Back' during replay
+   if (!Base) {
+-     Interface->Status(tr("scanning recordings..."));
++     Interface->Status(tr("scanning recordings..."), Setup.Theme == themeVanilla ? clrBlack : (eDvbColor)fginfofont, Setup.Theme == themeVanilla ? clrCyan : clrInfoLine);
+      Interface->Flush();
+      }
+   if (Base || Recordings.Load()) {
+@@ -1929,6 +2038,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();
+@@ -1941,6 +2063,7 @@
+        case kGreen:  return Rewind();
+        case kYellow: return Delete();
+        case kBlue:   return Summary();
++       case k0:      return Rename();
+        case k1...k9: return Commands(Key);
+        default: break;
+        }
+@@ -1995,6 +2118,7 @@
+   Add(new cMenuEditStraItem(tr("Setup.OSD$Language"),               &data.OSDLanguage, I18nNumLanguages, I18nLanguages()));
+   Add(new cMenuEditIntItem( tr("Setup.OSD$Width"),                  &data.OSDwidth, MINOSDWIDTH, MAXOSDWIDTH));
+   Add(new cMenuEditIntItem( tr("Setup.OSD$Height"),                 &data.OSDheight, MINOSDHEIGHT, MAXOSDHEIGHT));
++  Add(new cMenuEditIntItem( tr("Setup.OSD$Horizontal offset"),      &data.OSDxoffset, -20, 20));
+   Add(new cMenuEditIntItem( tr("Setup.OSD$Message time (s)"),       &data.OSDMessageTime, 1, 60));
+   Add(new cMenuEditBoolItem(tr("Setup.OSD$Channel info position"),  &data.ChannelInfoPos, tr("bottom"), tr("top")));
+   Add(new cMenuEditBoolItem(tr("Setup.OSD$Info on channel switch"), &data.ShowInfoOnChSwitch));
+@@ -2018,6 +2142,785 @@
+   return state;
+ }
+ 
++// --- cMenuSetupOSDThemes -----------------------------------------------------
++
++#define MAXTHEMES 5
++
++class cMenuSetupOSDThemes : public cMenuSetupBase {
++private:
++  virtual void Set(void);
++  const char * ThemeValue[MAXTHEMES];
++public:
++  cMenuSetupOSDThemes(void) { Set(); };
++  virtual eOSState ProcessKey(eKeys Key);
++  };
++
++void cMenuSetupOSDThemes::Set(void)
++{
++  int current = Current();
++
++  ThemeValue[0] = tr("Setup.Themes$Vanilla");       // themeVanilla
++  ThemeValue[1] = tr("Setup.Themes$Elchi");         // themeElchi
++  ThemeValue[2] = tr("Setup.Themes$Sascha Scroll"); // themeSaschaScroll
++  ThemeValue[3] = tr("Setup.Themes$Sascha Round");  // themeSaschaRound
++  ThemeValue[4] = NULL;
++
++  Clear();
++  SetSection(tr("OSD Themes"));
++  SetHelp("","","","");
++
++  Add(new cMenuEditStraItem(tr("Setup.Themes$Theme"), &data.Theme, MAXTHEMES - 1, ThemeValue));
++  if (data.Theme != themeVanilla) {
++     Add(new cMenuEditBoolItem(tr("Setup.Themes$Small Fonts"), &data.SmallFonts));
++     Add(new cMenuEditBoolItem(tr("Setup.Themes$Symbols in Channelinfo"), &data.Symbol));
++     Add(new cMenuEditBoolItem(tr("Setup.Themes$Timebar in Channelinfo"), &data.TimeBar));
++     Add(new cMenuEditBoolItem(tr("Setup.Themes$Progressbar in 'Whats on Now?'"), &data.ProgressBar));
++     if (data.Theme == themeSaschaRound || data.Theme == themeSaschaScroll) {
++        Add(new cMenuEditBoolItem(tr("Setup.Themes$Logo in Channelinfo"), &data.ChannelLogo));
++        if (data.ChannelLogo) {
++            Add(new cMenuEditBoolItem(tr("Setup.Themes$Color scheme for logos"), &data.LogoColorScheme));
++            }
++        }
++     }
++  Add(new cMenuEditBoolItem(tr("Setup.Themes$Show Weekdays"), &data.ShowWeekdays));
++  Add(new cMenuEditBoolItem(tr("Setup.Themes$Main Menu command position"), &data.MenuCommandPos, tr("bottom"), tr("top")));
++
++  SetCurrent(Get(current));
++  Display();
++}
++
++eOSState cMenuSetupOSDThemes::ProcessKey(eKeys Key)
++{
++  int oldTheme       = data.Theme;
++  int oldSmallFonts  = data.SmallFonts;
++  int oldChannelLogo = data.ChannelLogo;
++
++  eOSState state = cMenuSetupBase::ProcessKey(Key);
++
++  if (data.SmallFonts != oldSmallFonts) {
++     Setup.SmallFonts = data.SmallFonts;
++     Set();
++     }
++
++  if (data.ChannelLogo != oldChannelLogo) {
++     Setup.ChannelLogo = data.ChannelLogo;
++     Set();
++     }
++
++  if (data.Theme != oldTheme) {
++     Setup.Theme = data.Theme;
++     cOsd::Close();
++     cOsd::Open(Setup.OSDwidth, Setup.OSDheight, false);
++     if (Setup.Theme == themeVanilla) {
++        Setup.SmallFonts       = 0; data.SmallFonts   = Setup.SmallFonts;
++        Setup.ChannelLogo      = 0; data.ChannelLogo  = Setup.ChannelLogo;
++        Setup.Symbol           = 0; data.Symbol       = Setup.Symbol;
++        Setup.TimeBar          = 0; data.TimeBar      = Setup.TimeBar;
++        Setup.ProgressBar      = 0; data.ProgressBar  = Setup.ProgressBar;
++        Setup.ShowWeekdays     = 0; data.ShowWeekdays = Setup.ShowWeekdays;
++        bgbackground           = clrBackVanilla;
++        }
++     else if (oldTheme == themeVanilla) {
++        Setup.SmallFonts       = 1; data.SmallFonts   = Setup.SmallFonts;
++        Setup.ChannelLogo      = 1; data.ChannelLogo  = Setup.ChannelLogo;
++        Setup.Symbol           = 1; data.Symbol       = Setup.Symbol;
++        Setup.TimeBar          = 1; data.TimeBar      = Setup.TimeBar;
++        Setup.ProgressBar      = 1; data.ProgressBar  = Setup.ProgressBar;
++        Setup.ShowWeekdays     = 1; data.ShowWeekdays = Setup.ShowWeekdays;
++        bgbackground           = Setup.BgClrBackground;
++        }
++     Set();
++     }
++
++  return state;
++}
++
++// --- cMenuSetupColors --------------------------------------------------------
++
++class cMenuSetupColors : public cMenuSetupBase {
++private:
++  virtual void Set(void);
++  virtual void SetColors(void);
++  eDvbColor GetFgColor(int color);
++  eDvbColor GetBgColor(int color);
++  cColorSchemeSetup *scheme;
++  int lastcolor;
++  const char * BgColorValue[15];
++  const char * FgColorValue[24];
++  static const char * const TransparencyValue[];
++  static const char * const RedValue[];
++  static const char * const GreenValue[];
++  static const char * const BlueValue[];
++public:
++  cMenuSetupColors(cColorSchemeSetup *Scheme);
++  ~cMenuSetupColors();
++  virtual eOSState ProcessKey(eKeys Key);
++  };
++
++cMenuSetupColors::cMenuSetupColors(cColorSchemeSetup *Scheme)
++{
++  scheme = Scheme;
++
++  BgColorValue[0]  = tr("Setup.Colors$Background");
++  BgColorValue[1]  = tr("Setup.Colors$Channel Name");
++  BgColorValue[2]  = tr("Setup.Colors$Channel Number");
++  BgColorValue[3]  = tr("Setup.Colors$EPG Time");
++  BgColorValue[4]  = tr("Setup.Colors$EPG Data");
++  BgColorValue[5]  = tr("Setup.Colors$Title Line");
++  BgColorValue[6]  = tr("Setup.Colors$Scroll Line");
++  BgColorValue[7]  = tr("Setup.Colors$Red Button");
++  BgColorValue[8]  = tr("Setup.Colors$Green Button");
++  BgColorValue[9]  = tr("Setup.Colors$Yellow Button");
++  BgColorValue[10] = tr("Setup.Colors$Blue Button");
++  BgColorValue[11] = tr("Setup.Colors$Error Line");
++  BgColorValue[12] = tr("Setup.Colors$Info Line");
++  BgColorValue[13] = tr("Setup.Colors$Confirm Line");
++  BgColorValue[14] = NULL;
++
++  FgColorValue[0]  = tr("Setup.Colors$Black");
++  FgColorValue[1]  = tr("Setup.Colors$White");
++  FgColorValue[2]  = tr("Setup.Colors$Red");
++  FgColorValue[3]  = tr("Setup.Colors$Green");
++  FgColorValue[4]  = tr("Setup.Colors$Yellow");
++  FgColorValue[5]  = tr("Setup.Colors$Magenta");
++  FgColorValue[6]  = tr("Setup.Colors$Blue");
++  FgColorValue[7]  = tr("Setup.Colors$Cyan");
++  FgColorValue[8]  = tr("Setup.Colors$Grey");
++  FgColorValue[9]  = tr("Setup.Colors$Transparent");
++  FgColorValue[10] = tr("Setup.Colors$Background");
++  FgColorValue[11] = tr("Setup.Colors$Channel Name");
++  FgColorValue[12] = tr("Setup.Colors$Channel Number");
++  FgColorValue[13] = tr("Setup.Colors$EPG Time");
++  FgColorValue[14] = tr("Setup.Colors$Title Line");
++  FgColorValue[15] = tr("Setup.Colors$Scroll Line");
++  FgColorValue[16] = tr("Setup.Colors$Red Button");
++  FgColorValue[17] = tr("Setup.Colors$Green Button");
++  FgColorValue[18] = tr("Setup.Colors$Yellow Button");
++  FgColorValue[19] = tr("Setup.Colors$Blue Button");
++  FgColorValue[20] = tr("Setup.Colors$Error Line");
++  FgColorValue[21] = tr("Setup.Colors$Info Line");
++  FgColorValue[22] = tr("Setup.Colors$Confirm Line");
++  FgColorValue[23] = NULL;
++
++  Set();
++}
++
++cMenuSetupColors::~cMenuSetupColors()
++{
++  bgscrolline = scheme->BgClrScrolLine;
++  fgscrolline = GetFgColor(scheme->ClrScrolLine);
++}
++
++const char * const cMenuSetupColors::TransparencyValue[] =
++{
++  "                              ",
++  "||                            ",
++  "||||                          ",
++  "||||||                        ",
++  "||||||||                      ",
++  "||||||||||                    ",
++  "||||||||||||                  ",
++  "||||||||||||||                ",
++  "||||||||||||||||              ",
++  "||||||||||||||||||            ",
++  "||||||||||||||||||||          ",
++  "||||||||||||||||||||||        ",
++  "||||||||||||||||||||||||      ",
++  "||||||||||||||||||||||||||    ",
++  "||||||||||||||||||||||||||||  ",
++  "||||||||||||||||||||||||||||||",
++  NULL
++};
++
++const char * const cMenuSetupColors::RedValue[] =
++{
++  "                              ",
++  "||                            ",
++  "||||                          ",
++  "||||||                        ",
++  "||||||||                      ",
++  "||||||||||                    ",
++  "||||||||||||                  ",
++  "||||||||||||||                ",
++  "||||||||||||||||              ",
++  "||||||||||||||||||            ",
++  "||||||||||||||||||||          ",
++  "||||||||||||||||||||||        ",
++  "||||||||||||||||||||||||      ",
++  "||||||||||||||||||||||||||    ",
++  "||||||||||||||||||||||||||||  ",
++  "||||||||||||||||||||||||||||||",
++  NULL
++};
++
++const char * const cMenuSetupColors::GreenValue[] =
++{
++  "                              ",
++  "||                            ",
++  "||||                          ",
++  "||||||                        ",
++  "||||||||                      ",
++  "||||||||||                    ",
++  "||||||||||||                  ",
++  "||||||||||||||                ",
++  "||||||||||||||||              ",
++  "||||||||||||||||||            ",
++  "||||||||||||||||||||          ",
++  "||||||||||||||||||||||        ",
++  "||||||||||||||||||||||||      ",
++  "||||||||||||||||||||||||||    ",
++  "||||||||||||||||||||||||||||  ",
++  "||||||||||||||||||||||||||||||",
++  NULL
++};
++
++const char * const cMenuSetupColors::BlueValue[] =
++{
++  "                              ",
++  "||                            ",
++  "||||                          ",
++  "||||||                        ",
++  "||||||||                      ",
++  "||||||||||                    ",
++  "||||||||||||                  ",
++  "||||||||||||||                ",
++  "||||||||||||||||              ",
++  "||||||||||||||||||            ",
++  "||||||||||||||||||||          ",
++  "||||||||||||||||||||||        ",
++  "||||||||||||||||||||||||      ",
++  "||||||||||||||||||||||||||    ",
++  "||||||||||||||||||||||||||||  ",
++  "||||||||||||||||||||||||||||||",
++  NULL
++};
++
++eDvbColor cMenuSetupColors::GetBgColor(int color)
++{
++  switch (color) {
++    case 0:  return clrBackground;
++    case 1:  return clrChannelName;
++    case 2:  return clrChannelDate;
++    case 3:  return clrEpgTime;
++    case 4:  return clrEpgData;
++    case 5:  return clrTitleLine;
++    case 6:  return clrScrolLine;
++    case 7:  return clrHelpRed;
++    case 8:  return clrHelpGreen;
++    case 9:  return clrHelpYellow;
++    case 10: return clrHelpBlue;
++    case 11: return clrErrorLine;
++    case 12: return clrInfoLine;
++    case 13: return clrConfirmLine;
++    default: break;
++    }
++  return clrBackground;
++}
++
++eDvbColor cMenuSetupColors::GetFgColor(int color)
++{
++  switch (color) {
++    case 0:  return clrBlack;
++    case 1:  return clrWhite;
++    case 2:  return clrRed;
++    case 3:  return clrGreen;
++    case 4:  return clrYellow;
++    case 5:  return clrMagenta;
++    case 6:  return clrBlue;
++    case 7:  return clrCyan;
++    case 8:  return clrGrey;
++    case 9:  return clrTransparent;
++    case 10: return clrBackground;
++    case 11: return clrChannelName;
++    case 12: return clrChannelDate;
++    case 13: return clrEpgTime;
++    case 14: return clrTitleLine;
++    case 15: return clrScrolLine;
++    case 16: return clrHelpRed;
++    case 17: return clrHelpGreen;
++    case 18: return clrHelpYellow;
++    case 19: return clrHelpBlue;
++    case 20: return clrErrorLine;
++    case 21: return clrInfoLine;
++    case 22: return clrConfirmLine;
++    default: break;
++    }
++  return clrBlack;
++}
++
++void cMenuSetupColors::SetColors(void)
++{
++  lastcolor = (data.Red                ) | (data.Red           <<  4) |
++              (data.Green         <<  8) | (data.Green         << 12) |
++              (data.Blue          << 16) | (data.Blue          << 20) |
++              (data.Transparency  << 24) | (data.Transparency  << 28);
++
++  (eDvbColor)fgchannelname = GetFgColor(scheme->ClrChannelName);
++  (eDvbColor)fgchanneldate = GetFgColor(scheme->ClrChannelDate);
++  (eDvbColor)fgepgtime     = GetFgColor(scheme->ClrEpgTime);
++  (eDvbColor)fgtitle       = GetFgColor(scheme->ClrTitle);
++  (eDvbColor)fgsubtitle    = GetFgColor(scheme->ClrSubTitle);
++  (eDvbColor)fgmenufont    = GetFgColor(scheme->ClrMenuFont);
++  (eDvbColor)fgtitleline   = GetFgColor(scheme->ClrTitleLine);
++  (eDvbColor)fgscrolline   = GetFgColor(scheme->ClrScrolLine);
++  (eDvbColor)volumebar     = GetFgColor(scheme->ClrVolumeBar);
++  (eDvbColor)timebar1      = GetFgColor(scheme->ClrTimeBar1);
++  (eDvbColor)timebar2      = GetFgColor(scheme->ClrTimeBar2);
++  (eDvbColor)fgsymbolon    = GetFgColor(scheme->ClrSymbolOn);
++  (eDvbColor)fgsymboloff   = GetFgColor(scheme->ClrSymbolOff);
++  (eDvbColor)fgerrorfont   = GetFgColor(scheme->ClrErrorFont);
++  (eDvbColor)fginfofont    = GetFgColor(scheme->ClrInfoFont);
++  (eDvbColor)fgconfirmfont = GetFgColor(scheme->ClrConfirmFont);
++
++  switch (data.BgColor) {
++    case 0:
++         // clrBackground
++         bgbackground = Setup.Theme == themeVanilla ? clrBackVanilla : lastcolor;
++         scheme->BgClrBackground = (eDvbColor)bgbackground;
++         bgscrolline = scheme->BgClrScrolLine;
++         break;
++    case 1:
++         // clrChannelName
++         bgchannelname = lastcolor;
++         scheme->BgClrChannelName = (eDvbColor)bgchannelname;
++         bgscrolline = bgchannelname;
++         fgscrolline = fgchannelname;
++         break;
++    case 2:
++         // clrChannelDate
++         bgchanneldate = lastcolor;
++         scheme->BgClrChannelDate = (eDvbColor)bgchanneldate;
++         bgscrolline = bgchanneldate;
++         fgscrolline = fgchanneldate;
++         break;
++    case 3:
++         // clrEpgTime
++         bgepgtime = lastcolor;
++         scheme->BgClrEpgTime = (eDvbColor)bgepgtime;
++         bgscrolline = bgepgtime;
++         fgscrolline = fgepgtime;
++         break;
++    case 4:
++         // clrEpgData
++         bgepgdata = lastcolor;
++         scheme->BgClrEpgData = (eDvbColor)bgepgdata;
++         bgscrolline = bgepgdata;
++         fgscrolline = fgtitle;
++         break;
++    case 5:
++         // clrTitleLine
++         bgtitleline = lastcolor; 
++         scheme->BgClrTitleLine = (eDvbColor)bgtitleline;
++         bgscrolline = bgtitleline;
++         fgscrolline = fgtitleline;
++         break;
++    case 6:
++         // clrScrolLine
++         bgscrolline = lastcolor;
++         scheme->BgClrScrolLine = (eDvbColor)bgscrolline;
++         break;
++    case 7:
++         // clrHelpRed
++         bghelpred = lastcolor;
++         scheme->BgClrHelpRed = (eDvbColor)bghelpred;
++         bgscrolline = bghelpred;
++         fgscrolline = clrWhite;
++         break;
++    case 8:
++         // clrHelpGreen
++         bghelpgreen = lastcolor;
++         scheme->BgClrHelpGreen = (eDvbColor)bghelpgreen;
++         bgscrolline = bghelpgreen;
++         fgscrolline = clrBlack;
++         break;
++    case 9:
++         // clrHelpYellow
++         bghelpyellow = lastcolor;
++         scheme->BgClrHelpYellow = (eDvbColor)bghelpyellow;
++         bgscrolline = bghelpyellow;
++         fgscrolline = clrBlack;
++         break;
++    case 10:
++         // clrHelpBlue
++         bghelpblue = lastcolor;
++         scheme->BgClrHelpBlue = (eDvbColor)bghelpblue;
++         bgscrolline = bghelpblue;
++         fgscrolline = clrWhite;
++         break;
++    case 11:
++         // clrErrorLine
++         bgerrorline = lastcolor;
++         scheme->BgClrErrorLine = (eDvbColor)bgerrorline;
++         bgscrolline = bgerrorline;
++         fgscrolline = fgerrorfont;
++         break;
++    case 12:
++         // clrInfoLine
++         bginfoline = lastcolor;
++         scheme->BgClrInfoLine = (eDvbColor)bginfoline;
++         bgscrolline = bginfoline;
++         fgscrolline = fginfofont;
++         break;
++    case 13:
++         // clrConfirmLine
++         bgconfirmline = lastcolor;
++         scheme->BgClrConfirmLine = (eDvbColor)bgconfirmline;
++         bgscrolline = bgconfirmline;
++         fgscrolline = fgconfirmfont;
++         break;
++    default:
++         break;
++    }
++}
++
++void cMenuSetupColors::Set(void)
++{
++  int current = Current();
++
++  if (data.BgColor == 6)
++     lastcolor      = scheme->BgClrScrolLine;
++  else
++     lastcolor      = GetBgColor(data.BgColor);
++  data.Red          = (lastcolor & 0x0000000F);
++  data.Green        = (lastcolor & 0x00000F00) >>  8;
++  data.Blue         = (lastcolor & 0x000F0000) >> 16;
++  data.Transparency = (lastcolor & 0x0F000000) >> 24;
++
++  Clear();
++  SetSection(tr("Colors"));
++
++  Add(new cMenuEditStrItem( tr("Setup.Colors$Default Description"),   scheme->Description,   MaxFileName, tr(FileNameChars)));
++  Add(new cMenuEditStrItem( tr("Setup.Colors$Localized Description"), scheme->DescriptionX,  MaxFileName, tr(FileNameChars)));
++  Add(new cMenuEditStraItem(tr("Setup.Colors$Volumebar"),             &scheme->ClrVolumeBar, 23, FgColorValue));
++  Add(new cMenuEditStraItem(tr("Setup.Colors$Symbol Light Active"),   &scheme->ClrSymbolOn,  23, FgColorValue));
++  Add(new cMenuEditStraItem(tr("Setup.Colors$Symbol Light Off"),      &scheme->ClrSymbolOff, 23, FgColorValue));
++  Add(new cMenuEditStraItem(tr("Setup.Colors$Timebar Background"),    &scheme->ClrTimeBar1,  23, FgColorValue));
++  Add(new cMenuEditStraItem(tr("Setup.Colors$Timebar Variable"),      &scheme->ClrTimeBar2,  23, FgColorValue));
++  Add(new cMenuEditStraItem(tr("Setup.Colors$Variable Colors"),       &data.BgColor,         14, BgColorValue));
++  Add(new cMenuEditStraItem(tr("Setup.Colors$  Transparency Value"),  &data.Transparency,    16, TransparencyValue));
++  Add(new cMenuEditStraItem(tr("Setup.Colors$  Red Value"),           &data.Red,             16, RedValue));
++  Add(new cMenuEditStraItem(tr("Setup.Colors$  Green Value"),         &data.Green,           16, GreenValue));
++  Add(new cMenuEditStraItem(tr("Setup.Colors$  Blue Value"),          &data.Blue,            16, BlueValue));
++  switch (data.BgColor) {
++    case 0:
++         // clrBackground
++         Add(new cMenuEditStraItem(tr("Setup.Colors$Fontcolor Main Menu"), &scheme->ClrMenuFont, 23, FgColorValue));
++         break;
++    case 1:
++         // clrChannelName
++         Add(new cMenuEditStraItem(tr("Setup.Colors$Fontcolor Channel Name"), &scheme->ClrChannelName, 23, FgColorValue));
++         break;
++    case 2:
++         // clrChannelDate
++         Add(new cMenuEditStraItem(tr("Setup.Colors$Fontcolor Channel Number"), &scheme->ClrChannelDate, 23, FgColorValue));
++         break;
++    case 3:
++         // clrEpgTime
++         Add(new cMenuEditStraItem(tr("Setup.Colors$Fontcolor EPG Time"), &scheme->ClrEpgTime, 23, FgColorValue));
++         break;
++    case 4:
++         // clrEpgData
++         Add(new cMenuEditStraItem(tr("Setup.Colors$Fontcolor EPG Title"),    &scheme->ClrTitle,    23, FgColorValue));
++         Add(new cMenuEditStraItem(tr("Setup.Colors$Fontcolor EPG Subtitle"), &scheme->ClrSubTitle, 23, FgColorValue));
++         break;
++    case 5:
++         // clrTitleLine
++         Add(new cMenuEditStraItem(tr("Setup.Colors$Fontcolor Title Line"), &scheme->ClrTitleLine, 23, FgColorValue));
++         break;
++    case 6:
++         // clrScrolLine
++         Add(new cMenuEditStraItem(tr("Setup.Colors$Fontcolor Scroll Line"), &scheme->ClrScrolLine, 23, FgColorValue));
++         break;
++    case 7:
++         // clrHelpRed
++         break;
++    case 8:
++         // clrHelpGreen
++         break;
++    case 9:
++         // clrHelpYellow
++         break;
++    case 10:
++         // clrHelpBlue
++         break;
++    case 11:
++         // clrErrorLine
++         Add(new cMenuEditStraItem(tr("Setup.Colors$Fontcolor Error Line"), &scheme->ClrErrorFont, 23, FgColorValue));
++         break;
++    case 12:
++         // clrInfoLine
++         Add(new cMenuEditStraItem(tr("Setup.Colors$Fontcolor Info Line"), &scheme->ClrInfoFont, 23, FgColorValue));
++         break;
++    case 13:
++         // clrConfirmLine
++         Add(new cMenuEditStraItem(tr("Setup.Colors$Fontcolor Confirm Line"), &scheme->ClrConfirmFont, 23, FgColorValue));
++         break;
++    default:
++         break;
++    }
++
++  SetHelp("","","","");
++  SetCurrent(Get(current));
++}
++
++eOSState cMenuSetupColors::ProcessKey(eKeys Key)
++{  
++  int osdBgColor = data.BgColor;
++
++  eOSState state = cMenuSetupBase::ProcessKey(Key);
++
++  if (data.BgColor != osdBgColor) {
++     Setup.BgColor = data.BgColor;
++     Set();
++     }
++
++  if ((Key != kNone) && (Current() > 1)) {
++     SetColors();
++     Display();
++     }
++
++  return state;
++}
++
++// --- cMenuSetupColorSchemes ---------------------------------------------------
++
++#define SCHEMESDIR "/schemes"
++#define SCHEMESEXT "*.scheme"
++#define MAXCOLORSCHEMES 30
++
++class cMenuSetupColorSchemes : public cMenuSetupBase {
++private:
++  cColorSchemeSetup *pArray[MAXCOLORSCHEMES];
++public:
++  cMenuSetupColorSchemes(void);
++  ~cMenuSetupColorSchemes();
++  void Preview(int index);
++  void SaveColors(int index);
++  void SaveScheme(int index);
++  virtual eOSState ProcessKey(eKeys Key);
++  };
++
++cMenuSetupColorSchemes::cMenuSetupColorSchemes(void)
++{
++  char *buffer = NULL;
++  int index = 0;
++
++  Clear();
++  SetSection(tr("Color Schemes"));
++  SetHelp(tr("Edit"), "", "", tr("Setup.Scheme$Save"));
++
++  for (int i = 0; i < MAXCOLORSCHEMES; i++)
++      pArray[i] = NULL;
++
++  pArray[0] = new cColorSchemeSetup;
++  strn0cpy(pArray[0]->Description, "Current Color Scheme", MaxFileName);
++  strn0cpy(pArray[0]->DescriptionX, tr("Setup.Scheme$Current Color Scheme"), MaxFileName);
++  pArray[0]->BgClrBackground  = bgbackground;
++  pArray[0]->BgClrChannelName = bgchannelname;
++  pArray[0]->BgClrChannelDate = bgchanneldate;
++  pArray[0]->BgClrEpgTime     = bgepgtime;
++  pArray[0]->BgClrEpgData     = bgepgdata;
++  pArray[0]->BgClrTitleLine   = bgtitleline;
++  pArray[0]->BgClrScrolLine   = bgscrolline;
++  pArray[0]->BgClrHelpRed     = bghelpred;
++  pArray[0]->BgClrHelpGreen   = bghelpgreen;
++  pArray[0]->BgClrHelpYellow  = bghelpyellow;
++  pArray[0]->BgClrHelpBlue    = bghelpblue;
++  pArray[0]->BgClrErrorLine   = bgerrorline;
++  pArray[0]->BgClrInfoLine    = bginfoline;
++  pArray[0]->BgClrConfirmLine = bgconfirmline;
++  pArray[0]->ClrChannelName   = Setup.ClrChannelName;
++  pArray[0]->ClrChannelDate   = Setup.ClrChannelDate;
++  pArray[0]->ClrEpgTime       = Setup.ClrEpgTime;
++  pArray[0]->ClrTitle         = Setup.ClrTitle;
++  pArray[0]->ClrSubTitle      = Setup.ClrSubTitle;
++  pArray[0]->ClrMenuFont      = Setup.ClrMenuFont;
++  pArray[0]->ClrTitleLine     = Setup.ClrTitleLine;
++  pArray[0]->ClrScrolLine     = Setup.ClrScrolLine;
++  pArray[0]->ClrVolumeBar     = Setup.ClrVolumeBar;
++  pArray[0]->ClrTimeBar1      = Setup.ClrTimeBar1;
++  pArray[0]->ClrTimeBar2      = Setup.ClrTimeBar2;
++  pArray[0]->ClrSymbolOn      = Setup.ClrSymbolOn;
++  pArray[0]->ClrSymbolOff     = Setup.ClrSymbolOff;
++  pArray[0]->ClrErrorFont     = Setup.ClrErrorFont;
++  pArray[0]->ClrInfoFont      = Setup.ClrInfoFont;
++  pArray[0]->ClrConfirmFont   = Setup.ClrConfirmFont;
++  Add(new cOsdItem(pArray[0]->DescriptionX));
++  index++;
++
++  asprintf(&buffer, "find %s%s -follow -type f -name '%s' |sort", ConfigDirectory, SCHEMESDIR, SCHEMESEXT);
++  FILE *p = popen(buffer, "r");
++  free(buffer);
++  if (p) {
++     char *s;
++     while (((s = readline(p)) != NULL) && (index < MAXCOLORSCHEMES)) {
++           pArray[index] = new cColorSchemeSetup;
++           pArray[index]->Load(s);
++           asprintf(&buffer, "%s", isempty(pArray[index]->DescriptionX) ? isempty(pArray[index]->Description) ? (s + strlen(ConfigDirectory) + strlen(SCHEMESDIR) + 1) : pArray[index]->Description : pArray[index]->DescriptionX);
++           Add(new cOsdItem(buffer));
++           free(buffer);
++           index++;
++           }
++     }
++}
++
++cMenuSetupColorSchemes::~cMenuSetupColorSchemes()
++{
++  for (int i = 0; i < MAXCOLORSCHEMES; i++) {
++      if (pArray[i]) {
++         free(pArray[i]);
++         }
++      }
++
++  (eDvbColor)bgbackground  = Setup.BgClrBackground;
++  (eDvbColor)bgchannelname = Setup.BgClrChannelName;
++  (eDvbColor)bgchanneldate = Setup.BgClrChannelDate;
++  (eDvbColor)bgepgtime     = Setup.BgClrEpgTime;
++  (eDvbColor)bgepgdata     = Setup.BgClrEpgData;
++  (eDvbColor)bgtitleline   = Setup.BgClrTitleLine;
++  (eDvbColor)bgscrolline   = Setup.BgClrScrolLine;
++  (eDvbColor)bghelpred     = Setup.BgClrHelpRed;
++  (eDvbColor)bghelpgreen   = Setup.BgClrHelpGreen;
++  (eDvbColor)bghelpyellow  = Setup.BgClrHelpYellow;
++  (eDvbColor)bghelpblue    = Setup.BgClrHelpBlue;
++  (eDvbColor)bgerrorline   = Setup.BgClrErrorLine;
++  (eDvbColor)bginfoline    = Setup.BgClrInfoLine;
++  (eDvbColor)bgconfirmline = Setup.BgClrConfirmLine;
++
++  (eDvbColor)fgchannelname = LookupColor(Setup.ClrChannelName);
++  (eDvbColor)fgchanneldate = LookupColor(Setup.ClrChannelDate);
++  (eDvbColor)fgepgtime     = LookupColor(Setup.ClrEpgTime);
++  (eDvbColor)fgtitle       = LookupColor(Setup.ClrTitle);
++  (eDvbColor)fgsubtitle    = LookupColor(Setup.ClrSubTitle);
++  (eDvbColor)fgmenufont    = LookupColor(Setup.ClrMenuFont);
++  (eDvbColor)fgtitleline   = LookupColor(Setup.ClrTitleLine);
++  (eDvbColor)fgscrolline   = LookupColor(Setup.ClrScrolLine);
++  (eDvbColor)volumebar     = LookupColor(Setup.ClrVolumeBar);
++  (eDvbColor)timebar1      = LookupColor(Setup.ClrTimeBar1);
++  (eDvbColor)timebar2      = LookupColor(Setup.ClrTimeBar2);
++  (eDvbColor)fgsymbolon    = LookupColor(Setup.ClrSymbolOn);
++  (eDvbColor)fgsymboloff   = LookupColor(Setup.ClrSymbolOff);
++  (eDvbColor)fgerrorfont   = LookupColor(Setup.ClrErrorFont);
++  (eDvbColor)fginfofont    = LookupColor(Setup.ClrInfoFont);
++  (eDvbColor)fgconfirmfont = LookupColor(Setup.ClrConfirmFont);
++}
++
++void cMenuSetupColorSchemes::Preview(int index)
++{
++  (eDvbColor)bgbackground  = pArray[index]->BgClrBackground;
++  (eDvbColor)bgchannelname = pArray[index]->BgClrChannelName;
++  (eDvbColor)bgchanneldate = pArray[index]->BgClrChannelDate;
++  (eDvbColor)bgepgtime     = pArray[index]->BgClrEpgTime;
++  (eDvbColor)bgepgdata     = pArray[index]->BgClrEpgData;
++  (eDvbColor)bgtitleline   = pArray[index]->BgClrTitleLine;
++  (eDvbColor)bgscrolline   = pArray[index]->BgClrScrolLine;
++  (eDvbColor)bghelpred     = pArray[index]->BgClrHelpRed;
++  (eDvbColor)bghelpgreen   = pArray[index]->BgClrHelpGreen;
++  (eDvbColor)bghelpyellow  = pArray[index]->BgClrHelpYellow;
++  (eDvbColor)bghelpblue    = pArray[index]->BgClrHelpBlue;
++  (eDvbColor)bgerrorline   = pArray[index]->BgClrErrorLine;
++  (eDvbColor)bginfoline    = pArray[index]->BgClrInfoLine;
++  (eDvbColor)bgconfirmline = pArray[index]->BgClrConfirmLine;
++
++  (eDvbColor)fgchannelname = LookupColor(pArray[index]->ClrChannelName);
++  (eDvbColor)fgchanneldate = LookupColor(pArray[index]->ClrChannelDate);
++  (eDvbColor)fgepgtime     = LookupColor(pArray[index]->ClrEpgTime);
++  (eDvbColor)fgtitle       = LookupColor(pArray[index]->ClrTitle);
++  (eDvbColor)fgsubtitle    = LookupColor(pArray[index]->ClrSubTitle);
++  (eDvbColor)fgmenufont    = LookupColor(pArray[index]->ClrMenuFont);
++  (eDvbColor)fgtitleline   = LookupColor(pArray[index]->ClrTitleLine);
++  (eDvbColor)fgscrolline   = LookupColor(pArray[index]->ClrScrolLine);
++  (eDvbColor)volumebar     = LookupColor(pArray[index]->ClrVolumeBar);
++  (eDvbColor)timebar1      = LookupColor(pArray[index]->ClrTimeBar1);
++  (eDvbColor)timebar2      = LookupColor(pArray[index]->ClrTimeBar2);
++  (eDvbColor)fgsymbolon    = LookupColor(pArray[index]->ClrSymbolOn);
++  (eDvbColor)fgsymboloff   = LookupColor(pArray[index]->ClrSymbolOff);
++  (eDvbColor)fgerrorfont   = LookupColor(pArray[index]->ClrErrorFont);
++  (eDvbColor)fginfofont    = LookupColor(pArray[index]->ClrInfoFont);
++  (eDvbColor)fgconfirmfont = LookupColor(pArray[index]->ClrConfirmFont);
++
++  Display();
++}
++
++void cMenuSetupColorSchemes::SaveColors(int index)
++{
++  data.BgClrBackground  = pArray[index]->BgClrBackground;
++  data.BgClrChannelName = pArray[index]->BgClrChannelName;
++  data.BgClrChannelDate = pArray[index]->BgClrChannelDate;
++  data.BgClrEpgTime     = pArray[index]->BgClrEpgTime;
++  data.BgClrEpgData     = pArray[index]->BgClrEpgData;
++  data.BgClrTitleLine   = pArray[index]->BgClrTitleLine;
++  data.BgClrScrolLine   = pArray[index]->BgClrScrolLine;
++  data.BgClrHelpRed     = pArray[index]->BgClrHelpRed;
++  data.BgClrHelpGreen   = pArray[index]->BgClrHelpGreen;
++  data.BgClrHelpYellow  = pArray[index]->BgClrHelpYellow;
++  data.BgClrHelpBlue    = pArray[index]->BgClrHelpBlue;
++  data.BgClrErrorLine   = pArray[index]->BgClrErrorLine;
++  data.BgClrInfoLine    = pArray[index]->BgClrInfoLine;
++  data.BgClrConfirmLine = pArray[index]->BgClrConfirmLine;
++
++  data.ClrChannelName   = pArray[index]->ClrChannelName;
++  data.ClrChannelDate   = pArray[index]->ClrChannelDate;
++  data.ClrEpgTime       = pArray[index]->ClrEpgTime;
++  data.ClrTitle         = pArray[index]->ClrTitle;
++  data.ClrSubTitle      = pArray[index]->ClrSubTitle;
++  data.ClrMenuFont      = pArray[index]->ClrMenuFont;
++  data.ClrTitleLine     = pArray[index]->ClrTitleLine;
++  data.ClrScrolLine     = pArray[index]->ClrScrolLine;
++  data.ClrVolumeBar     = pArray[index]->ClrVolumeBar;
++  data.ClrTimeBar1      = pArray[index]->ClrTimeBar1;
++  data.ClrTimeBar2      = pArray[index]->ClrTimeBar2;
++  data.ClrSymbolOn      = pArray[index]->ClrSymbolOn;
++  data.ClrSymbolOff     = pArray[index]->ClrSymbolOff;
++  data.ClrErrorFont     = pArray[index]->ClrErrorFont;
++  data.ClrInfoFont      = pArray[index]->ClrInfoFont;
++  data.ClrConfirmFont   = pArray[index]->ClrConfirmFont;
++
++  Preview(index);
++  Store();
++}
++
++void cMenuSetupColorSchemes::SaveScheme(int index)
++{
++  SaveColors(index);
++  if (index) {
++     if (pArray[index]->Save())
++        Interface->Info(tr("Setup.Scheme$Color scheme saved."));
++     else
++        Interface->Error(tr("Setup.Scheme$Error while saving color scheme!"));
++     }
++}
++
++eOSState cMenuSetupColorSchemes::ProcessKey(eKeys Key)
++{
++  int OldIndex, NewIndex;
++
++  OldIndex = Current();
++  eOSState state = cOsdMenu::ProcessKey(Key);
++  NewIndex = Current();
++
++  if (OldIndex != NewIndex) {
++     Preview(NewIndex);
++  }
++
++  if (state == osUnknown) {
++     switch (Key) {
++       case kRed:
++            return AddSubMenu(new cMenuSetupColors(pArray[NewIndex]));
++       case kOk:
++            SaveColors(NewIndex);
++            return osBack;
++       case kBlue:
++            SaveScheme(NewIndex);
++            return osContinue;
++       default:
++            break;
++       }
++     }
++
++  return state;
++}
++
+ // --- cMenuSetupEPG ---------------------------------------------------------
+ 
+ class cMenuSetupEPG : public cMenuSetupBase {
+@@ -2227,6 +3130,9 @@
+   Add(new cMenuEditBoolItem(tr("Setup.Recording$Record Dolby Digital"),      &data.RecordDolbyDigital));
+   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 ------------------------------------------------------
+@@ -2360,6 +3266,8 @@
+   Add(new cOsdItem(hk(tr("Miscellaneous")), osUser8));
+   if (cPluginManager::HasPlugins())
+   Add(new cOsdItem(hk(tr("Plugins")),       osUser9));
++  Add(new cOsdItem(hk(tr("OSD Themes")),    osUser11));
++  Add(new cOsdItem(hk(tr("Color Schemes")), osUser12));
+   Add(new cOsdItem(hk(tr("Restart")),       osUser10));
+ }
+ 
+@@ -2387,6 +3295,8 @@
+     case osUser7: return AddSubMenu(new cMenuSetupReplay);
+     case osUser8: return AddSubMenu(new cMenuSetupMisc);
+     case osUser9: return AddSubMenu(new cMenuSetupPlugins);
++    case osUser11: return AddSubMenu(new cMenuSetupOSDThemes);
++    case osUser12: return AddSubMenu(new cMenuSetupColorSchemes);
+     case osUser10: return Restart();
+     default: ;
+     }
+@@ -2464,9 +3374,41 @@
+   int Minutes = int(double(FreeMB) / MB_PER_MINUTE);
+   int Hours = Minutes / 60;
+   Minutes %= 60;
++  if (Setup.Theme != themeVanilla)
++  snprintf(buffer, sizeof(buffer), "%s   %s %d%%   %2d:%02d %s", tr("VDR"), tr("Disk"), Percent, Hours, Minutes, tr("free"));
++  else
+   snprintf(buffer, sizeof(buffer), "%s  -  %s %d%%  -  %2d:%02d %s", tr("VDR"), tr("Disk"), Percent, Hours, Minutes, tr("free"));
+   SetTitle(buffer);
+ 
++  if (Setup.MenuCommandPos) {
++  // Replay control:
++
++  if (replaying)
++     Add(new cOsdItem(tr(" Stop replaying"), osStopReplay));
++
++  // Record control:
++
++  if (cRecordControls::StopPrimary()) {
++     char *buffer = NULL;
++     asprintf(&buffer, "%s%s", STOP_RECORDING, ON_PRIMARY_INTERFACE);
++     Add(new cOsdItem(buffer, osStopRecord));
++     free(buffer);
++     }
++
++  const char *s = NULL;
++  while ((s = cRecordControls::GetInstantId(s)) != NULL) {
++        char *buffer = NULL;
++        asprintf(&buffer, "%s%s", STOP_RECORDING, s);
++        Add(new cOsdItem(buffer, osStopRecord));
++        free(buffer);
++        }
++
++  // Editing control:
++
++  if (cCutter::Active())
++     Add(new cOsdItem(tr(" Cancel editing"), osCancelEdit));
++  }
++
+   // Basic menu items:
+ 
+   Add(new cOsdItem(hk(tr("Schedule")),   osSchedule));
+@@ -2493,6 +3435,7 @@
+   if (Commands.Count())
+      Add(new cOsdItem(hk(tr("Commands")),  osCommands));
+ 
++  if (!Setup.MenuCommandPos) {
+   // Replay control:
+ 
+   if (replaying)
+@@ -2519,6 +3462,7 @@
+ 
+   if (cCutter::Active())
+      Add(new cOsdItem(tr(" Cancel editing"), osCancelEdit));
++  }
+ 
+   // Color buttons:
+ 
+@@ -2629,10 +3573,16 @@
+   group = -1;
+   withInfo = !Switched || Setup.ShowInfoOnChSwitch;
+   int EpgLines = withInfo ? 5 : 1;
++  if (Setup.Symbol) EpgLines++;
+   lines = 0;
+   number = 0;
+   cChannel *channel = Channels.GetByNumber(Number);
+-  Interface->Open(Setup.OSDwidth, Setup.ChannelInfoPos ? EpgLines : -EpgLines);
++  theme = new cDisplayChannelTheme;
++  if (Setup.Theme == themeSaschaRound || Setup.Theme == themeSaschaScroll)
++     Interface->Open(cDisplayChannelTheme::Width(), Setup.ChannelInfoPos ? cDisplayChannelTheme::Height(withInfo) : -cDisplayChannelTheme::Height(withInfo), true);
++  else
++     Interface->Open(Setup.OSDwidth, Setup.ChannelInfoPos ? EpgLines : -EpgLines, true);
++  Interface->Flush();
+   if (channel) {
+      DisplayChannel(channel);
+      DisplayInfo();
+@@ -2648,18 +3598,29 @@
+   number = 0;
+   lastTime = time_ms();
+   withInfo = Setup.ShowInfoOnChSwitch;
+-  int EpgLines = withInfo ? 5 : 1;
+-  Interface->Open(Setup.OSDwidth, Setup.ChannelInfoPos ? EpgLines : -EpgLines);
++  int EpgLines = withInfo ? Setup.Symbol ? 2 : 1 : Setup.Symbol ? 2 : 1;
++  theme = new cDisplayChannelTheme;
++  if (Setup.Theme == themeSaschaRound || Setup.Theme == themeSaschaScroll)
++     Interface->Open(cDisplayChannelTheme::Width(), Setup.ChannelInfoPos ? cDisplayChannelTheme::Height(false) : -cDisplayChannelTheme::Height(false), true);
++  else
++     Interface->Open(Setup.OSDwidth, Setup.ChannelInfoPos ? EpgLines : -EpgLines, true);
++  Interface->Flush();
+   ProcessKey(FirstKey);
+ }
+ 
+ cDisplayChannel::~cDisplayChannel()
+ {
+   Interface->Close();
++  if (theme) delete theme;
+ }
+ 
+ void cDisplayChannel::DisplayChannel(const cChannel *Channel)
+ {
++  if (theme && (Setup.Theme == themeSaschaRound || Setup.Theme == themeSaschaScroll)) {
++     theme->DrawChannel(Channel, number);
++     Interface->SetBitmap(0, 0, *theme);
++     return;
++     }
+   int BufSize = Width() + 1;
+   char buffer[BufSize];
+   *buffer = 0;
+@@ -2667,22 +3628,75 @@
+      if (Channel->GroupSep())
+         snprintf(buffer, BufSize, "%s", Channel->Name());
+      else
++        if (Setup.Theme == themeElchi)
++        snprintf(buffer, BufSize, " %d%s  %s ", Channel->Number(), number ? "-" : "", Channel->Name());
++        else
+         snprintf(buffer, BufSize, "%d%s  %s", Channel->Number(), number ? "-" : "", Channel->Name());
+      }
+   else if (number)
++     if (Setup.Theme == themeElchi)
++     snprintf(buffer, BufSize, " %d- ", number);
++     else
+      snprintf(buffer, BufSize, "%d-", number);
+   else
+      snprintf(buffer, BufSize, "%s", tr("*** Invalid Channel ***"));
++  if (Setup.Theme == themeVanilla) {
+   Interface->Fill(0, 0, Setup.OSDwidth, 1, clrBackground);
+   Interface->Write(0, 0, buffer);
+   const char *date = DayDateTime();
+   Interface->Write(-strlen(date), 0, date);
+   cStatus::MsgOsdChannel(buffer);
++  }
++  else {
++     const char *date = DayDateTime();
++     if (Setup.Symbol && Channel) {
++        Interface->Fill(0, 1, Setup.OSDwidth, 1, clrBackground);
++        Interface->Write(0, 1, buffer, (eDvbColor)fgchannelname, clrChannelName);
++        bool isrec = cRecordControls::Active();
++        eDvbFont OldFont = Interface->SetFont(fontSym);
++        Interface->Fill(0, 0, Setup.OSDwidth, 1, clrTransparent);
++        Interface->Fill(-strlen(date), 0, Setup.OSDwidth, 1, clrBackground);
++        char symbol[3] = "";
++        snprintf(symbol, sizeof(symbol), "%c%c", FSYM_WAVE_UP1, FSYM_WAVE_UP2);
++        Interface->Write(-strlen(date), 0, symbol, clrBackground, clrTransparent);
++        if (Channel->Vpid()) {
++           snprintf(symbol, sizeof(symbol), "%c", FSYM_TELETEXT);
++           Interface->Write(-strlen(date) +  4, 1, symbol, Channel->Tpid()  ? (eDvbColor)fgsymbolon : (eDvbColor)fgsymboloff);
++           }
++        else {
++           snprintf(symbol, sizeof(symbol), "%c", FSYM_MUSIC);
++           Interface->Write(-strlen(date) +  4, 1, symbol, (eDvbColor)fgsymbolon);
++           }
++        snprintf(symbol, sizeof(symbol), "%c", FSYM_AUDIO);
++        Interface->Write(-strlen(date) +  7, 1, symbol, Channel->Apid2() ? (eDvbColor)fgsymbolon : (eDvbColor)fgsymboloff);
++        snprintf(symbol, sizeof(symbol), "%c", FSYM_DDIGITAL);
++        Interface->Write(-strlen(date) + 10, 1, symbol, Channel->Dpid1() ? (eDvbColor)fgsymbolon : (eDvbColor)fgsymboloff);
++        snprintf(symbol, sizeof(symbol), "%c", FSYM_ENCRYPTION);
++        Interface->Write(-strlen(date) + 13, 1, symbol, Channel->Ca()    ? (eDvbColor)fgsymbolon : (eDvbColor)fgsymboloff);
++        snprintf(symbol, sizeof(symbol), "%c", FSYM_RECORD);
++        Interface->Write(-strlen(date) + 16, 1, symbol, isrec ? clrWhite : (eDvbColor)fgsymboloff, isrec ? clrRed : clrBackground);
++        Interface->SetFont(OldFont);
++        }
++     else {
++        Interface->Fill(0, Setup.Symbol ? 1 : 0, Setup.OSDwidth, 1, clrBackground);
++        Interface->Write(0, Setup.Symbol ? 1 : 0, buffer, (eDvbColor)fgchannelname, clrChannelName);  
++        }
++     eDvbFont OldFont = Interface->SetFont(fontSml);
++     Interface->Write(-strlen(date) + 5, 0, date, (eDvbColor)fgchanneldate, clrChannelName);  
++     Interface->SetFont(OldFont);
++     cStatus::MsgOsdChannel(buffer + 1);
++  }
+ }
+ 
+ void cDisplayChannel::DisplayInfo(void)
+ {
+   if (withInfo) {
++     if (theme && (Setup.Theme == themeSaschaRound || Setup.Theme == themeSaschaScroll)) {
++        if (theme->DrawInfo())
++           lastTime = time_ms();
++        Interface->SetBitmap(0, 0, *theme);
++        return;
++        }
+      const cEventInfo *Present = NULL, *Following = NULL;
+      cMutexLock MutexLock;
+      const cSchedules *Schedules = cSIProcessor::Schedules(MutexLock);
+@@ -2708,25 +3722,56 @@
+                  Lines++;
+               }
+            if (Lines > lines) {
+-              const int t = 6;
+-              int l = 1;
+-              Interface->Fill(0, 1, Setup.OSDwidth, Lines, clrBackground);
++              const int t = 7;
++              int l = 0;
++              if (Setup.Symbol) l++;
++              Interface->Fill(0, l + 1, Setup.OSDwidth, Lines, clrBackground);
++              if (Setup.Theme != themeVanilla) Interface->Fill(0, l + 1, 6, 4, clrEpgTime);
+               if (!isempty(PresentTitle)) {
+-                 Interface->Write(0, l, Present->GetTimeString(), clrYellow, clrBackground);
+-                 Interface->Write(t, l, PresentTitle, clrCyan, clrBackground);
+-                 l++;
++                 Interface->Write(0, l + 1, Present->GetTimeString(), Setup.Theme == themeVanilla ? clrYellow : (eDvbColor)fgepgtime, Setup.Theme == themeVanilla ? clrBackground : clrEpgTime);
++                 Interface->Write(t, l + 1, PresentTitle, Setup.Theme == themeVanilla ? clrCyan : (eDvbColor)fgtitle, clrBackground);
+                  }
+               if (!isempty(PresentSubtitle)) {
+-                 Interface->Write(t, l, PresentSubtitle, clrCyan, clrBackground);
+-                 l++;
++                 eDvbFont OldFont = Interface->SetFont(fontSml);
++                 Interface->Write(t, l + 2, PresentSubtitle, Setup.Theme == themeVanilla ? clrCyan : (eDvbColor)fgsubtitle, clrBackground);
++                 Interface->SetFont(OldFont);
+                  }
+               if (!isempty(FollowingTitle)) {
+-                 Interface->Write(0, l, Following->GetTimeString(), clrYellow, clrBackground);
+-                 Interface->Write(t, l, FollowingTitle, clrCyan, clrBackground);
+-                 l++;
++                 Interface->Write(0, l + 3, Following->GetTimeString(), Setup.Theme == themeVanilla ? clrYellow : (eDvbColor)fgepgtime, Setup.Theme == themeVanilla ? clrBackground : clrEpgTime);
++                 Interface->Write(t, l + 3, FollowingTitle, Setup.Theme == themeVanilla ? clrCyan : (eDvbColor)fgtitle, clrBackground);
+                  }
+               if (!isempty(FollowingSubtitle)) {
+-                 Interface->Write(t, l, FollowingSubtitle, clrCyan, clrBackground);
++                 eDvbFont OldFont = Interface->SetFont(fontSml);
++                 Interface->Write(t, l + 4, FollowingSubtitle, Setup.Theme == themeVanilla ? clrCyan : (eDvbColor)fgsubtitle, clrBackground);
++                 Interface->SetFont(OldFont);
++                 }
++              if (Setup.TimeBar) {
++                 if (Present) {
++                    cBitmap *timeBar;
++                    int height = 108;
++                    int width = 10;
++                    float percent = 0;
++                    timeBar = NULL;
++                    timeBar = new cBitmap(width, height, 4);
++                    if (Present->GetDuration() != 0) {
++                       percent =  (float)(time(NULL) - Present->GetTime()) / (float)(Present->GetDuration());
++                       }
++                    if (percent < 0) percent = 0;
++                    if (percent > 1.0) percent = 1.0;
++                    // Draw the bar
++                    for (int x = 1; x < width - 1; x++) {
++                        for (int y = height - 1; y > 0; y--) {
++                            if ( y > (int)(percent*(float)height)) {
++                               timeBar->SetPixel(x, y, (eDvbColor)timebar1);
++                               } else {
++                               timeBar->SetPixel(x, y, (eDvbColor)timebar2);
++                               }
++                            }
++                        }
++                    Interface->SetBitmap(65, Setup.Symbol ? 54 : 27, *timeBar);
++                    if (timeBar)
++                       delete timeBar;
++                    }
+                  }
+               Interface->Flush();
+               lines = Lines;
+@@ -2741,7 +3786,9 @@
+ void cDisplayChannel::Refresh(void)
+ {
+   Interface->Clear();
++  if (theme && (Setup.Theme == themeSaschaRound || Setup.Theme == themeSaschaScroll)) theme->Reset();
+   DisplayChannel(Channels.GetByNumber(cDevice::CurrentChannel()));
++  if (Setup.Theme == themeSaschaRound || Setup.Theme == themeSaschaScroll) return;
+   lastTime = time_ms();
+   lines = 0;
+ }
+@@ -2866,13 +3913,45 @@
+   };
+ 
+ cVolumeBar::cVolumeBar(int Width, int Height, int Current, int Total, const char *Prompt)
+-:cBitmap(Width, Height, 2)
++:cBitmap(Width, Height, (Setup.Theme == themeSaschaRound || Setup.Theme == themeSaschaScroll) ? 3 : 2)
+ {
++  if (Setup.Theme == themeVanilla) {
+   int l = Prompt ? cBitmap::Width(Prompt) : 0;
+   int p = (Width - l) * Current / Total;
+   Text(0, 0, Prompt, clrGreen);
+   Fill(l, 0, p, Height - 1, clrGreen);
+   Fill(l + p, 0, Width - 1, Height - 1, clrWhite);
++  }
++  else if (Setup.Theme == themeElchi) {
++     int l = Prompt ? cBitmap::Width(Prompt) : 0;
++     int p = (Width - l) * Current / Total;
++     Text(0, 0, Prompt, (eDvbColor)volumebar, clrTransparent);
++     Fill(l, 0, p, Height - 1, (eDvbColor)volumebar);
++     Fill(l + p, 0, Width - 1, Height - 1, clrTransparent);
++     }
++  else {
++     char symbol[3] = "";
++     int p = (Width - 56) * Current / Total;
++     // XXX: no way to tell char width in cBitmap-Font 
++     eDvbFont oldFont = SetFont(fontSym);
++     // clear area
++     Fill(0, 0, Width - 1, Height - 1, clrTransparent);
++     // volume bar w/ borders
++     Fill(14, Height - 27, Width - 1, Height - 1, clrBackground);
++     snprintf(symbol, sizeof(symbol), "%c", FSYM_ROUND_RIGHT);
++     Text(14, Height - 27, symbol, clrBackground, clrTransparent);
++     snprintf(symbol, sizeof(symbol), "%c", FSYM_ROUND_LEFT);
++     Text(Width - 14, Height - 27, symbol, clrBackground, clrTransparent);
++     Fill(28 + 2, Height - 23, 28 + p + 2, Height - 4, clrBlack);
++     Fill(28, Height - 24, 28 + p, Height - 5, (eDvbColor)volumebar);
++     // text area
++     SetFont(fontSml);
++     int pw = cBitmap::Width(Prompt);
++     Fill(1, 14, pw + 6, Height - 18, clrBlack);
++     Fill(0, 12, pw + 4, Height - 20, clrWhite);
++     Text(4, 12, Prompt, (eDvbColor)volumebar, clrWhite);
++     SetFont(oldFont);
++     }
+ }
+ 
+ // --- cDisplayVolume --------------------------------------------------------
+@@ -2887,7 +3966,7 @@
+ {
+   displayVolume = this;
+   timeout = time_ms() + (cDevice::PrimaryDevice()->IsMute() ? MUTETIMEOUT : VOLUMETIMEOUT);
+-  Interface->Open(Setup.OSDwidth, -1);
++  Interface->Open(Setup.OSDwidth, (Setup.Theme == themeSaschaRound || Setup.Theme == themeSaschaScroll) ? -2 : -1);
+   Show();
+ }
+ 
+@@ -2902,7 +3981,10 @@
+   cDevice *device = cDevice::PrimaryDevice();
+   if (device->IsMute()) {
+      Interface->Fill(0, 0, Width(), 1, clrTransparent);
++     if (Setup.Theme == themeVanilla)
+      Interface->Write(0, 0, tr("Mute"), clrGreen);
++     else
++     Interface->Write(0, 0, tr("Mute"), clrWhite, clrRed);
+      }
+   else {
+      int Current = cDevice::CurrentVolume();
+@@ -2915,8 +3997,14 @@
+      Interface->Fill(l, 0, p, 1, clrGreen);
+      Interface->Fill(l + p, 0, Width() - l - p, 1, clrWhite);
+ #else
++     if (Setup.Theme == themeSaschaRound || Setup.Theme == themeSaschaScroll) {
++        cVolumeBar VolumeBar2(Width() * cOsd::CellWidth(), 2 * cOsd::LineHeight(), Current, Total, Prompt);
++        Interface->SetBitmap(0, 0, VolumeBar2);
++        }
++     else {
+      cVolumeBar VolumeBar(Width() * cOsd::CellWidth(), cOsd::LineHeight(), Current, Total, Prompt);
+      Interface->SetBitmap(0, 0, VolumeBar);
++     }
+ #endif
+      }
+ }
+@@ -3166,7 +4254,7 @@
+ bool cRecordControls::PauseLiveVideo(void)
+ {
+   Interface->Open(Setup.OSDwidth, -1);
+-  Interface->Status(tr("Pausing live video..."));
++  Interface->Status(tr("Pausing live video..."), Setup.Theme == themeVanilla ? clrBlack : (eDvbColor)fginfofont, Setup.Theme == themeVanilla ? clrCyan : clrInfoLine);
+   Interface->Flush();
+   cReplayControl::SetRecording(NULL, NULL); // make sure the new cRecordControl will set cReplayControl::LastReplayed()
+   if (Start(NULL, true)) {
+@@ -3232,15 +4320,6 @@
+ 
+ // --- cProgressBar ----------------------------------------------------------
+ 
+-class cProgressBar : public cBitmap {
+-protected:
+-  int total;
+-  int Pos(int p) { return p * width / total; }
+-  void Mark(int x, bool Start, bool Current);
+-public:
+-  cProgressBar(int Width, int Height, int Current, int Total, const cMarks &Marks);
+-  };
+-
+ cProgressBar::cProgressBar(int Width, int Height, int Current, int Total, const cMarks &Marks)
+ :cBitmap(Width, Height, 2)
+ {
+@@ -3286,6 +4365,7 @@
+   lastCurrent = lastTotal = -1;
+   timeoutShow = 0;
+   timeSearchActive = false;
++  theme = new cReplayControlTheme;
+   marks.Load(fileName);
+   cRecording Recording(fileName);
+   cStatus::MsgReplaying(this, Recording.Name());
+@@ -3296,6 +4376,7 @@
+   Hide();
+   cStatus::MsgReplaying(this, NULL);
+   Stop();
++  delete theme;
+ }
+ 
+ void cReplayControl::SetRecording(const char *FileName, const char *Title)
+@@ -3357,6 +4438,9 @@
+      Interface->Fill(12, 2, Width() - 22, 1, clrBackground);
+ }
+ 
++int ffwdSymbols[] = { FSYM_FFWD, FSYM_FFWD1, FSYM_FFWD2, FSYM_FFWD3 };
++int rewSymbols[]  = { FSYM_REW,  FSYM_REW1,  FSYM_REW2,  FSYM_REW3  };
++
+ void cReplayControl::ShowMode(void)
+ {
+   if (Setup.ShowReplayMode && !timeSearchActive) {
+@@ -3373,12 +4457,16 @@
+            Interface->Open(9, -1);
+            Interface->Clear();
+            XXX*/
++           if (Setup.Theme == themeSaschaRound || Setup.Theme == themeSaschaScroll)
++              Interface->Open(Setup.OSDwidth, -4); //XXX remove when displaying replay mode differently
++		   else
+            Interface->Open(0, -1); //XXX remove when displaying replay mode differently
+            visible = modeOnly = true;
+            }
+ 
+         if (modeOnly && !timeoutShow && NormalPlay)
+            timeoutShow = time(NULL) + MODETIMEOUT;
++        if (Setup.Theme == themeVanilla) {
+         const char *Mode;
+         if (Speed == -1) Mode = Play    ? "  >  " : " ||  ";
+         else if (Play)   Mode = Forward ? " X>> " : " <<X ";
+@@ -3392,8 +4480,48 @@
+         eDvbFont OldFont = Interface->SetFont(fontFix);
+         DisplayAtBottom(buf);
+         Interface->SetFont(OldFont);
++        } 
++        else if (Setup.Theme == themeElchi) {
++           char buf[16];
++           int i=0;
++           if (!(Width() & 1)) buf[i++] = ' ';
++           buf[i] = FSYM_EMPTY; if (Speed >= 0 && !Forward) buf[i] = rewSymbols[Speed];
++           i++;
++           buf[i++] = Play ? (Speed == -1 ? FSYM_PLAY : FSYM_EMPTY) : FSYM_PAUSE;
++           buf[i] = FSYM_EMPTY; if (Speed>=0 && Forward) buf[i] = ffwdSymbols[Speed];
++           i++;
++           if (!(Width() & 1)) buf[i++] = ' ';
++           buf[i] = 0;
++
++           eDvbFont OldFont = Interface->SetFont(fontSym);
++           DisplayAtBottom(buf);
++           Interface->SetFont(OldFont);
++           }
++         else if (theme && ((Setup.Theme == themeSaschaScroll) || (Setup.Theme == themeSaschaRound))) {
++           int mode;
++           if (Speed == -1)
++              mode = Play ? MODE_PLAY : MODE_PAUSE;
++           else if (Play)
++              mode = Forward ? MODE_FFWD : MODE_REW;
++           else if (!Play)
++              mode = Forward ? MODE_SFWD : MODE_SREW;
++           if (Speed > 0 && (mode == MODE_FFWD || mode == MODE_REW || mode == MODE_SFWD || mode == MODE_SREW)) {
++              switch (mode) {
++                 case MODE_FFWD: mode = MODE_FFWD1; break;
++                 case MODE_REW:  mode = MODE_REW1;  break;
++                 case MODE_SFWD: mode = MODE_SFWD1; break;
++                 case MODE_SREW: mode = MODE_SREW1; break;
++                 }
++              mode += Speed - 1;
++              }
++           theme->DrawMode(mode, modeOnly);
++           }
+         }
+      }
++#ifndef DEBUG_OSD
++  if ((Setup.Theme == themeSaschaRound || Setup.Theme == themeSaschaScroll) && !timeSearchActive)
++     Interface->SetBitmap(0, Setup.ShowReplayMode ? 0 : cOsd::LineHeight(), *theme);
++#endif
+ }
+ 
+ bool cReplayControl::ShowProgress(bool Initial)
+@@ -3402,16 +4530,19 @@
+ 
+   if (GetIndex(Current, Total) && Total > 0) {
+      if (!visible) {
+-        Interface->Open(Setup.OSDwidth, -3);
++        Interface->Open(Setup.OSDwidth, (Setup.Theme == themeSaschaRound || Setup.Theme == themeSaschaScroll) ? -4 : -3);
+         needsFastResponse = visible = true;
+         }
+      if (Initial) {
++        if ((Setup.Theme == themeVanilla) || (Setup.Theme == themeElchi)) {
+         Interface->Clear();
+         if (title)
+            Interface->Write(0, 0, title);
++        }
+         lastCurrent = lastTotal = -1;
+         }
+      if (Total != lastTotal) {
++        if ((Setup.Theme == themeVanilla) || (Setup.Theme == themeElchi))
+         Interface->Write(-7, 2, IndexToHMSF(Total));
+         if (!Initial)
+            Interface->Flush();
+@@ -3422,11 +4553,16 @@
+         Interface->Fill(0, 1, p, 1, clrGreen);
+         Interface->Fill(p, 1, Width() - p, 1, clrWhite);
+ #else
++        if (theme && (Setup.Theme == themeSaschaRound || Setup.Theme == themeSaschaScroll))
++           theme->DrawProgress(Current, Total, displayFrames, marks, title);
++        else {
+         cProgressBar ProgressBar(Width() * cOsd::CellWidth(), cOsd::LineHeight(), Current, Total, marks);
+         Interface->SetBitmap(0, cOsd::LineHeight(), ProgressBar);
+         if (!Initial)
+            Interface->Flush();
++        }
+ #endif
++        if ((Setup.Theme == themeVanilla) || (Setup.Theme == themeElchi))
+         Interface->Write(0, 2, IndexToHMSF(Current, displayFrames));
+         Interface->Flush();
+         lastCurrent = Current;
+@@ -3695,7 +4831,8 @@
+     }
+   if (DoShowMode)
+      ShowMode();
+-  if (DisplayedFrames && !displayFrames)
++  if (DisplayedFrames && !displayFrames &&
++      (Setup.Theme == themeVanilla || Setup.Theme == themeElchi))
+      Interface->Fill(0, 2, 11, 1, clrBackground);
+   return osContinue;
+ }
+diff -Nur vdr.orig/menu.h vdr/menu.h
+--- vdr.orig/menu.h	2004-07-17 17:27:25.000000000 +0200
++++ vdr/menu.h	2004-08-01 13:40:47.000000000 +0200
+@@ -16,6 +16,7 @@
+ #include "dvbplayer.h"
+ #include "recorder.h"
+ #include "recording.h"
++#include "theme.h"
+ 
+ class cMenuMain : public cOsdMenu {
+ private:
+@@ -29,10 +30,22 @@
+   static cOsdObject *PluginOsdObject(void);
+   };
+ 
++class cDisplayChannelTheme;
++
++class cProgressBar : public cBitmap {
++protected:
++  int total;
++  int Pos(int p) { return p * width / total; }
++  void Mark(int x, bool Start, bool Current);
++public:
++  cProgressBar(int Width, int Height, int Current, int Total, const cMarks &Marks);
++  };
++
+ class cDisplayChannel : public cOsdObject {
+ private:
+   int group;
+   bool withInfo;
++  cDisplayChannelTheme *theme;
+   int lines;
+   int lastTime;
+   int number;
+@@ -102,6 +115,7 @@
+   eOSState Delete(void);
+   eOSState Summary(void);
+   eOSState Commands(eKeys Key = kNone);
++  eOSState Rename(void);
+ public:
+   cMenuRecordings(const char *Base = NULL, int Level = 0, bool OpenSubMenus = false);
+   ~cMenuRecordings();
+@@ -145,9 +159,12 @@
+   static void Shutdown(void);
+   };
+ 
++class cReplayControlTheme;
++
+ class cReplayControl : public cDvbPlayerControl {
+ private:
+   cMarks marks;
++  cReplayControlTheme *theme;
+   bool visible, modeOnly, shown, displayFrames;
+   int lastCurrent, lastTotal;
+   time_t timeoutShow;
+diff -Nur vdr.orig/menuitems.c vdr/menuitems.c
+--- vdr.orig/menuitems.c	2004-07-17 17:27:25.000000000 +0200
++++ vdr/menuitems.c	2004-08-01 13:40:47.000000000 +0200
+@@ -12,6 +12,9 @@
+ #include "i18n.h"
+ #include "plugin.h"
+ #include "status.h"
++#include "theme.h"
++
++#define SHIFTTIMEOUT 2
+ 
+ const char *FileNameChars = " abcdefghijklmnopqrstuvwxyz0123456789-.#~";
+ 
+@@ -224,6 +227,9 @@
+   pos = -1;
+   insert = uppercase = false;
+   newchar = true;
++  ieCurChr = 0;
++  lastKey = kNone;
++  lastActivity = time(NULL);
+   Set();
+ }
+ 
+@@ -301,12 +307,24 @@
+ 
+ eOSState cMenuEditStrItem::ProcessKey(eKeys Key)
+ {
++  const char c1[] = "-.#~,/_@1";
++  const char c2[] = "abcäåá2";
++  const char c3[] = "defé3";
++  const char c4[] = "ghi4";
++  const char c5[] = "jkl5";
++  const char c6[] = "mnoöñó6";
++  const char c7[] = "pqrs7";
++  const char c8[] = "tuvüú8";
++  const char c9[] = "wxyz9";
++  const char c0[] = " 0";
++
+   switch (Key) {
+     case kRed:   // Switch between upper- and lowercase characters
+                  if (pos >= 0 && (!insert || !newchar)) {
+                     uppercase = !uppercase;
+                     value[pos] = uppercase ? toupper(value[pos]) : tolower(value[pos]);
+                     }
++                 lastKey = Key;
+                  break;
+     case kGreen: // Toggle insert/overwrite modes
+                  if (pos >= 0) {
+@@ -314,6 +332,7 @@
+                     newchar = true;
+                     }
+                  SetHelpKeys();
++                 lastKey = Key;
+                  break;
+     case kYellow|k_Repeat:
+     case kYellow: // Remove the character at current position; in insert mode it is the character to the right of cursor
+@@ -331,6 +350,7 @@
+                        uppercase = isupper(value[pos]);
+                     newchar = true;
+                     }
++                 lastKey = Key;
+                  break;
+     case kLeft|k_Repeat:
+     case kLeft:  if (pos > 0) {
+@@ -340,6 +360,7 @@
+                     }
+                  if (!insert && isalpha(value[pos]))
+                     uppercase = isupper(value[pos]);
++                 lastKey = Key;
+                  break;
+     case kRight|k_Repeat:
+     case kRight: if (pos < length - 2 && pos < int(strlen(value)) ) {
+@@ -357,6 +378,7 @@
+                     uppercase = isupper(value[pos]);
+                  if (pos == 0)
+                     SetHelpKeys();
++                 lastKey = Key;
+                  break;
+     case kUp|k_Repeat:
+     case kUp:
+@@ -377,9 +399,151 @@
+                     }
+                  else
+                     return cMenuEditItem::ProcessKey(Key);
++                 lastKey = Key;
++                 break;
++    case k0|k_Repeat ... k9|k_Repeat:
++    case k0 ... k9: if ((Key != lastKey) || ((Key == lastKey) && (time(NULL) - lastActivity > SHIFTTIMEOUT)) ) {
++                    ieCurChr = 0;
++                    if (!newchar) {
++                       // kRight
++                       if (pos < length - 2 && pos < int(strlen(value)) ) {
++                          if (++pos >= int(strlen(value))) {
++                             if (pos >= 2 && value[pos - 1] == ' ' && value[pos - 2] == ' ')
++                                pos--; // allow only two blanks at the end
++                             else {
++                                value[pos] = ' ';
++                                value[pos + 1] = 0;
++                                }
++                             }
++                          }
++                       newchar = true;
++                       if (!insert && isalpha(value[pos]))
++                          uppercase = isupper(value[pos]);
++                       }
++                    }
++                 // kUp/kDown
++                 if (pos >= 0) {
++                    if (insert && newchar) {
++                       // create a new character in insert mode
++                       if (int(strlen(value)) < length - 1) {
++                          memmove(value + pos + 1, value + pos, strlen(value) - pos + 1);
++                          value[pos] = ' ';
++                          }
++                       }
++                    }
++                 else
++                    return cMenuEditItem::ProcessKey(Key);
++                 switch (Key) {
++                    case k1:
++                         if (uppercase)
++                            value[pos] = toupper(c1[ieCurChr]);
++                         else
++                            value[pos] =         c1[ieCurChr];
++                         if (c1[ieCurChr+1] == 0)
++                            ieCurChr = 0;
++                         else
++                            ieCurChr++;
++                         break;
++                    case k2:
++                         if (uppercase)
++                            value[pos] = toupper(c2[ieCurChr]);
++                         else
++                            value[pos] =         c2[ieCurChr];
++                         if (c2[ieCurChr+1] == 0)
++                            ieCurChr = 0;
++                         else
++                            ieCurChr++;
++                         break;
++                    case k3:
++                         if (uppercase)
++                            value[pos] = toupper(c3[ieCurChr]);
++                         else
++                            value[pos] =         c3[ieCurChr];
++                         if (c3[ieCurChr+1] == 0)
++                            ieCurChr = 0;
++                         else
++                            ieCurChr++;
++                         break;
++                    case k4:
++                         if (uppercase)
++                            value[pos] = toupper(c4[ieCurChr]);
++                         else
++                            value[pos] =         c4[ieCurChr];
++                         if (c4[ieCurChr+1] == 0)
++                            ieCurChr = 0;
++                         else
++                            ieCurChr++;
++                         break;
++                    case k5:
++                         if (uppercase)
++                            value[pos] = toupper(c5[ieCurChr]);
++                         else
++                            value[pos] =         c5[ieCurChr];
++                         if (c5[ieCurChr+1] == 0)
++                            ieCurChr = 0;
++                         else
++                            ieCurChr++;
++                         break;
++                    case k6:
++                         if (uppercase)
++                            value[pos] = toupper(c6[ieCurChr]);
++                         else
++                            value[pos] =         c6[ieCurChr];
++                         if (c6[ieCurChr+1] == 0)
++                            ieCurChr = 0;
++                         else
++                            ieCurChr++;
++                         break;
++                    case k7:
++                         if (uppercase)
++                            value[pos] = toupper(c7[ieCurChr]);
++                         else
++                            value[pos] =         c7[ieCurChr];
++                         if (c7[ieCurChr+1] == 0)
++                            ieCurChr = 0;
++                         else
++                            ieCurChr++;
++                         break;
++                    case k8:
++                         if (uppercase)
++                            value[pos] = toupper(c8[ieCurChr]);
++                         else
++                            value[pos] =         c8[ieCurChr];
++                         if (c8[ieCurChr+1] == 0)
++                            ieCurChr = 0;
++                         else
++                            ieCurChr++;
++                         break;
++                    case k9:
++                         if (uppercase)
++                            value[pos] = toupper(c9[ieCurChr]);
++                         else
++                            value[pos] =         c9[ieCurChr];
++                         if (c9[ieCurChr+1] == 0)
++                            ieCurChr = 0;
++                         else
++                            ieCurChr++;
++                         break;
++                    case k0:
++                         if (uppercase)
++                            value[pos] = toupper(c0[ieCurChr]);
++                         else
++                            value[pos] =         c0[ieCurChr];
++                         if (c0[ieCurChr+1] == 0)
++                            ieCurChr = 0;
++                         else
++                            ieCurChr++;
++                         break;
++                    default:
++                         break;
++                    }
++                 lastKey = Key;
++                 newchar = false;
++                 lastActivity = time(NULL);
+                  break;
+     case kOk:    if (pos >= 0) {
+                     pos = -1;
++                    lastKey = Key;
+                     newchar = true;
+                     stripspace(value);
+                     SetHelpKeys();
+@@ -447,9 +611,9 @@
+ 
+ cMenuTextItem::cMenuTextItem(const char *Text, int X, int Y, int W, int H, eDvbColor FgColor, eDvbColor BgColor, eDvbFont Font)
+ {
+-  x = X;
++  x = ((Setup.Theme == themeSaschaScroll) || (Setup.Theme == themeSaschaRound)) ? X + 1 : X;
+   y = Y;
+-  w = W;
++  w = ((Setup.Theme == themeSaschaScroll) || (Setup.Theme == themeSaschaRound)) ? W - 2 : W;
+   h = H;
+   fgColor = FgColor;
+   bgColor = BgColor;
+diff -Nur vdr.orig/menuitems.h vdr/menuitems.h
+--- vdr.orig/menuitems.h	2004-07-17 17:27:25.000000000 +0200
++++ vdr/menuitems.h	2004-08-01 13:40:47.000000000 +0200
+@@ -75,6 +75,9 @@
+   void SetHelpKeys(void);
+   virtual void Set(void);
+   char Inc(char c, bool Up);
++  int ieCurChr;  
++  eKeys lastKey;
++  time_t lastActivity;
+ public:
+   cMenuEditStrItem(const char *Name, char *Value, int Length, const char *Allowed);
+   ~cMenuEditStrItem();
+diff -Nur vdr.orig/osdbase.c vdr/osdbase.c
+--- vdr.orig/osdbase.c	2004-07-17 17:27:25.000000000 +0200
++++ vdr/osdbase.c	2004-08-01 13:40:47.000000000 +0200
+@@ -14,6 +14,75 @@
+ #include <sys/stat.h>
+ #include <sys/unistd.h>
+ #include "tools.h"
++#include "config.h"
++
++#define ABORT        { fclose(InFile); return false; }
++
++int bgbackground     = 0x88000000;
++int bgchannelname    = bgbackground;
++int bgchanneldate    = bgbackground;
++int bgepgtime        = bgbackground;
++int bgepgdata        = bgbackground;
++int bgtitleline      = 0xFFFFFF00;
++int bgscrolline      = 0xFFFFFF00;
++int bghelpred        = 0xFF1111CC;
++int bghelpgreen      = 0xFF22CC22;
++int bghelpyellow     = 0xFF22BBCC;
++int bghelpblue       = 0xFFCC0000;
++int bgerrorline      = 0xFF1111CC;
++int bginfoline       = 0xFF22CC22;
++int bgconfirmline    = 0xFF22BBCC;
++int fgchannelname    = 0xFFDDDDDD;
++int fgchanneldate    = 0xFFDDDDDD;
++int fgepgtime        = 0xFF22BBCC;
++int fgtitle          = 0xFFFCFC00;
++int fgsubtitle       = 0xFFFCFC00;
++int volumebar        = 0xFF22CC22;
++int timebar1         = 0xFF000000;
++int timebar2         = 0xFF5F5F5F;
++int fgtitleline      = 0xFF000000;
++int fgscrolline      = fgtitleline;
++int fgmenufont       = 0xFFDDDDDD;
++int fgsymbolon       = 0xFF22BBCC;
++int fgsymboloff      = timebar2;
++int fgerrorfont      = 0xFFDDDDDD;
++int fginfofont       = 0xFF000000;
++int fgconfirmfont    = 0xFF000000;
++
++eDvbColor LookupColor(int index)
++{
++  eDvbColor colortable[23] =
++  {
++    clrBlack,
++    clrWhite,
++    clrRed,
++    clrGreen,
++    clrYellow,
++    clrMagenta,
++    clrBlue,
++    clrCyan,
++    clrGrey,
++    clrTransparent,
++    (eDvbColor)Setup.BgClrBackground,
++    (eDvbColor)Setup.BgClrChannelName,
++    (eDvbColor)Setup.BgClrChannelDate,
++    (eDvbColor)Setup.BgClrEpgTime,
++    (eDvbColor)Setup.BgClrTitleLine,
++    (eDvbColor)Setup.BgClrScrolLine,
++    (eDvbColor)Setup.BgClrHelpRed,
++    (eDvbColor)Setup.BgClrHelpGreen,
++    (eDvbColor)Setup.BgClrHelpYellow,
++    (eDvbColor)Setup.BgClrHelpBlue,
++    (eDvbColor)Setup.BgClrErrorLine,
++    (eDvbColor)Setup.BgClrInfoLine,
++    (eDvbColor)Setup.BgClrConfirmLine
++  };
++
++  if ((index >= 0) && (index < 23))
++     return colortable[index];
++  else
++     return colortable[0];
++}
+ 
+ // --- cPalette --------------------------------------------------------------
+ 
+@@ -274,6 +343,170 @@
+   return &bitmap[y * width + x];
+ }
+ 
++#define XPM_EXT ".xpm"
++
++bool cBitmap::LoadXpm(const char *FileName, eDvbColor NoneColor)
++{
++  bool bRet = false;
++  FILE *infile;
++  char *logofileS;
++
++  logofileS = MALLOC(char, strlen(ConfigDirectory) + 7 + strlen(FileName) + strlen(XPM_EXT) + 1);
++  char *ptr = logofileS;
++  ptr = stpcpy(ptr, ConfigDirectory);
++  ptr = stpcpy(ptr, "/logos/");
++  ptr = stpcpy(ptr, FileName);
++  ptr = stpcpy(ptr, XPM_EXT);
++
++  infile = fopen(logofileS, "r");
++  if (infile) {
++     bool ok = true;
++     char buf[512];
++     char *ptr;
++     int state = 0;
++     int width, height, colors, colwidth, cnt = 0;
++     int temp;
++     uint pal[65536];
++
++     while (ok && fgets(buf, sizeof(buf), infile) != NULL) {
++       int len = strlen(buf);
++       ptr = buf;
++       if (ptr[len - 1] == '\n')
++          ptr[--len] = '\0';
++
++       if (state > 0 && strncmp(ptr, "/*", 2) == 0) {
++          continue;
++          }
++
++       switch (state) {
++         case 0:
++              if (strcmp(ptr, "/* XPM */") != 0) {
++                 esyslog("ERROR: loading xpm %s failed: invalid header", FileName);
++                 ok = false;
++                 break;
++                 }
++              ++state;
++              break;
++         case 1:
++              ++state;
++              break;
++         case 2:
++              sscanf(ptr, "\"%d %d %d %d\",", &width, &height, &colors, &colwidth);
++              if (colwidth > 2) {
++                 esyslog("ERROR: wrong colorwidth in xpm %s", FileName);
++                 ok = false;
++                 break;
++                 }
++              cnt = 0;
++              ++state;
++              break;
++         case 3:
++              ++ptr;
++              temp = 0;
++              for (int i = 0; i < colwidth; ++i) {
++                  temp <<= 8;
++                  temp += (int)*ptr;
++                  ++ptr;
++                  }
++              ++ptr;
++              if (strncmp(ptr, "c ", 2) != 0) {
++                 esyslog("ERROR: wrong character in xpm %s", FileName);
++                 ok = false;
++                 break;
++                 }
++              ptr += 2;
++              if (*ptr == '#') {
++                 int col = strtoul(++ptr, NULL, 16);
++                 pal[temp] = 0xff000000 | ((col & 0xff) << 16) | (col & 0xff00) | ((col & 0xff0000) >> 16);
++                 }
++              else {
++                 pal[temp] = NoneColor;
++                 }
++              if (++cnt == colors) {
++                 cnt = 0;
++                 ++state;
++                 }
++              break;
++         case 4:
++              ++ptr;
++              for (int p = 0; p < width; ++p) {
++                  temp = 0;
++                  for (int i = 0; i < colwidth; ++i) {
++                      temp <<= 8;
++                      temp += (int)*ptr;
++                      ++ptr;
++                      }
++                  SetPixel(p, cnt, (eDvbColor)pal[temp]);
++                  }
++              if (++cnt == height) {
++                 ++state;
++                 bRet = true;
++                 }
++              break;
++         default:
++              break;
++         }
++       }
++     fclose(infile);
++     }
++  free(logofileS);
++  return bRet;
++}
++
++#define LOGOFILE_EXT ".logo"
++
++bool cBitmap::LoadLogo(const char *FileName)
++{
++  bool bRet = false;
++  FILE *InFile;
++  char *logofileS;
++
++  logofileS = MALLOC(char, strlen(ConfigDirectory) + 7 + strlen(FileName) + strlen(LOGOFILE_EXT) + 1);
++  strcpy(logofileS, ConfigDirectory);
++  strcat(logofileS, "/logos/");
++  strcat(logofileS, FileName);
++  strcat(logofileS, LOGOFILE_EXT);
++
++  InFile = fopen(logofileS, "rb");
++  if (InFile) {
++     char *pBitmap = (char*)malloc(height * width);
++     if (pBitmap) {
++        if (fread(pBitmap, height * width, 1, InFile) != 1) {
++           free(pBitmap);
++           ABORT;
++           }
++        free(bitmap);
++        bitmap = MALLOC(char, height * width);
++        for (int y = 0; y < height; ++y)
++            for (int x = 0; x < width; ++x) {
++                eDvbColor col;
++                switch (pBitmap[y * width + x]) {
++                   case '0': col = clrTransparent; break;
++                   case '1': col = clrBlack;       break;
++                   case '2': col = clrWhite;       break;
++                   case '3': col = clrRed;         break;
++                   case '4': col = clrMagenta;     break;
++                   case '5': col = clrGreen;       break;
++                   case '6': col = clrBlue;        break;
++                   case '7': col = clrYellow;      break;
++                   case '8': col = clrCyan;        break;
++                   case '9': col = clrGrey;        break;
++                   case '.': col = Setup.LogoColorScheme ? (eDvbColor)bgchanneldate : clrWhite; break;
++                   default:  col = clrBackground;
++                   }
++                SetPixel(x, y, col);
++                }
++        free(pBitmap);
++        bRet = true;
++        }
++     else
++       esyslog("malloc failed (cBitmap::Load).");
++     fclose(InFile);
++     }
++  free(logofileS);
++  return bRet;
++}
++
+ // --- cWindow ---------------------------------------------------------------
+ 
+ cWindow::cWindow(int Handle, int x, int y, int w, int h, int Bpp, bool ClearWithBackground, bool Tiled)
+diff -Nur vdr.orig/osdbase.h vdr/osdbase.h
+--- vdr.orig/osdbase.h	2004-07-17 17:27:25.000000000 +0200
++++ vdr/osdbase.h	2004-08-01 13:40:47.000000000 +0200
+@@ -13,7 +13,7 @@
+ #include <stdio.h>
+ #include "font.h"
+ 
+-#define MAXNUMCOLORS 16
++#define MAXNUMCOLORS 256
+ 
+ enum eDvbColor {
+ #ifdef DEBUG_OSD
+@@ -29,18 +29,44 @@
+   clrWhite,
+ #else
+   clrTransparent = 0x00000000,
+-  clrBackground  = 0x7F000000, // 50% gray
++  clrBackVanilla = 0x7F000000, // 50% gray
++  clrGrey        = 0xFF5F5F5F,
+   clrBlack       = 0xFF000000,
+-  clrRed         = 0xFF1414FC,
+-  clrGreen       = 0xFF24FC24,
+-  clrYellow      = 0xFF24C0FC,
++  clrRed         = 0xFF1111CC,
++  clrGreen       = 0xFF22CC22,
++  clrYellow      = 0xFF22BBCC,
+   clrMagenta     = 0xFFFC00B0,
+-  clrBlue        = 0xFFFC0000,
++  clrBlue        = 0xFFCC0000,
+   clrCyan        = 0xFFFCFC00,
+-  clrWhite       = 0xFFFCFCFC,
++  clrWhite       = 0xFFDDDDDD,
+ #endif
+   };
+ 
++extern int bgbackground, bgchannelname, bgchanneldate, bgepgtime, bgepgdata,
++           bgtitleline, bgscrolline, bghelpred, bghelpgreen, bghelpyellow, bghelpblue,
++           bgerrorline, bginfoline, bgconfirmline;
++
++#define clrBackground    ((eDvbColor)bgbackground)
++#define clrChannelName   ((eDvbColor)bgchannelname)
++#define clrChannelDate   ((eDvbColor)bgchanneldate)
++#define clrEpgTime       ((eDvbColor)bgepgtime)
++#define clrEpgData       ((eDvbColor)bgepgdata)
++#define clrTitleLine     ((eDvbColor)bgtitleline)
++#define clrScrolLine     ((eDvbColor)bgscrolline)
++#define clrHelpRed       ((eDvbColor)bghelpred)
++#define clrHelpGreen     ((eDvbColor)bghelpgreen)
++#define clrHelpYellow    ((eDvbColor)bghelpyellow)
++#define clrHelpBlue      ((eDvbColor)bghelpblue)
++#define clrErrorLine     ((eDvbColor)bgerrorline)
++#define clrInfoLine      ((eDvbColor)bginfoline)
++#define clrConfirmLine   ((eDvbColor)bgconfirmline)
++
++extern int fgchannelname, fgchanneldate, fgepgtime, fgtitle, fgsubtitle, fgtitleline, fgscrolline,
++           fgmenufont, volumebar, timebar1, timebar2, fgsymbolon, fgsymboloff,
++           fgerrorfont, fginfofont, fgconfirmfont;
++
++eDvbColor LookupColor(int index);
++
+ class cPalette {
+ private:
+   eDvbColor color[MAXNUMCOLORS];
+@@ -98,6 +124,8 @@
+   void Clean(void);
+   void Clear(void);
+   const char *Data(int x, int y);
++  bool LoadXpm(const char *FileName, eDvbColor NoneColor = clrTransparent);
++  bool LoadLogo(const char *FileName);
+   };
+ 
+ #define MAXNUMWINDOWS 7 // OSD windows are counted 1...7
+diff -Nur vdr.orig/osd.c vdr/osd.c
+--- vdr.orig/osd.c	2004-07-17 17:27:25.000000000 +0200
++++ vdr/osd.c	2004-08-01 13:42:59.000000000 +0200
+@@ -12,6 +12,7 @@
+ #include "device.h"
+ #include "i18n.h"
+ #include "status.h"
++#include "theme.h"
+ 
+ // --- cOsd ------------------------------------------------------------------
+ 
+@@ -20,6 +21,7 @@
+   int cOsd::colorPairs[MaxColorPairs] = { 0 };
+ #else
+   cOsdBase *cOsd::osd = NULL;
++  tWindowHandle cOsd::logowin = -1;
+ #endif
+   int cOsd::cols = 0;
+   int cOsd::rows = 0;
+@@ -71,6 +73,11 @@
+ 
+ void cOsd::Open(int w, int h)
+ {
++  Open(w, h, true);
++}
++
++void cOsd::Open(int w, int h, bool logo)
++{
+   int d = (h < 0) ? Setup.OSDheight + h : 0;
+   h = abs(h);
+   cols = w;
+@@ -91,17 +98,20 @@
+   SETCOLOR(clrMagenta,     0xB0, 0x00, 0xFC, 255);
+   SETCOLOR(clrWhite,       0xFC, 0xFC, 0xFC, 255);
+ #else
++  logowin = -1;
+   w *= charWidth;
+   h *= lineHeight;
+   d *= lineHeight;
+-  int x = (720 - w + charWidth) / 2; //TODO PAL vs. NTSC???
++  int x = ((720 - w + charWidth) / 2) + Setup.OSDxoffset; //TODO PAL vs. NTSC???
+   int y = (576 - Setup.OSDheight * lineHeight) / 2 + d;
+   //XXX
+   osd = OpenRaw(x, y);
+   //XXX TODO this should be transferred to the places where the individual windows are requested (there's too much detailed knowledge here!)
+   if (!osd)
+      return;
+-  if (h / lineHeight == 5) { //XXX channel display
++  if (((Setup.Theme == themeSaschaScroll || Setup.Theme == themeSaschaRound) && ((h / lineHeight) == cDisplayChannelTheme::Height(false) || (h / lineHeight) == cDisplayChannelTheme::Height(true))) || (h / lineHeight) == (Setup.Symbol ? 6 : 5)) { //XXX channel display
++     if ((Setup.Theme == themeSaschaScroll || Setup.Theme == themeSaschaRound) && Setup.ChannelLogo && logo)
++        logowin = osd->Create(0, 0, 64, 48, 4, false, false);
+      osd->Create(0,              0, w, h, 4);
+      }
+   else if (h / lineHeight == 1) { //XXX info display
+@@ -109,11 +119,20 @@
+      }
+   else if (d == 0) { //XXX full menu
+      osd->Create(0,                            0, w,                         lineHeight, 2);
++     if (Setup.Theme == themeSaschaScroll)
++     osd->Create(charWidth, lineHeight, w - 2 * charWidth, (Setup.OSDheight - 3) * lineHeight, 2);
++     else
+      osd->Create(0,                   lineHeight, w, (Setup.OSDheight - 3) * lineHeight, 2);
+      osd->AddColor(clrBackground);
+-     osd->AddColor(clrCyan);
+-     osd->AddColor(clrWhite);
+-     osd->AddColor(clrBlack);
++     osd->AddColor(Setup.Theme == themeVanilla ? clrCyan  : clrScrolLine);
++     osd->AddColor(Setup.Theme == themeVanilla ? clrWhite : (eDvbColor)fgmenufont);
++     osd->AddColor(Setup.Theme == themeVanilla ? clrBlack : (eDvbColor)fgscrolline);
++     if (Setup.Theme == themeSaschaScroll) {
++        osd->Create(charWidth, (Setup.OSDheight - 2) * lineHeight, w - 2 * charWidth, 1 * lineHeight, 4);
++        osd->Fill(0, 0, w - 2 * charWidth, 1 * lineHeight, clrBlack, LAST_CREATED_WINDOW); // only to clear the status line
++        osd->Create(0, (Setup.OSDheight - 1) * lineHeight, w, 1 * lineHeight, 4);
++        }
++     else
+      osd->Create(0, (Setup.OSDheight - 2) * lineHeight, w,               2 * lineHeight, 4);
+      }
+   else { //XXX progress display
+@@ -135,6 +154,7 @@
+      window = 0;
+      }
+ #else
++  logowin = -1;
+   delete osd;
+   osd = NULL;
+ #endif
+@@ -177,6 +197,26 @@
+ #endif
+ }
+ 
++void cOsd::SetLogo(int x, int y, const cBitmap &Bitmap)
++{
++#ifndef DEBUG_OSD
++  if (osd && logowin != -1) {
++     osd->Hide(logowin);
++     osd->Clear(logowin);
++     osd->SetBitmap(x, y, Bitmap, logowin);
++     osd->Show(logowin);
++     }
++#endif
++}
++
++void cOsd::HideLogo(void)
++{
++#ifndef DEBUG_OSD
++  if (osd && logowin != -1)
++     osd->Hide(logowin);
++#endif
++}
++
+ void cOsd::ClrEol(int x, int y, eDvbColor color)
+ {
+   Fill(x, y, cols - x, 1, color);
+@@ -297,8 +337,8 @@
+ void cOsdItem::Display(int Offset, eDvbColor FgColor, eDvbColor BgColor)
+ {
+   if (Offset < 0) {
+-     FgColor = clrBlack;
+-     BgColor = clrCyan;
++     FgColor = Setup.Theme == themeVanilla ? clrBlack : (eDvbColor)fgscrolline;
++     BgColor = Setup.Theme == themeVanilla ? clrCyan : clrScrolLine;
+      }
+   fresh |= Offset >= 0;
+   if (Offset >= 0)
+@@ -318,6 +358,8 @@
+ {
+   isMenu = true;
+   digit = 0;
++  key_nr = -1;
++  lastActivity = time(NULL);
+   hasHotkeys = false;
+   visible = false;
+   title = NULL;
+@@ -348,13 +390,11 @@
+ {
+   static char buffer[64];
+   if (s && hasHotkeys) {
+-     if (digit == 0 && '1' <= *s && *s <= '9' && *(s + 1) == ' ')
+-        digit = -1; // prevents automatic hotkeys - input already has them
+-     if (digit >= 0) {
+-        digit++;
+-        snprintf(buffer, sizeof(buffer), " %c %s", (digit < 10) ? '0' + digit : ' ' , s);
+-        s = buffer;
+-        }
++     if (++digit > 9)
++        snprintf(buffer, sizeof(buffer), " %2d %s", digit, s);
++     else
++        snprintf(buffer, sizeof(buffer), " %2d  %s", digit, s);
++     s = buffer;
+      }
+   return s;
+ }
+@@ -370,7 +410,7 @@
+   free(status);
+   status = s ? strdup(s) : NULL;
+   if (visible)
+-     Interface->Status(status);
++     Interface->Status(status, Setup.Theme == themeVanilla ? clrBlack : (eDvbColor)fginfofont, Setup.Theme == themeVanilla ? clrCyan : clrInfoLine);
+ }
+ 
+ void cOsdMenu::SetTitle(const char *Title, bool ShowDate)
+@@ -447,7 +487,10 @@
+      for (int i = first; i < count; i++) {
+          cOsdItem *item = Get(i);
+          if (item) {
+-            item->Display(i - first, i == current ? clrBlack : clrWhite, i == current ? clrCyan : clrBackground);
++            if (Setup.Theme == themeVanilla)
++               item->Display(i - first, i == current ? clrBlack : clrWhite, i == current ? clrCyan : clrBackground);
++            else
++               item->Display(i - first, i == current ? (eDvbColor)fgscrolline : (eDvbColor)fgmenufont, i == current ? clrScrolLine : clrBackground);
+             if (i == current)
+                cStatus::MsgOsdCurrentItem(item->Text());
+             }
+@@ -456,7 +499,7 @@
+          }
+      }
+   if (!isempty(status))
+-     Interface->Status(status);
++     Interface->Status(status, Setup.Theme == themeVanilla ? clrBlack : (eDvbColor)fginfofont, Setup.Theme == themeVanilla ? clrCyan : clrInfoLine);
+ }
+ 
+ void cOsdMenu::SetCurrent(cOsdItem *Item)
+@@ -475,7 +518,10 @@
+ {
+   cOsdItem *item = Get(current);
+   if (item) {
+-     item->Display(current - first, Current ? clrBlack : clrWhite, Current ? clrCyan : clrBackground);
++     if (Setup.Theme == themeVanilla)
++        item->Display(current - first, Current ? clrBlack : clrWhite, Current ? clrCyan : clrBackground);
++     else
++        item->Display(current - first, Current ? (eDvbColor)fgscrolline : (eDvbColor)fgmenufont, Current ? clrScrolLine : clrBackground);
+      if (Current)
+         cStatus::MsgOsdCurrentItem(item->Text());
+      }
+@@ -582,18 +628,78 @@
+      }
+ }
+ 
++#define MENUKEYTIMEOUT 1
++
+ eOSState cOsdMenu::HotKey(eKeys Key)
+ {
+-  for (cOsdItem *item = First(); item; item = Next(item)) {
++  bool match = false;
++  bool highlight = false;
++  int  item_nr;
++  int  i;
++  //static char text[5];
++
++  if (Key == kNone) {
++     //if ((key_nr == -1) && (status != NULL)) {
++     //   SetStatus(NULL);
++     //   Display();
++     //   }
++     if ((time(NULL) - lastActivity) >= MENUKEYTIMEOUT)
++        Key = kOk;
++     else
++        return osContinue;
++     }
++  else {
++     lastActivity = time(NULL);
++     //if ((Key != kOk) && (key_nr == -1)) {
++     //   snprintf(text, sizeof(text), "%1d-", (Key - k0));
++     //   SetStatus(text);
++     //   }
++     }
++
++  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);
++            //SetStatus(NULL);
++            //Display();
++            key_nr = -1;
+             break;
+             }
++         else if (Key != kOk) {
++            if (!highlight && (item_nr == (Key - k0))) {
++               highlight = true;
++               current = item->Index();
++               //Display();
++               }
++            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();
++               //Display();
++               cRemote::Put(kOk, true);
++               key_nr = -1;
++               break;
++               }
++            }
+          }
+       }
++
++  if ((!match) && (Key != kNone)) {
++     key_nr = -1;
++     //SetStatus(NULL);
++     //Display();
++     }
++
+   return osContinue;
+ }
+ 
+@@ -630,7 +736,8 @@
+         return state;
+      }
+   switch (Key) {
+-    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 -Nur vdr.orig/osd.h vdr/osd.h
+--- vdr.orig/osd.h	2004-07-17 17:27:25.000000000 +0200
++++ vdr/osd.h	2004-08-01 13:42:59.000000000 +0200
+@@ -50,6 +50,8 @@
+                 osUser8,
+                 osUser9,
+                 osUser10,
++                osUser11,
++                osUser12,
+               };
+ 
+ class cOsd {
+@@ -64,6 +66,7 @@
+   static void SetColor(eDvbColor colorFg, eDvbColor colorBg = clrBackground);
+ #else
+   static cOsdBase *osd;
++  static tWindowHandle logowin;
+ #endif
+   static int cols, rows;
+ public:
+@@ -74,10 +77,13 @@
+        // If the "normal" OSD is currently in use, NULL will be returned.
+        // The caller must delete this object before the "normal" OSD is used again!
+   static void Open(int w, int h);
++  static void Open(int w, int h, bool logo);
+   static void Close(void);
+   static void Clear(void);
+   static void Fill(int x, int y, int w, int h, eDvbColor color = clrBackground);
+   static void SetBitmap(int x, int y, const cBitmap &Bitmap);
++  static void SetLogo(int x, int y, const cBitmap &Bitmap);
++  static void HideLogo(void);
+   static void ClrEol(int x, int y, eDvbColor color = clrBackground);
+   static int CellWidth(void);
+   static int LineHeight(void);
+@@ -137,6 +143,8 @@
+   char *status;
+   int digit;
+   bool hasHotkeys;
++  int key_nr;
++  time_t lastActivity;
+ protected:
+   bool visible;
+   const char *hk(const char *s);
+diff -Nur vdr.orig/recorder.c vdr/recorder.c
+--- vdr.orig/recorder.c	2004-07-17 17:27:25.000000000 +0200
++++ vdr/recorder.c	2004-08-01 13:40:47.000000000 +0200
+@@ -14,7 +14,7 @@
+ 
+ // The size of the array used to buffer video data:
+ // (must be larger than MINVIDEODATA - see remux.h)
+-#define VIDEOBUFSIZE  MEGABYTE(5)
++#define VIDEOBUFSIZE  MEGABYTE(8)
+ 
+ // The maximum time we wait before assuming that a recorded video data stream
+ // is broken:
+diff -Nur vdr.orig/recording.c vdr/recording.c
+--- vdr.orig/recording.c	2004-07-17 17:27:25.000000000 +0200
++++ vdr/recording.c	2004-08-01 13:40:47.000000000 +0200
+@@ -45,8 +45,9 @@
+ #define RESUMEFILESUFFIX  "/resume%s%s.vdr"
+ #define SUMMARYFILESUFFIX "/summary.vdr"
+ #define MARKSFILESUFFIX   "/marks.vdr"
++#define INDEXFILESUFFIX   "/index.vdr" 
+ 
+-#define FINDCMD      "cd '%s' && find '%s' -follow -type d -name '%s' 2> /dev/null"
++#define FINDCMD      "cd '%s' && find '%s' -follow -type d -name '%s' -print -prune -o -follow -type d -name '%s' -prune 2> /dev/null"
+ 
+ #define MINDISKSPACE 1024 // MB
+ 
+@@ -490,6 +491,12 @@
+ 
+ const char *cRecording::Title(char Delimiter, bool NewIndicator, int Level)
+ {
++  struct tIndex { int offset; uchar type; uchar number; short reserved; };
++  tIndex *index;
++  char RecLength[20] = "";
++  char RecDate[5] = "";
++  char RecTime[5] = "";
++  char RecDelimiter[1] = "";
+   char New = NewIndicator && IsNew() ? '*' : ' ';
+   free(titleBuffer);
+   titleBuffer = NULL;
+@@ -501,14 +508,47 @@
+         s++;
+      else
+         s = name;
+-     asprintf(&titleBuffer, "%02d.%02d%c%02d:%02d%c%c%s",
+-                            t->tm_mday,
+-                            t->tm_mon + 1,
+-                            Delimiter,
+-                            t->tm_hour,
+-                            t->tm_min,
++     if (Setup.ShowRecLength) {
++        char *filename = NULL;
++        int last = -1;
++        index = NULL;
++        if (FileName()) {
++           filename = MALLOC(char, strlen(FileName()) + strlen(INDEXFILESUFFIX) + 1);
++           if (filename) {
++              strcpy(filename, FileName());
++              char *pFileExt = filename + strlen(filename);
++              strcpy(pFileExt, INDEXFILESUFFIX);
++              int delta = 0;
++              if (access(filename, R_OK) == 0) {
++                 struct stat buf;
++                 if (stat(filename, &buf) == 0) {
++                    delta = buf.st_size % sizeof(tIndex);
++                    if (delta) {
++                       delta = sizeof(tIndex) - delta;
++                       esyslog("ERROR: invalid file size (%ld) in '%s'", buf.st_size, filename);
++                       }
++                    last = (buf.st_size + delta) / sizeof(tIndex) - 1;
++                    char hour[2] = ""; char min[3] = "";
++                    sprintf(RecLength, "%s", IndexToHMSF(last, true));
++                    sprintf(hour, "%c", RecLength[0]);
++                    sprintf(min, "%c%c", RecLength[2], RecLength[3]);	  
++                    sprintf(RecLength, "%3d´", (atoi(hour) * 60) + atoi(min));
++                    }
++                 }
++              }
++           }
++        }
++     sprintf(RecDate,"%02d.%02d", t->tm_mday, t->tm_mon + 1);
++     sprintf(RecTime,"%02d:%02d", t->tm_hour, t->tm_min);
++     sprintf(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,
+-                            Delimiter,
++                            (Setup.ShowRecTime   ? RecDelimiter : Setup.ShowRecDate ? RecDelimiter : ""),
++                            (Setup.ShowRecLength ? RecLength    : ""),
++                            (Setup.ShowRecLength ? RecDelimiter : ""),
+                             s);
+      // let's not display a trailing '~':
+      stripspace(titleBuffer);
+@@ -614,6 +654,32 @@
+   return RemoveVideoFile(FileName());
+ }
+ 
++bool cRecording::Rename(char *newName, int *newPriority, int *newLifetime)
++{
++  bool result = true;
++  char *newFileName;
++  struct tm tm_r;
++  struct tm *t = localtime_r(&start, &tm_r);
++  asprintf(&newFileName, NAMEFORMAT, VideoDirectory, ExchangeChars(newName, true), t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, t->tm_hour, t->tm_min, *newPriority, *newLifetime);
++  if (strcmp(FileName(), newFileName)) {
++     if (access(newFileName, F_OK) == 0) {
++        isyslog("recording %s already exists", newFileName);
++        }
++     else {
++        isyslog("renaming recording %s to %s", FileName(), newFileName);
++        result = MakeDirs(newFileName, true);
++        if (result)
++           result = RenameVideoFile(FileName(), newFileName);
++        if (result) {
++           free(fileName);
++           fileName = strdup(newFileName);
++           }
++        }
++     }
++  free(newFileName);
++  return result;
++}
++
+ // --- cRecordings -----------------------------------------------------------
+ 
+ bool cRecordings::Load(bool Deleted)
+@@ -621,7 +687,7 @@
+   Clear();
+   bool result = false;
+   char *cmd = NULL;
+-  asprintf(&cmd, FINDCMD, VideoDirectory, VideoDirectory, Deleted ? "*" DELEXT : "*" RECEXT);
++  asprintf(&cmd, FINDCMD, VideoDirectory, VideoDirectory, Deleted ? "*" DELEXT : "*" RECEXT, Deleted ? "*" RECEXT : "*" DELEXT);
+   FILE *p = popen(cmd, "r");
+   if (p) {
+      char *s;
+@@ -773,7 +839,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 -Nur vdr.orig/recording.h vdr/recording.h
+--- vdr.orig/recording.h	2004-07-17 17:27:25.000000000 +0200
++++ vdr/recording.h	2004-08-01 13:40:47.000000000 +0200
+@@ -66,6 +66,9 @@
+   bool Remove(void);
+        // Actually removes the file from the disk
+        // Returns false in case of error
++  bool Rename(char *newName, int *newPriority, int *newLifetime);
++       // Changes the file name
++       // Returns false in case of error
+   };
+ 
+ class cRecordings : public cList<cRecording> {
+@@ -113,7 +116,7 @@
+ #define FRAMESPERSEC 25
+ 
+ // The maximum size of a single frame:
+-#define MAXFRAMESIZE  KILOBYTE(192)
++#define MAXFRAMESIZE  KILOBYTE(512)
+ 
+ // The maximum file size is limited by the range that can be covered
+ // with 'int'. 4GB might be possible (if the range is considered
+diff -Nur vdr.orig/remux.c vdr/remux.c
+--- vdr.orig/remux.c	2004-07-17 17:27:25.000000000 +0200
++++ vdr/remux.c	2004-08-01 13:40:47.000000000 +0200
+@@ -106,7 +106,7 @@
+ #define ADAPT_FIELD    0x20
+ 
+ #define MAX_PLENGTH  0xFFFF          // the maximum PES packet length (theoretically)
+-#define MMAX_PLENGTH (8*MAX_PLENGTH) // some stations send PES packets that are extremely large, e.g. DVB-T in Finland
++#define MMAX_PLENGTH (64*MAX_PLENGTH) // some stations send PES packets that are extremely large, e.g. DVB-T in Finland
+ 
+ #define IPACKS 2048
+ 
+diff -Nur vdr.orig/theme.c vdr/theme.c
+--- vdr.orig/theme.c	1970-01-01 01:00:00.000000000 +0100
++++ vdr/theme.c	2004-08-01 13:40:47.000000000 +0200
+@@ -0,0 +1,370 @@
++/*
++ * theme.c: Theme implementations
++ *
++ * See the main source file 'vdr.c' for copyright information and
++ * how to reach the author.
++ *
++ */
++
++#include "osd.h"
++#include "menu.h"
++#include "status.h"
++#include "config.h"
++#include "theme.h"
++
++cDisplayChannelTheme::cDisplayChannelTheme(void)
++:cBitmap(Width() * cOsd::CellWidth(), Height(true) * cOsd::LineHeight(), 5)
++{
++  lines = 0;
++}
++
++void cDisplayChannelTheme::Reset(void) 
++{
++  lines = 0;
++}
++
++void cDisplayChannelTheme::DrawChannel(const cChannel *Channel, int Number)
++{
++  char symbol[3] = "";
++  int bufSize = 28;
++  bool hasLogo = false;
++  char channel[bufSize];
++  char number[bufSize];
++
++  cBitmap logo(64, 48, 4);
++  int width = Width() * cOsd::CellWidth();
++  int height = Height(true) * cOsd::LineHeight();
++  const char *date = DayDateTime();
++  hasLogo = Setup.ChannelLogo && Channel && (logo.LoadXpm(Channel->Name(), Setup.LogoColorScheme ? (eDvbColor)bgchanneldate : clrTransparent) || logo.LoadLogo(Channel->Name()));
++  if (!hasLogo) {
++     bufSize += 4;
++     cOsd::HideLogo();
++     }
++
++  *channel = 0;
++  if (Channel)
++     snprintf(channel, bufSize, "%s", Channel->Name());
++  else if (Number == 0)
++     snprintf(channel, bufSize, "%s", "*** Invalid Channel ***");
++
++  *number = 0;
++  if (Channel && !Channel->GroupSep())
++     snprintf(number, bufSize, "%d%s", Channel->Number(), Number ? "-" : "");
++  else if (Number)
++     snprintf(number, bufSize, "%d-", Number);
++
++  eDvbFont oldFont = SetFont(fontSym);
++
++  // clean area
++  Fill(0, 0, width - 1, height - 1, clrTransparent);
++
++  // symbols area w/ upper right corner
++  snprintf(symbol, sizeof(symbol), "%c", FSYM_ROUND_RIGHT1);
++  Fill(10, 10, width - 1, 63, clrBackground);
++  Text(width - 28, 10, symbol, clrBackground, clrTransparent);
++
++  // channel number and date, with round corner
++  snprintf(symbol, sizeof(symbol), "%c", FSYM_ROUND_LEFT);
++  Fill(10, 10, 315, 36, (eDvbColor)bgchanneldate);
++  Text(316, 10, symbol, (eDvbColor)bgchanneldate, clrBackground);
++
++  // separator line
++  Fill(10, 37, 315, 38, clrBlack);
++
++  // channel name, with round corner
++  snprintf(symbol, sizeof(symbol), "%c", FSYM_ROUND_LEFT);
++  Fill(10, 39, 350, 64, (eDvbColor)bgchannelname);
++  Text(351, 39, symbol, (eDvbColor)bgchannelname, clrBackground);
++
++  if (Channel && !Channel->GroupSep()) {
++     if (Setup.Symbol) {
++        if (Channel->Vpid()) {
++           snprintf(symbol, sizeof(symbol), "%c", FSYM_TELETEXT);
++           Text(width - 33,  25, symbol, Channel->Tpid() ? (eDvbColor)fgsymbolon : (eDvbColor)fgsymboloff, clrBackground);
++           }
++        else {
++           snprintf(symbol, sizeof(symbol), "%c", FSYM_MUSIC);
++           Text(width - 33,  25, symbol, (eDvbColor)fgsymbolon, clrBackground);
++           }                                                                                          
++        snprintf(symbol, sizeof(symbol), "%c", FSYM_AUDIO);
++        Text(width - 75,  25, symbol, Channel->Apid2() ? (eDvbColor)fgsymbolon : (eDvbColor)fgsymboloff, clrBackground);
++        snprintf(symbol, sizeof(symbol), "%c", FSYM_DDIGITAL);
++        Text(width - 117, 25, symbol, Channel->Dpid1() ? (eDvbColor)fgsymbolon : (eDvbColor)fgsymboloff, clrBackground);
++        snprintf(symbol, sizeof(symbol), "%c", FSYM_ENCRYPTION);
++        Text(width - 159, 25, symbol, Channel->Ca() ? (eDvbColor)fgsymbolon : (eDvbColor)fgsymboloff, clrBackground);
++        snprintf(symbol, sizeof(symbol), "%c", FSYM_RECORD);
++        Text(width - 201, 25, symbol, cRecordControls::Active() ? clrWhite : (eDvbColor)fgsymboloff, cRecordControls::Active() ? clrRed : clrBackground);
++        }
++     if (hasLogo) {
++        Fill(10, 10, 65, 49, clrBlack);
++        cOsd::SetLogo(0, 0, logo);
++        }
++     }
++
++  SetFont(fontSml);
++  Text(hasLogo ? 70 : 16, 12, number, (eDvbColor)fgchanneldate, (eDvbColor)bgchanneldate);
++  Text(hasLogo ? 70 : 16, 39, channel, (eDvbColor)fgchannelname, (eDvbColor)bgchannelname);
++  Text(315 - cBitmap::Width(date), 12, date, (eDvbColor)fgchanneldate, (eDvbColor)bgchanneldate);
++  SetFont(oldFont);
++
++  char *fullchan = MALLOC(char, strlen(number) + strlen(channel) + 2);
++  strcpy(fullchan, number);
++  strcat(fullchan, " ");
++  strcat(fullchan, channel);
++  cStatus::MsgOsdChannel(fullchan);
++}
++
++bool cDisplayChannelTheme::DrawInfo(void) 
++{
++  char symbol[3] = "";
++  bool Res = false;
++  const cEventInfo *Present = NULL, *Following = NULL;
++  cMutexLock MutexLock;
++  const cSchedules *Schedules = cSIProcessor::Schedules(MutexLock);
++  if (Schedules) {
++     const cSchedule *Schedule = Schedules->GetSchedule();
++     if (Schedule) {
++        const char *PresentTitle = NULL, *PresentSubtitle = NULL, *FollowingTitle = NULL, *FollowingSubtitle = NULL;
++        int Lines = 0;
++        if ((Present = Schedule->GetPresentEvent()) != NULL) {
++           PresentTitle = Present->GetTitle();
++           if (!isempty(PresentTitle))
++              Lines++;
++           PresentSubtitle = Present->GetSubtitle();
++           if (!isempty(PresentSubtitle))
++              Lines++;
++           }
++        if ((Following = Schedule->GetFollowingEvent()) != NULL) {
++           FollowingTitle = Following->GetTitle();
++           if (!isempty(FollowingTitle))
++              Lines++;
++           FollowingSubtitle = Following->GetSubtitle();
++           if (!isempty(FollowingSubtitle))
++              Lines++;
++           }
++        if (Lines > lines) {
++           int y = 68;
++           SetFont(fontSym);
++           // epg time area
++           Fill(10, 64, 83, 64 + 4 * cOsd::LineHeight(), (eDvbColor)bgepgtime);
++           Fill(84, 64, width - 1, 64 + 4 * cOsd::LineHeight(), (eDvbColor)bgepgdata);
++           snprintf(symbol, sizeof(symbol), "%c", FSYM_ROUND_LEFT2);
++           Text(10, 38 + 4 * cOsd::LineHeight(), symbol, (eDvbColor)bgepgtime, clrTransparent);
++           snprintf(symbol, sizeof(symbol), "%c", FSYM_ROUND_RIGHT2);
++           Text(width - 28, 38 + 4 * cOsd::LineHeight(), symbol, (eDvbColor)bgepgdata, clrTransparent);
++           SetFont(fontSml);
++           if (!isempty(PresentTitle)) {
++              Text(20, y, Present->GetTimeString(), (eDvbColor)fgepgtime, (eDvbColor)bgepgtime);
++              Text(90, y, PresentTitle, (eDvbColor)fgtitle, (eDvbColor)bgepgdata);
++              }
++           y += cOsd::LineHeight();
++           if (!isempty(PresentSubtitle)) {
++              Text(90, y, PresentSubtitle, (eDvbColor)fgsubtitle, (eDvbColor)bgepgdata);
++              }
++           y += cOsd::LineHeight();
++           if (!isempty(FollowingTitle)) {
++              Text(20, y, Following->GetTimeString(), (eDvbColor)fgepgtime, (eDvbColor)bgepgtime);
++              Text(90, y, FollowingTitle, (eDvbColor)fgtitle, (eDvbColor)bgepgdata);
++              }
++           y += cOsd::LineHeight();
++           if (!isempty(FollowingSubtitle)) {
++              Text(90, y, FollowingSubtitle, (eDvbColor)fgsubtitle, (eDvbColor)bgepgdata);
++              }
++
++           if (Setup.TimeBar) {
++              if (Present) {
++                 int h = 4 * cOsd::LineHeight();
++                 int w = 10;
++                 float percent = 0;
++                 cBitmap timeBar(w, h, 2);
++                 if (Present->GetDuration() != 0) {
++                    percent =  (float)(time(NULL) - Present->GetTime()) / (float)(Present->GetDuration());
++                    }
++                 if (percent < 0) percent = 0;
++                 if (percent > 1.0) percent = 1.0;
++                 // Draw the bar
++                 for (int x = 1; x < w- 1; x++) {
++                     for (int y = h- 1; y > 0; y--) {
++                         if (y > (int)(percent*(float)h))
++                            timeBar.SetPixel(x, y, (eDvbColor)timebar1);
++                         else
++                            timeBar.SetPixel(x, y, (eDvbColor)timebar2);
++                         }
++                     }
++                  SetBitmap(74, 64, timeBar);
++                  }
++              }
++           lines = Lines;
++           Res = true;
++           cStatus::MsgOsdProgramme(Present ? Present->GetTime() : 0, PresentTitle, PresentSubtitle, Following ? Following->GetTime() : 0, FollowingTitle, FollowingSubtitle);
++           }
++        }
++     }
++  return Res;
++}
++
++cDisplayChannelTheme::~cDisplayChannelTheme(void)
++{
++}
++
++int cDisplayChannelTheme::Height(bool WithInfo)
++{
++  int height = 3;
++  if (WithInfo)
++     height += 4;
++  return height;
++}
++
++cReplayControlTheme::cReplayControlTheme(void)
++:cBitmap(Width() * cOsd::CellWidth(), Height(true) * cOsd::LineHeight(), 3)
++{
++}
++
++cReplayControlTheme::~cReplayControlTheme(void)
++{
++}
++
++void cReplayControlTheme::DrawMode(int Mode, bool ModeOnly)
++{
++  char symbol[3] = "";
++  eDvbFont oldFont = SetFont(fontSym);
++	
++  // clean area
++  if (ModeOnly)
++     Fill(0, 0, width - 1, height - 1, clrTransparent);
++  else
++     Fill(0, height - 27, width - 1, height - 1, clrTransparent);
++
++  // replay controls frame
++  Fill(width - 201, height - 27, width - 1, height - 1, clrBackground);
++  if (ModeOnly) {
++     snprintf(symbol, sizeof(symbol), "%c", FSYM_ROUND_RIGHT);
++     Text(width - 215, height - 27, symbol, clrBackground, clrTransparent);
++     snprintf(symbol, sizeof(symbol), "%c", FSYM_ROUND_LEFT);
++     Text(width - 14, height - 27, symbol, clrBackground, clrTransparent);
++     }
++  else {
++     snprintf(symbol, sizeof(symbol), "%c%c", FSYM_WAVE_DOWN1, FSYM_WAVE_DOWN2);
++     Text(width - 257, height - 27, symbol, clrBackground, clrTransparent);
++     snprintf(symbol, sizeof(symbol), "%c", FSYM_ROUND_RIGHT2);
++     Text(width - 28, height - 27, symbol, clrBackground, clrTransparent);
++     }
++
++  if (Mode == MODE_REW1 || Mode == MODE_REW2 || Mode == MODE_REW3) {
++     snprintf(symbol, sizeof(symbol), "%c", FSYM_REW1_SMALL + Mode - MODE_REW1);
++     Text(width - 201, height - 23, symbol, (eDvbColor)fgsymbolon, clrBackground);
++     }
++  else {
++     snprintf(symbol, sizeof(symbol), "%c", FSYM_REW_SMALL);
++     Text(width - 201, height - 23, symbol, Mode == MODE_REW ? (eDvbColor)fgsymbolon : (eDvbColor)fgsymboloff, clrBackground);
++     }
++
++  if (Mode == MODE_SREW1 || Mode == MODE_SREW2 || Mode == MODE_SREW3) {
++     snprintf(symbol, sizeof(symbol), "%c", FSYM_SREW1 + Mode - MODE_SREW1);
++     Text(width - 168, height - 23, symbol, (eDvbColor)fgsymbolon, clrBackground);
++     }
++  else {
++     snprintf(symbol, sizeof(symbol), "%c", FSYM_SREW);
++     Text(width - 168, height - 23, symbol, Mode == MODE_SREW ? (eDvbColor)fgsymbolon : (eDvbColor)fgsymboloff, clrBackground);
++     }
++
++  snprintf(symbol, sizeof(symbol), "%c", FSYM_PLAY_SMALL);
++  Text(width - 135, height - 23, symbol, Mode == MODE_PLAY ? (eDvbColor)fgsymbolon : (eDvbColor)fgsymboloff, clrBackground);
++  snprintf(symbol, sizeof(symbol), "%c", FSYM_PAUSE_SMALL);
++  Text(width - 102, height - 23, symbol, Mode == MODE_PAUSE ? (eDvbColor)fgsymbolon : (eDvbColor)fgsymboloff, clrBackground);
++
++  if (Mode == MODE_SFWD1 || Mode == MODE_SFWD2 || Mode == MODE_SFWD3) {
++     snprintf(symbol, sizeof(symbol), "%c", FSYM_SFWD1 + Mode - MODE_SFWD1);
++     Text(width - 69, height - 23, symbol, (eDvbColor)fgsymbolon, clrBackground);
++     }
++  else {
++     snprintf(symbol, sizeof(symbol), "%c", FSYM_SFWD);
++     Text(width - 69, height - 23, symbol, Mode == MODE_SFWD ? (eDvbColor)fgsymbolon : (eDvbColor)fgsymboloff, clrBackground);
++     }
++
++  if (Mode == MODE_FFWD1 || Mode == MODE_FFWD2 || Mode == MODE_FFWD3) {
++     snprintf(symbol, sizeof(symbol), "%c", FSYM_FFWD1_SMALL + Mode - MODE_FFWD1);
++     Text(width - 36, height - 23, symbol, (eDvbColor)fgsymbolon, clrBackground);
++     }
++  else {
++     snprintf(symbol, sizeof(symbol), "%c", FSYM_FFWD_SMALL);
++     Text(width - 36, height - 23, symbol, Mode == MODE_FFWD ? (eDvbColor)fgsymbolon : (eDvbColor)fgsymboloff, clrBackground);
++     }
++
++  SetFont(oldFont);
++}
++
++void cReplayControlTheme::DrawProgress(int Current, int Total, bool DisplayFrames, const cMarks &Marks, const char *Title)
++{
++  char symbol[3] = "";
++  eDvbFont oldFont = SetFont(fontSml);
++  char *title = 0;
++  int tw = -1;
++
++  if (Title) {
++     tw = cBitmap::Width(Title);
++     if (tw > width - 256) {
++        int pw = cBitmap::Width("00.00 ...");
++        const char *ptr = Title + 12;
++	while (*ptr != '\0' && (tw = cBitmap::Width(ptr) + pw) > width - 256) ++ptr;
++        title = MALLOC(char, strlen(ptr) + 10);
++        strncpy(title, Title, 6);
++        stpcpy(stpcpy(title + 6, "..."), ptr);
++        }
++     else
++        title = strdup(Title);
++     }
++
++  SetFont(fontSym);
++  /* clear area */
++  Fill(0, 0, width - 1, height - 28, clrTransparent);
++
++  /* time area */
++  int ty;
++  if (tw > width - 200) 
++     ty = height - 97;
++  else
++     ty = height - 81;
++  Fill(width - 200, ty, width - 1, height - 46, clrBackground);
++  snprintf(symbol, sizeof(symbol), "%c%c", FSYM_WAVE_UP1, FSYM_WAVE_UP2);
++  Text(width - 256, ty, symbol, clrBackground, clrTransparent);
++  snprintf(symbol, sizeof(symbol), "%c", FSYM_ROUND_RIGHT1);
++  Text(width - 28, ty, symbol, clrBackground, clrTransparent);
++  SetFont(fontSml);
++  char *timestr = NULL;
++  asprintf(&timestr, "%s", IndexToHMSF(Current, DisplayFrames));
++  asprintf(&timestr, "%s  /  %s ", timestr, IndexToHMSF(Total));
++  Text(width - cBitmap::Width(timestr) - 14, ty + 3, timestr, clrWhite, clrBackground);
++  free(timestr);
++  SetFont(fontSym);
++
++  /* frame w/ three corners */
++  Fill(14, height - 54, width - 1, height - 28, clrBackground);
++  snprintf(symbol, sizeof(symbol), "%c", FSYM_ROUND_RIGHT);
++  Text(14, height - 54, symbol, clrBackground, clrTransparent);
++  if (!Setup.ShowReplayMode) {
++     snprintf(symbol, sizeof(symbol), "%c", FSYM_ROUND_RIGHT2);
++     Text(width - 28, height - 54, symbol, clrBackground, clrTransparent);
++     }
++  Fill(30, height - 46, width - 12, height - 31, clrBlack);
++  cProgressBar progressBar(width - 42, 15, Current, Total, Marks);
++  SetBitmap(28, height - 48, progressBar);
++  SetFont(fontSml);
++
++  /* title */
++  if (title) {
++     Fill(2, height - 70, tw + 8, height - 49, clrBlack);
++     Fill(0, height - 72, tw + 6, height - 51, clrWhite);
++     Text(4, height - 72, title, clrBlack, clrWhite);
++     free(title);
++     }
++  SetFont(oldFont);
++}
++
++int cReplayControlTheme::Height(bool WithInfo)
++{
++  int height = 1;
++  if (WithInfo)
++     height += 3;
++  return height;
++}
+diff -Nur vdr.orig/theme.h vdr/theme.h
+--- vdr.orig/theme.h	1970-01-01 01:00:00.000000000 +0100
++++ vdr/theme.h	2004-08-01 13:40:47.000000000 +0200
+@@ -0,0 +1,123 @@
++/*
++ * theme.h: Theme implementation
++ *
++ * See the main source file 'vdr.c' for copyright information and
++ * how to reach the author.
++ *
++ * 
++ */
++
++#ifndef __THEME_H
++#define __THEME_H
++
++#include "interface.h"
++#include "config.h"
++
++enum eOSDTheme {
++  themeVanilla,
++  themeElchi,
++  themeSaschaScroll,
++  themeSaschaRound
++};
++
++#define MODE_PLAY   0
++#define MODE_FFWD1  1
++#define MODE_FFWD2  2
++#define MODE_FFWD3  3
++#define MODE_PAUSE  4
++#define MODE_REW1   5
++#define MODE_REW2   6
++#define MODE_REW3   7
++#define MODE_FFWD   8
++#define MODE_REW    9
++#define MODE_SFWD1 10
++#define MODE_SFWD2 11
++#define MODE_SFWD3 12
++#define MODE_SREW1 13
++#define MODE_SREW2 14
++#define MODE_SREW3 15
++#define MODE_SFWD  16
++#define MODE_SREW  17
++
++#define FSYM_THINSPACE        32 /* " " */
++
++#define FSYM_DDIGITAL         33 /* "!" */
++#define FSYM_TELETEXT         34 /* """ */
++#define FSYM_ENCRYPTION       35 /* "#" */
++#define FSYM_AUDIO            36 /* "$" */
++#define FSYM_RECORD           37 /* "%" */
++#define FSYM_MUSIC            38 /* "&" */
++
++#define FSYM_WAVE_UP1         41 /* ")" */
++#define FSYM_WAVE_UP2         42 /* "*" */
++#define FSYM_WAVE_DOWN1       43 /* "+" */
++#define FSYM_WAVE_DOWN2       44 /* "," */
++#define FSYM_ROUND_LEFT1      45 /* "-" */
++#define FSYM_ROUND_LEFT2      46 /* "." */
++#define FSYM_ROUND_RIGHT1     47 /* "/" */
++#define FSYM_ROUND_RIGHT2     48 /* "0" */
++#define FSYM_ROUND_LEFT       49 /* "1" */
++#define FSYM_ROUND_RIGHT      50 /* "2" */
++#define FSYM_THINROUND_RIGHT  51 /* "3" */
++#define FSYM_THINROUND_RIGHT1 52 /* "4" */
++#define FSYM_THINROUND_RIGHT2 53 /* "5" */
++#define FSYM_TRIANGLE         54 /* "6" */
++
++#define FSYM_PLAY             57 /* "9" */
++#define FSYM_FFWD1            58 /* ":" */
++#define FSYM_FFWD2            59 /* ";" */
++#define FSYM_FFWD3            60 /* "<" */
++#define FSYM_PAUSE            61 /* "=" */
++#define FSYM_REW1             62 /* ">" */
++#define FSYM_REW2             63 /* "?" */
++#define FSYM_REW3             64 /* "@" */
++#define FSYM_EMPTY            65 /* "A" */
++#define FSYM_FFWD             66 /* "B" */
++#define FSYM_REW              67 /* "C" */
++
++#define FSYM_PLAY_SMALL       70 /* "F" */
++#define FSYM_FFWD1_SMALL      71 /* "G" */
++#define FSYM_FFWD2_SMALL      72 /* "H" */
++#define FSYM_FFWD3_SMALL      73 /* "I" */
++#define FSYM_PAUSE_SMALL      74 /* "J" */
++#define FSYM_REW1_SMALL       75 /* "K" */
++#define FSYM_REW2_SMALL       76 /* "L" */
++#define FSYM_REW3_SMALL       77 /* "M" */
++#define FSYM_EMPTY_SMALL      78 /* "N" */
++#define FSYM_FFWD_SMALL       79 /* "O" */
++#define FSYM_REW_SMALL        80 /* "P" */
++
++#define FSYM_SFWD1            83 /* "S" */
++#define FSYM_SFWD2            84 /* "T" */
++#define FSYM_SFWD3            85 /* "U" */
++#define FSYM_SREW1            86 /* "V" */
++#define FSYM_SREW2            87 /* "W" */
++#define FSYM_SREW3            88 /* "X" */
++#define FSYM_SFWD             89 /* "Y" */
++#define FSYM_SREW             90 /* "Z" */
++
++class cDisplayChannelTheme : public cBitmap {
++private:
++	int lines;
++public:
++	cDisplayChannelTheme(void);
++	virtual ~cDisplayChannelTheme();
++	void Reset(void);
++	void DrawChannel(const cChannel *Channel, int Number);
++	bool DrawInfo(void);
++	static int Width(void) { return Setup.OSDwidth; }
++	static int Height(bool WithInfo);
++};
++
++class cReplayControlTheme : public cBitmap {
++public:
++	cReplayControlTheme(void);
++	virtual ~cReplayControlTheme();
++	void DrawMode(int Mode, bool ModeOnly);
++	void DrawProgress(int Current, int Total, bool DisplayFrames,
++	const cMarks &Marks, const char *Title);
++	static int Width(void) { return Setup.OSDwidth; }
++	static int Height(bool WithInfo);
++};
++
++#endif // __THEME_H
+diff -Nur vdr.orig/timers.c vdr/timers.c
+--- vdr.orig/timers.c	2004-07-17 17:27:25.000000000 +0200
++++ vdr/timers.c	2004-08-01 13:40:47.000000000 +0200
+@@ -253,6 +253,16 @@
+   return weekday == 0 ? 6 : weekday - 1; // we start with monday==0!
+ }
+ 
++const char * cTimer::GetWDayString(time_t t)
++{
++  static char WDay[4];
++
++  struct tm tm_r;
++  strn0cpy(WDay, WeekDayName(localtime_r(&t, &tm_r)->tm_wday), sizeof(WDay));
++
++  return WDay;
++}
++
+ bool cTimer::DayMatches(time_t t)
+ {
+   return IsSingleEvent() ? GetMDay(t) == day : (day & (1 << GetWDay(t))) != 0;
+diff -Nur vdr.orig/timers.h vdr/timers.h
+--- vdr.orig/timers.h	2004-07-17 17:27:25.000000000 +0200
++++ vdr/timers.h	2004-08-01 13:40:47.000000000 +0200
+@@ -61,6 +61,7 @@
+   bool IsSingleEvent(void);
+   int GetMDay(time_t t);
+   int GetWDay(time_t t);
++  const char *GetWDayString(time_t t);
+   bool DayMatches(time_t t);
+   static time_t IncDay(time_t t, int Days);
+   static time_t SetTime(time_t t, int SecondsFromMidnight);
+diff -Nur vdr.orig/tools.c vdr/tools.c
+--- vdr.orig/tools.c	2004-07-17 17:27:25.000000000 +0200
++++ vdr/tools.c	2004-08-01 13:40:47.000000000 +0200
+@@ -17,6 +17,7 @@
+ #include <time.h>
+ #include <unistd.h>
+ #include "i18n.h"
++#include "theme.h"
+ 
+ int SysLogLevel = 3;
+ 
+@@ -494,6 +495,9 @@
+      time(&t);
+   struct tm tm_r;
+   tm *tm = localtime_r(&t, &tm_r);
++  if (Setup.Theme != themeVanilla)
++  snprintf(buffer, sizeof(buffer), " %s %02d.%02d   %02d:%02d ", WeekDayName(tm->tm_wday), tm->tm_mday, tm->tm_mon + 1, tm->tm_hour, tm->tm_min);
++  else
+   snprintf(buffer, sizeof(buffer), "%s %2d.%02d %02d:%02d", WeekDayName(tm->tm_wday), tm->tm_mday, tm->tm_mon + 1, tm->tm_hour, tm->tm_min);
+   return buffer;
+ }
+diff -Nur vdr.orig/transfer.c vdr/transfer.c
+--- vdr.orig/transfer.c	2004-07-17 17:27:25.000000000 +0200
++++ vdr/transfer.c	2004-08-01 13:40:47.000000000 +0200
+@@ -12,8 +12,8 @@
+ //XXX+ also used in recorder.c - find a better place???
+ // The size of the array used to buffer video data:
+ // (must be larger than MINVIDEODATA - see remux.h)
+-#define VIDEOBUFSIZE  MEGABYTE(1)
+-#define POLLTIMEOUTS_BEFORE_DEVICECLEAR 3
++#define VIDEOBUFSIZE  MEGABYTE(4)
++#define POLLTIMEOUTS_BEFORE_DEVICECLEAR (1000 /* ms */ * 31 /* 2 GOPs + 1 additional frame */ / 25 /* frames per second */ / 100 /* ms poll timeout */)
+ 
+ // --- cTransfer -------------------------------------------------------------
+ 
+diff -Nur vdr.orig/vdr.c vdr/vdr.c
+--- vdr.orig/vdr.c	2004-07-22 20:19:11.000000000 +0200
++++ vdr/vdr.c	2004-08-01 13:40:47.000000000 +0200
+@@ -96,7 +96,6 @@
+ 
+   int SVDRPport = DEFAULTSVDRPPORT;
+   const char *AudioCommand = NULL;
+-  const char *ConfigDirectory = NULL;
+   bool DisplayHelp = false;
+   bool DisplayVersion = false;
+   bool DaemonMode = false;
+@@ -330,7 +329,7 @@
+      HasStdin = true;
+      }
+ 
+-  isyslog("VDR version %s started", VDRVERSION);
++  isyslog("VDR version %s (ElchiAIO%d%c) started", VDRVERSION, ELCHIAIOVERSION / 100, ELCHIAIOVERSION % 100 ? char(87 + (ELCHIAIOVERSION % 100)) : ' ');
+ 
+   // Load plugins:
+ 
+@@ -358,6 +357,39 @@
+         ))
+      return 2;
+ 
++  // SetColors:
++
++  bgbackground    = Setup.Theme == themeVanilla ? clrBackVanilla : Setup.BgClrBackground;
++  bgchannelname   = Setup.BgClrChannelName;
++  bgchanneldate   = Setup.BgClrChannelDate;
++  bgepgtime       = Setup.BgClrEpgTime;
++  bgepgdata       = Setup.BgClrEpgData;
++  bgtitleline     = Setup.BgClrTitleLine;
++  bgscrolline     = Setup.BgClrScrolLine;
++  bghelpred       = Setup.BgClrHelpRed;
++  bghelpgreen     = Setup.BgClrHelpGreen;
++  bghelpyellow    = Setup.BgClrHelpYellow;
++  bghelpblue      = Setup.BgClrHelpBlue;
++  bgerrorline     = Setup.BgClrErrorLine;
++  bginfoline      = Setup.BgClrInfoLine;
++  bgconfirmline   = Setup.BgClrConfirmLine;
++  fgchannelname   = LookupColor(Setup.ClrChannelName);
++  fgchanneldate   = LookupColor(Setup.ClrChannelDate);
++  fgepgtime       = LookupColor(Setup.ClrEpgTime);
++  fgtitle         = LookupColor(Setup.ClrTitle);
++  fgsubtitle      = LookupColor(Setup.ClrSubTitle);
++  fgmenufont      = LookupColor(Setup.ClrMenuFont);
++  fgtitleline     = LookupColor(Setup.ClrTitleLine);
++  fgscrolline     = LookupColor(Setup.ClrScrolLine);
++  volumebar       = LookupColor(Setup.ClrVolumeBar);
++  timebar1        = LookupColor(Setup.ClrTimeBar1);
++  timebar2        = LookupColor(Setup.ClrTimeBar2);
++  fgsymbolon      = LookupColor(Setup.ClrSymbolOn);
++  fgsymboloff     = LookupColor(Setup.ClrSymbolOff);
++  fgerrorfont     = LookupColor(Setup.ClrErrorFont);
++  fginfofont      = LookupColor(Setup.ClrInfoFont);
++  fgconfirmfont   = LookupColor(Setup.ClrConfirmFont);
++
+   // DVB interfaces:
+ 
+   cDvbDevice::Initialize();

Added: vdr/vdr/trunk/debian/patches/opt-21_ttxtsubs.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-21_ttxtsubs.dpatch	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/patches/opt-21_ttxtsubs.dpatch	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,349 @@
+#!/bin/sh /usr/share/dpatch/dpatch-run
+
+## ttxtsubs patch from ttxtsubs plugin 0.0.5
+## Ragnar Sundblad <ragge@nada.kth.se>
+## http://www.nada.kth.se/~ragge/vdr/ttxtsubs/
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: This patch is needed for the ttxtsubs plugin
+
+@DPATCH@
+diff -Nur vdr.orig/dvbplayer.c vdr/dvbplayer.c
+--- vdr.orig/dvbplayer.c	2004-06-26 03:03:47.000000000 +0200
++++ vdr/dvbplayer.c	2004-06-26 03:04:12.000000000 +0200
+@@ -14,6 +14,7 @@
+ #include "ringbuffer.h"
+ #include "thread.h"
+ #include "tools.h"
++#include "vdrttxtsubshooks.h"
+ 
+ // --- cBackTrace ----------------------------------------------------------
+ 
+@@ -323,6 +324,12 @@
+             int l = b[i + 4] * 256 + b[i + 5] + 6;
+             switch (c) {
+               case 0xBD: // dolby
++#ifdef VDRTTXTSUBSHOOKS
++		   if (b[i + 8] == 0x24 && b[i + 45] >= 0x10 && b[i + 45] < 0x20) {
++		     break; // run these through the ring buffer to get somewhat correct
++		     // timing for the subtitles
++		   } else
++#endif
+                    if (Except)
+                       PlayAudio(&b[i], l);
+                    // continue with deleting the data - otherwise it disturbs DVB replay
+@@ -349,6 +356,40 @@
+      }
+ }
+ 
++#ifdef VDRTTXTSUBSHOOKS
++static void StripTtxtPackets(uchar *b, int Length)
++{
++  for (int i = 0; i < Length - 6; i++) {
++    if (b[i] == 0x00 && b[i + 1] == 0x00 && b[i + 2] == 0x01) {
++      uchar c = b[i + 3];
++      int l = b[i + 4] * 256 + b[i + 5] + 6;
++      switch (c) {
++      case 0xBD: // dolby
++	{
++	  if (b[i + 8] == 0x24 && b[i + 45] >= 0x10 && b[i + 45] < 0x20) {
++	    // EBU Teletext data, ETSI EN 300 472
++	    cVDRTtxtsubsHookListener::Hook()->PlayerTeletextData(&b[i], l);
++	  }
++	  // continue with deleting the data - otherwise it disturbs DVB replay
++	  int n = l;
++	  for (int j = i; j < Length && n--; j++)
++	    b[j] = 0x00;
++	  break;
++	}
++      default:
++	break;
++      }
++      if (l)
++	i += l - 1; // the loop increments, too!
++    }
++    /*XXX
++      else
++      esyslog("ERROR: broken packet header");
++      XXX*/
++  }
++}
++#endif
++
+ bool cDvbPlayer::NextFile(uchar FileNumber, int FileOffset)
+ {
+   if (FileNumber > 0)
+@@ -524,6 +565,11 @@
+                        StripAudioPackets(p, pc, AudioTrack);
+                     }
+                  }
++#ifdef VDRTTXTSUBSHOOKS
++	   // pick out the teletext packets here
++	      if(p)
++		StripTtxtPackets((uchar *) p, pc);
++#endif
+               if (p) {
+                  int w = PlayVideo(p, pc);
+                  if (w > 0) {
+diff -Nur vdr.orig/Makefile vdr/Makefile
+--- vdr.orig/Makefile	2004-06-26 03:03:47.000000000 +0200
++++ vdr/Makefile	2004-06-26 03:04:12.000000000 +0200
+@@ -37,7 +37,8 @@
+        dvbplayer.o dvbspu.o eit.o eitscan.o font.o i18n.o interface.o keys.o\
+        lirc.o menu.o menuitems.o osdbase.o osd.o player.o plugin.o rcu.o\
+        receiver.o recorder.o recording.o remote.o remux.o ringbuffer.o sources.o\
+-       spu.o status.o svdrp.o thread.o timers.o tools.o transfer.o vdr.o videodir.o
++       spu.o status.o svdrp.o thread.o timers.o tools.o transfer.o vdr.o videodir.o\
++       vdrttxtsubshooks.o
+ 
+ OSDFONT = -adobe-helvetica-medium-r-normal--23-*-100-100-p-*-iso8859-1
+ FIXFONT = -adobe-courier-bold-r-normal--25-*-100-100-m-*-iso8859-1
+diff -Nur vdr.orig/menu.c vdr/menu.c
+--- vdr.orig/menu.c	2004-06-26 03:03:47.000000000 +0200
++++ vdr/menu.c	2004-06-26 03:04:12.000000000 +0200
+@@ -4103,8 +4103,18 @@
+   isyslog("record %s", fileName);
+   if (MakeDirs(fileName, true)) {
+      const cChannel *ch = timer->Channel();
++#ifdef VDRTTXTSUBSHOOKS
++     cTtxtSubsRecorderBase *subsRecorder = cVDRTtxtsubsHookListener::Hook()
++       ->NewTtxtSubsRecorder(device, ch);
++     recorder = new cRecorder(fileName, ch->Ca(), timer->Priority(), ch->Vpid(), ch->Apid1(), ch->Apid2(), ch->Dpid1(), ch->Dpid2(), subsRecorder);
++#else
+      recorder = new cRecorder(fileName, ch->Ca(), timer->Priority(), ch->Vpid(), ch->Apid1(), ch->Apid2(), ch->Dpid1(), ch->Dpid2());
++#endif
+      if (device->AttachReceiver(recorder)) {
++#ifdef VDRTTXTSUBSHOOKS
++       if(subsRecorder)
++	 subsRecorder->DeviceAttach();
++#endif
+         Recording.WriteSummary();
+         cStatus::MsgRecording(device, Recording.Name());
+         if (!Timer && !cReplayControl::LastReplayed()) // an instant recording, maybe from cRecordControls::PauseLiveVideo()
+diff -Nur vdr.orig/menu.h vdr/menu.h
+--- vdr.orig/menu.h	2004-06-26 03:03:47.000000000 +0200
++++ vdr/menu.h	2004-06-26 03:04:12.000000000 +0200
+@@ -14,6 +14,7 @@
+ #include "device.h"
+ #include "osd.h"
+ #include "dvbplayer.h"
++#include "vdrttxtsubshooks.h"
+ #include "recorder.h"
+ #include "recording.h"
+ #include "theme.h"
+diff -Nur vdr.orig/osd.c vdr/osd.c
+--- vdr.orig/osd.c	2004-06-26 03:03:47.000000000 +0200
++++ vdr/osd.c	2004-06-26 03:04:12.000000000 +0200
+@@ -13,6 +13,7 @@
+ #include "i18n.h"
+ #include "status.h"
+ #include "theme.h"
++#include "vdrttxtsubshooks.h"
+ 
+ // --- cOsd ------------------------------------------------------------------
+ 
+@@ -64,6 +65,10 @@
+ 
+ cOsdBase *cOsd::OpenRaw(int x, int y)
+ {
++#ifdef VDRTTXTSUBSHOOKS
++  // OSD_HOOK_2 - Information to Checkpatch.sh
++  cVDRTtxtsubsHookListener::Hook()->HideOSD();
++#endif
+ #ifdef DEBUG_OSD
+   return NULL;
+ #else
+@@ -153,6 +158,9 @@
+   delete osd;
+   osd = NULL;
+ #endif
++#ifdef VDRTTXTSUBSHOOKS
++  cVDRTtxtsubsHookListener::Hook()->ShowOSD();
++#endif
+ }
+ 
+ void cOsd::Clear(void)
+diff -Nur vdr.orig/recorder.c vdr/recorder.c
+--- vdr.orig/recorder.c	2004-06-26 03:03:47.000000000 +0200
++++ vdr/recorder.c	2004-06-26 03:04:12.000000000 +0200
+@@ -10,6 +10,8 @@
+ #include <stdarg.h>
+ #include <stdio.h>
+ #include <unistd.h>
++#include <stdint.h>
++#include "vdrttxtsubshooks.h"
+ #include "recorder.h"
+ 
+ // The size of the array used to buffer video data:
+@@ -23,7 +25,11 @@
+ #define MINFREEDISKSPACE    (512) // MB
+ #define DISKCHECKINTERVAL   100 // seconds
+ 
++#ifdef VDRTTXTSUBSHOOKS
++cRecorder::cRecorder(const char *FileName, int Ca, int Priority, int VPid, int APid1, int APid2, int DPid1, int DPid2, cTtxtSubsRecorderBase *tsr)
++#else
+ cRecorder::cRecorder(const char *FileName, int Ca, int Priority, int VPid, int APid1, int APid2, int DPid1, int DPid2)
++#endif
+ :cReceiver(Ca, Priority, 5, VPid, APid1, APid2, DPid1, DPid2)
+ {
+   ringBuffer = NULL;
+@@ -34,6 +40,9 @@
+   fileSize = 0;
+   active = false;
+   lastDiskSpaceCheck = time(NULL);
++#ifdef VDRTTXTSUBSHOOKS
++  ttxtSubsRecorder = tsr;
++#endif
+ 
+   // Make sure the disk is up and running:
+ 
+@@ -55,6 +64,10 @@
+ cRecorder::~cRecorder()
+ {
+   Detach();
++#ifdef VDRTTXTSUBSHOOKS
++  if(ttxtSubsRecorder)
++    delete ttxtSubsRecorder;
++#endif
+   delete index;
+   delete fileName;
+   delete remux;
+@@ -129,6 +142,19 @@
+                     break;
+                     }
+                  fileSize += Result;
++#ifdef VDRTTXTSUBSHOOKS
++		 // not sure if the pictureType test is needed, but it seems we can get
++		 // incomplete pes packets from remux if we are not getting pictures?
++		 if (ttxtSubsRecorder && pictureType != NO_PICTURE) {
++		    uint8_t *subsp;
++		    size_t len;
++		    if(ttxtSubsRecorder->GetPacket(&subsp, &len)) {
++		       safe_write(recordFile, subsp, len);
++		       fileSize += len;
++		       // fprintf(stderr, "cRecorder::Action: Wrote ttxtsubs data len %d\n", len); // XXX
++		       }
++		    }
++#endif
+                  }
+               else
+                  break;
+diff -Nur vdr.orig/recorder.h vdr/recorder.h
+--- vdr.orig/recorder.h	2004-06-26 00:32:34.000000000 +0200
++++ vdr/recorder.h	2004-06-26 03:04:12.000000000 +0200
+@@ -15,6 +15,7 @@
+ #include "remux.h"
+ #include "ringbuffer.h"
+ #include "thread.h"
++#include "vdrttxtsubshooks.h"
+ 
+ class cRecorder : public cReceiver, cThread {
+ private:
+@@ -29,12 +30,19 @@
+   time_t lastDiskSpaceCheck;
+   bool RunningLowOnDiskSpace(void);
+   bool NextFile(void);
++#ifdef VDRTTXTSUBSHOOKS
++  cTtxtSubsRecorderBase *ttxtSubsRecorder;
++#endif
+ protected:
+   virtual void Activate(bool On);
+   virtual void Receive(uchar *Data, int Length);
+   virtual void Action(void);
+ public:
++#ifdef VDRTTXTSUBSHOOKS
++  cRecorder(const char *FileName, int Ca, int Priority, int VPid, int APid1, int APid2, int DPid1, int DPid2, cTtxtSubsRecorderBase *tsr);
++#else
+   cRecorder(const char *FileName, int Ca, int Priority, int VPid, int APid1, int APid2, int DPid1, int DPid2);
++#endif
+                // Creates a new recorder that requires conditional access Ca, has
+                // the given Priority and will record the given PIDs into the file FileName.
+   virtual ~cRecorder();
+diff -Nur vdr.orig/vdrttxtsubshooks.c vdr/vdrttxtsubshooks.c
+--- vdr.orig/vdrttxtsubshooks.c	1970-01-01 01:00:00.000000000 +0100
++++ vdr/vdrttxtsubshooks.c	2004-03-01 23:53:17.000000000 +0100
+@@ -0,0 +1,44 @@
++
++#include <stdlib.h>
++#include <stdio.h>
++#include <stdint.h>
++
++#include "vdrttxtsubshooks.h"
++
++// XXX Really should be a list...
++static cVDRTtxtsubsHookListener *gListener;
++
++// ------ class cVDRTtxtsubsHookProxy ------
++
++class cVDRTtxtsubsHookProxy : public cVDRTtxtsubsHookListener
++{
++ public:
++  virtual void HideOSD(void) { if(gListener) gListener->HideOSD(); };
++  virtual void ShowOSD(void) { if(gListener) gListener->ShowOSD(); };
++  virtual void PlayerTeletextData(uint8_t *p, int length)
++    { if(gListener) gListener->PlayerTeletextData(p, length); };
++  virtual cTtxtSubsRecorderBase *NewTtxtSubsRecorder(cDevice *dev, const cChannel *ch)
++    { if(gListener) return gListener->NewTtxtSubsRecorder(dev, ch); else return NULL; };
++};
++
++
++// ------ class cVDRTtxtsubsHookListener ------
++
++cVDRTtxtsubsHookListener::~cVDRTtxtsubsHookListener()
++{
++  gListener = 0;
++}
++
++void cVDRTtxtsubsHookListener::HookAttach(void)
++{
++  gListener = this;
++  //printf("cVDRTtxtsubsHookListener::HookAttach\n");
++}
++
++static cVDRTtxtsubsHookProxy gProxy;
++
++cVDRTtxtsubsHookListener *cVDRTtxtsubsHookListener::Hook(void)
++{
++  return &gProxy;
++}
++
+diff -Nur vdr.orig/vdrttxtsubshooks.h vdr/vdrttxtsubshooks.h
+--- vdr.orig/vdrttxtsubshooks.h	1970-01-01 01:00:00.000000000 +0100
++++ vdr/vdrttxtsubshooks.h	2004-03-01 23:53:17.000000000 +0100
+@@ -0,0 +1,36 @@
++
++#ifndef __VDRTTXTSUBSHOOKS_H
++#define __VDRTTXTSUBSHOOKS_H
++
++class cDevice;
++class cChannel;
++
++#define VDRTTXTSUBSHOOKS
++
++class cTtxtSubsRecorderBase {
++ public:
++  virtual ~cTtxtSubsRecorderBase() {};
++
++  // returns a PES packet if there is data to add to the recording
++  virtual uint8_t *GetPacket(uint8_t **buf, size_t *len) { return NULL; };
++  virtual void DeviceAttach(void) {};
++};
++
++class cVDRTtxtsubsHookListener {
++ public:
++  cVDRTtxtsubsHookListener(void) {};
++  virtual ~cVDRTtxtsubsHookListener();
++
++  void HookAttach(void);
++  
++  virtual void HideOSD(void) {};
++  virtual void ShowOSD(void) {};
++  virtual void PlayerTeletextData(uint8_t *p, int length) {};
++  virtual cTtxtSubsRecorderBase *NewTtxtSubsRecorder(cDevice *dev, const cChannel *ch)
++    { return NULL; };
++
++  // used by VDR to call hook listeners
++  static cVDRTtxtsubsHookListener *Hook(void);
++};
++
++#endif

Added: vdr/vdr/trunk/debian/patches/opt-22_8bitcolor.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-22_8bitcolor.dpatch	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/patches/opt-22_8bitcolor.dpatch	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,96 @@
+#!/bin/sh /usr/share/dpatch/dpatch-run
+
+## 8bitcolor by Andreas Regel <andreas.regel@gmx.de>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Fixes problems with 8 bit colors by using unsigned char instead of char.
+## DP: For 256 color support, you will also need ElchiAIO4d.
+
+@DPATCH@
+diff -Nur vdr.orig/osdbase.c vdr/osdbase.c
+--- vdr.orig/osdbase.c	2004-03-15 22:48:57.000000000 +0100
++++ vdr/osdbase.c	2004-03-15 22:48:57.000000000 +0100
+@@ -185,7 +185,7 @@
+   fontType = fontOsd;
+   font = NULL;
+   if (width > 0 && height > 0) {
+-     bitmap = MALLOC(char, width * height);
++     bitmap = MALLOC(unsigned char, width * height);
+      if (bitmap) {
+         Clean();
+         memset(bitmap, 0x00, width * height);
+@@ -257,7 +257,7 @@
+   dirtyY2 = -1;
+ }
+ 
+-void cBitmap::SetIndex(int x, int y, char Index)
++void cBitmap::SetIndex(int x, int y, unsigned char Index)
+ {
+   if (bitmap) {
+      if (0 <= x && x < width && 0 <= y && y < height) {
+@@ -338,7 +338,7 @@
+      Fill(0, 0, width - 1, height - 1, clrBackground);
+ }
+ 
+-const char *cBitmap::Data(int x, int y)
++const unsigned char *cBitmap::Data(int x, int y)
+ {
+   return &bitmap[y * width + x];
+ }
+@@ -476,7 +476,7 @@
+            ABORT;
+            }
+         free(bitmap);
+-        bitmap = MALLOC(char, height * width);
++        bitmap = MALLOC(unsigned char, height * width);
+         for (int y = 0; y < height; ++y)
+             for (int x = 0; x < width; ++x) {
+                 eDvbColor col;
+@@ -562,7 +562,7 @@
+   cBitmap::Text(x, y, s, ColorFg, ColorBg);
+ }
+ 
+-const char *cWindow::Data(int x, int y)
++const unsigned char *cWindow::Data(int x, int y)
+ {
+   return cBitmap::Data(x, y);
+ }
+diff -Nur vdr.orig/osdbase.h vdr/osdbase.h
+--- vdr.orig/osdbase.h	2004-03-15 22:48:57.000000000 +0100
++++ vdr/osdbase.h	2004-03-15 22:49:54.000000000 +0100
+@@ -101,7 +101,7 @@
+ private:
+   cFont *font;
+   eDvbFont fontType;
+-  char *bitmap;
++  unsigned char *bitmap;
+   bool clearWithBackground;
+ protected:
+   int width, height;
+@@ -112,7 +112,7 @@
+   bool ClearWithBackground(void) { return clearWithBackground; }
+   eDvbFont SetFont(eDvbFont Font);
+   bool Dirty(int &x1, int &y1, int &x2, int &y2);
+-  void SetIndex(int x, int y, char Index);
++  void SetIndex(int x, int y, unsigned char Index);
+   void SetPixel(int x, int y, eDvbColor Color);
+   void SetBitmap(int x, int y, const cBitmap &Bitmap);
+   int Width(void) { return width; }
+@@ -123,7 +123,7 @@
+   void Fill(int x1, int y1, int x2, int y2, eDvbColor Color);
+   void Clean(void);
+   void Clear(void);
+-  const char *Data(int x, int y);
++  const unsigned char *Data(int x, int y);
+   bool LoadXpm(const char *FileName, eDvbColor NoneColor = clrTransparent);
+   bool LoadLogo(const char *FileName);
+   };
+@@ -150,7 +150,7 @@
+   void Fill(int x1, int y1, int x2, int y2, eDvbColor Color);
+   void SetBitmap(int x, int y, const cBitmap &Bitmap);
+   void Text(int x, int y, const char *s, eDvbColor ColorFg = clrWhite, eDvbColor ColorBg = clrBackground);
+-  const char *Data(int x, int y);
++  const unsigned char *Data(int x, int y);
+   };
+ 
+ typedef int tWindowHandle;

Added: vdr/vdr/trunk/debian/patches/opt-23_osdpip-0.0.3.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-23_osdpip-0.0.3.dpatch	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/patches/opt-23_osdpip-0.0.3.dpatch	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,82 @@
+#!/bin/sh /usr/share/dpatch/dpatch-run
+
+## osdpip-patch by Sascha Volkenandt <sascha@akv-soft.de>
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: This patch supports the OSDPIP-PlugIn
+## DP: (can not be used with autopid)
+
+@DPATCH@
+diff -Nur vdr.orig/osdbase.c vdr/osdbase.c
+--- vdr.orig/osdbase.c	2004-03-15 22:56:29.000000000 +0100
++++ vdr/osdbase.c	2004-03-15 22:56:29.000000000 +0100
+@@ -173,6 +173,12 @@
+       }
+ }
+ 
++void cPalette::Replace(const cPalette &Palette)
++{
++  for (int i = 0; i < Palette.numColors; i++)
++      SetColor(i, Palette.color[i]);
++}
++
+ // --- cBitmap ---------------------------------------------------------------
+ 
+ cBitmap::cBitmap(int Width, int Height, int Bpp, bool ClearWithBackground)
+@@ -289,6 +295,17 @@
+      }
+ }
+ 
++void cBitmap::SetBitmap256(int x, int y, const cBitmap &Bitmap)
++{
++  if (bitmap && Bitmap.bitmap) {
++     Replace(Bitmap);
++     for (int ix = 0; ix < Bitmap.width; ix++) {
++         for (int iy = 0; iy < Bitmap.height; iy++)
++             SetIndex(x + ix, y + iy, Bitmap.bitmap[Bitmap.width * iy + ix]);
++         }
++     }
++}
++
+ int cBitmap::Width(unsigned char c)
+ {
+   return font ? font->Width(c) : -1;
+@@ -550,7 +567,10 @@
+      x -= x0;
+      y -= y0;
+      }
+-  cBitmap::SetBitmap(x, y, Bitmap);
++  if (bpp == 8)
++     cBitmap::SetBitmap256(x, y, Bitmap);
++  else
++     cBitmap::SetBitmap(x, y, Bitmap);
+ }
+ 
+ void cWindow::Text(int x, int y, const char *s, eDvbColor ColorFg, eDvbColor ColorBg)
+diff -Nur vdr.orig/osdbase.h vdr/osdbase.h
+--- vdr.orig/osdbase.h	2004-03-15 22:56:29.000000000 +0100
++++ vdr/osdbase.h	2004-03-15 22:56:53.000000000 +0100
+@@ -14,6 +14,7 @@
+ #include "font.h"
+ 
+ #define MAXNUMCOLORS 256
++#define VDR_OSDPIP_PATCHED
+ 
+ enum eDvbColor {
+ #ifdef DEBUG_OSD
+@@ -95,6 +96,7 @@
+         // stored yet, NumColors will be set to 0 and the function will
+         // return NULL.
+   void Take(const cPalette &Palette, tIndexes *Indexes = NULL);
++  void Replace(const cPalette &Palette);
+   };
+ 
+ class cBitmap : public cPalette {
+@@ -115,6 +117,7 @@
+   void SetIndex(int x, int y, unsigned char Index);
+   void SetPixel(int x, int y, eDvbColor Color);
+   void SetBitmap(int x, int y, const cBitmap &Bitmap);
++  void SetBitmap256(int x, int y, const cBitmap &Bitmap);
+   int Width(void) { return width; }
+   int Width(unsigned char c);
+   int Width(const char *s);

Added: vdr/vdr/trunk/debian/patches/opt-24_jumpplay-0.4.dpatch
===================================================================
--- vdr/vdr/trunk/debian/patches/opt-24_jumpplay-0.4.dpatch	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/patches/opt-24_jumpplay-0.4.dpatch	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,252 @@
+#!/bin/sh /usr/share/dpatch/dpatch-run
+
+## jumpplay patch (version 0.4) by Thomas Günther <tom@toms-cafe.de>
+##
+## * based on jumpplay-0.0 by Torsten Kunkel <vdr@tkunkel.de>
+## * 0.1:
+##   - set play mode after jump
+##   - jump only on even marks
+##   - fixed removing of marks
+## * 0.2:
+##   - fuzzy mark detection (until 3 seconds after mark)
+##   - fixed double jump
+##   - jump without progressbar
+## * 0.3:
+##   - fixed end of playing at last mark
+##   - fixed display frames
+## * 0.4:
+##   - don't play after jump to end
+##   - don't prevent jumping after hide or show
+##
+## All lines beginning with `## DP:' are a description of the patch.
+## DP: Patch to automatically jump over cutting marks,
+
+@DPATCH@
+diff -Naur old/config.c new/config.c
+--- old/config.c	Fri Oct 17 16:11:27 2003
++++ new/config.c	Sun Jul 11 14:20:51 2004
+@@ -284,6 +284,8 @@
+   MultiSpeedMode = 0;
+   ShowReplayMode = 0;
+   ResumeID = 0;
++  JumpPlay=0;
++  PlayJump=0;
+   memset(CaCaps, sizeof(CaCaps), 0);
+   CurrentChannel = -1;
+   CurrentVolume = MAXVOLUME;
+@@ -436,6 +438,8 @@
+   else if (!strcasecmp(Name, "MultiSpeedMode"))      MultiSpeedMode     = atoi(Value);
+   else if (!strcasecmp(Name, "ShowReplayMode"))      ShowReplayMode     = 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);
+   else if (!strcasecmp(Name, "CaCaps"))              return ParseCaCaps(Value);
+   else if (!strcasecmp(Name, "CurrentChannel"))      CurrentChannel     = atoi(Value);
+   else if (!strcasecmp(Name, "CurrentVolume"))       CurrentVolume      = atoi(Value);
+@@ -486,6 +490,8 @@
+   Store("MultiSpeedMode",     MultiSpeedMode);
+   Store("ShowReplayMode",     ShowReplayMode);
+   Store("ResumeID",           ResumeID);
++  Store("JumpPlay",           JumpPlay);
++  Store("PlayJump",           PlayJump);
+   StoreCaCaps("CaCaps");
+   Store("CurrentChannel",     CurrentChannel);
+   Store("CurrentVolume",      CurrentVolume);
+diff -Naur old/config.h new/config.h
+--- old/config.h	Fri Nov 14 14:29:13 2003
++++ new/config.h	Sun Jul 11 14:21:10 2004
+@@ -237,6 +237,8 @@
+   int MultiSpeedMode;
+   int ShowReplayMode;
+   int ResumeID;
++  int JumpPlay;
++  int PlayJump;
+   int CaCaps[MAXDEVICES][MAXCACAPS];
+   int CurrentChannel;
+   int CurrentVolume;
+diff -Naur old/i18n.c new/i18n.c
+--- old/i18n.c	Thu Sep 11 15:51:56 2003
++++ new/i18n.c	Sun Jul 11 14:25:31 2004
+@@ -2612,6 +2612,57 @@
+     "Lejátszás ID",
+     "ID de Continuar",
+   },
++  { "Setup.Replay$Play&Jump",
++    "Sprung bei Schnittmarke",
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++  },
++  { "Setup.Replay$Jump&Play",
++    "Play nach Sprung",
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++  },
++  { "progressbar only",
++    "nur bei Anzeige",
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++    "",// TODO
++  },
+   { "Setup.Miscellaneous$Min. event timeout (min)",
+     "Mindest Event Pause (min)",
+     "Najmanjsi cas dogodka (min)",
+diff -Naur old/menu.c new/menu.c
+--- old/menu.c	Fri Oct  3 16:36:20 2003
++++ new/menu.c	Sun Jul 11 14:31:59 2004
+@@ -2232,16 +2232,24 @@
+ // --- cMenuSetupReplay ------------------------------------------------------
+ 
+ class cMenuSetupReplay : public cMenuSetupBase {
++private:
++  const char *playJumpTexts[3];
+ public:
+   cMenuSetupReplay(void);
+   };
+ 
+ cMenuSetupReplay::cMenuSetupReplay(void)
+ {
++  playJumpTexts[0] = tr("no");
++  playJumpTexts[1] = tr("yes");
++  playJumpTexts[2] = tr("progressbar only");
++
+   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 cMenuEditIntItem(tr("Setup.Replay$Resume ID"), &data.ResumeID, 0, 99));
++  Add(new cMenuEditBoolItem(tr("Setup.Replay$Jump&Play"), &data.JumpPlay));
++  Add(new cMenuEditStraItem(tr("Setup.Replay$Play&Jump"), &data.PlayJump, 3, playJumpTexts));
+ }
+ 
+ // --- cMenuSetupMisc --------------------------------------------------------
+@@ -3283,6 +3291,7 @@
+ :cDvbPlayerControl(fileName)
+ {
+   visible = modeOnly = shown = displayFrames = false;
++  playjump = true;
+   lastCurrent = lastTotal = -1;
+   timeoutShow = 0;
+   timeSearchActive = false;
+@@ -3534,8 +3543,12 @@
+         ShowTimed(2);
+         bool Play, Forward;
+         int Speed;
+-        if (GetReplayMode(Play, Forward, Speed) && !Play)
+-           Goto(Current, true);
++        if (GetReplayMode(Play, Forward, Speed) &&
++            (!Play || (Setup.PlayJump && Forward && Speed == -1))) {
++           Goto(Current, !Play);
++           if (!Play)
++              displayFrames = true;
++           }
+         }
+      marks.Save();
+      }
+@@ -3547,10 +3560,20 @@
+      int Current, Total;
+      if (GetIndex(Current, Total)) {
+         cMark *m = Forward ? marks.GetNext(Current) : marks.GetPrev(Current);
+-        if (m)
+-           Goto(m->position, true);
++        if (m) {
++           bool Play2, Forward2;
++           int Speed;
++           if (Setup.JumpPlay && GetReplayMode(Play2, Forward2, Speed) &&
++               Play2 && Forward && m->position < Total - 3 * FRAMESPERSEC) {
++              Goto(m->position);
++              Play();
++              }
++           else {
++              Goto(m->position, true);
++              displayFrames = true;
++              }
++           }
+         }
+-     displayFrames = true;
+      }
+ }
+ 
+@@ -3628,6 +3651,30 @@
+      else
+         shown = ShowProgress(!shown) || shown;
+      }
++  if (marks.Count() && Setup.PlayJump &&
++      (Setup.PlayJump != 2 || (visible && !modeOnly))) {
++     int Current, Total, Speed;
++     bool Play, Forward;
++     if (GetIndex(Current, Total) && Total > 0 &&
++         GetReplayMode(Play, Forward, Speed) && Play && Forward && Speed == -1) {
++        cMark *m = marks.GetPrev(Current + 1);
++        if (m && m->Index() & 1 && Current - m->position < 3 * FRAMESPERSEC) {
++           if (playjump) {
++              if (marks.GetNext(Current))
++                 Goto(marks.GetNext(Current)->position);
++              else {
++                 Hide();
++                 Stop();
++                 return osEnd;
++                 }
++              }
++           }
++        else
++           playjump = true;
++        }
++     }
++  bool old_playjump = playjump;
++  playjump = false;
+   bool DisplayedFrames = displayFrames;
+   displayFrames = false;
+   if (timeSearchActive && Key != kNone) {
+@@ -3676,6 +3723,7 @@
+         case kEditCut:         EditCut(); break;
+         case kEditTest:        EditTest(); break;
+         default: {
++          playjump = old_playjump;
+           displayFrames = DisplayedFrames;
+           switch (Key) {
+             // Menu control:
+diff -Naur old/menu.h new/menu.h
+--- old/menu.h	Sun Aug  3 11:37:18 2003
++++ new/menu.h	Sun Jul 11 14:17:37 2004
+@@ -149,6 +149,7 @@
+ private:
+   cMarks marks;
+   bool visible, modeOnly, shown, displayFrames;
++  bool playjump;
+   int lastCurrent, lastTotal;
+   time_t timeoutShow;
+   bool timeSearchActive, timeSearchHide;  

Added: vdr/vdr/trunk/debian/patchlevel.sh
===================================================================
--- vdr/vdr/trunk/debian/patchlevel.sh	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/patchlevel.sh	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,40 @@
+#!/bin/sh
+set -e
+case "$*" in
+    "make")
+        # scan patches in 00list and write to patchlevel file
+        echo -n "Patches: "
+        for p in $(grep "^opt-[0-9][0-9]_" debian/patches/00list | cut -d"_" -f2-); do
+            echo -n "$p "
+            PATCHES="$PATCHES $p"
+        done
+        echo
+        echo "patchlevel=$PATCHES" > patchlevel
+        ;;
+    "clean")
+        # remove patchlevel file
+        rm -f patchlevel
+        ;;
+    "subst")
+        # read patchlevel file and write contents to *.substvars
+        if [ -r patchlevel ]; then
+            # main vdr package
+            PATCHES=$(cat patchlevel)
+        else
+            # vdr-plugin package
+            PATCHES=$(cat /usr/include/vdr/patchlevel)
+        fi
+        # write *.substvars only if patchlevel not empty
+	if [ "$PATCHES" != "patchlevel=" ]; then
+            # scan control for packages
+            for p in $(dh_listpackages); do
+                echo "$PATCHES" >> debian/$p.substvars
+            done
+        fi
+        ;;
+    *)
+        echo >&2 "$0: script expects make|clean|subst as argument"
+        exit 1
+        ;;
+esac
+exit 0

Added: vdr/vdr/trunk/debian/plugin-loader.sh
===================================================================
--- vdr/vdr/trunk/debian/plugin-loader.sh	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/plugin-loader.sh	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,110 @@
+#
+# This file is called by /etc/init.d/vdr
+#
+
+getplugins ()
+{
+    local plugin_order
+    local installed_plugins
+    local ordered_plugins
+    local plugin
+    local i
+    local arguments
+    local packages
+    local patchelvels
+    local leftout
+    local leftout2
+    local version
+
+    version=`/usr/bin/vdr -u $USER -g $GROUP -V -L/usr/bin/vdr 2>/dev/null | sed -e 's/.*(\(.*\)).*/\1/'`
+    test "$version" || version="unknown version"
+ 
+    PLUGINS=""
+ 
+    echo -ne "\nSearching for plugins (VDR $version):"
+ 
+    # find installed plugins
+    installed_plugins=( `find $PLUGIN_DIR -maxdepth 1 -name "$PLUGIN_PREFIX*.so.$version" -printf "%f " | sed "s/$PLUGIN_PREFIX\([^\.]\+\)\.so\.$version/\1/g"` )
+
+    if [ "$PLUGIN_CHECK_PATCHLEVEL" == "yes" ]; then
+        # extract patchlevel info
+        packages=( "vdr" "${installed_plugins[@]/#/vdr-plugin-}" )
+        eval "patchlevels=( "`LANG=en;dpkg -s ${packages[@]} 2>&1 | awk -F ':' '/^Package: / {p=$2} /^Package.*is not installed/ {print "\"\""} (/[pP]atchlevel:/ || /^$/) && p!="" {print "\""$2"\"";p=""}'`" )"
+
+        # move plugins with incompatible patchlevel to $leftout
+        for (( i=1 ; i<${#patchlevels[@]} ; i++ )); do
+            if [ "${patchlevels[0]}" != "${patchlevels[$i]}" ]; then
+                leftout="${leftout} ${installed_plugins[$((i-1))]}"
+                unset installed_plugins[$((i-1))]
+            fi
+        done
+
+        # cleanup the installed_plugins array
+        installed_plugins=( "${installed_plugins[@]}" )
+    fi
+
+    if [ "$PLUGIN_CHECK_STARTABLE" == "yes" ]; then
+
+        # move not startable plugins to $leftout2
+        for (( i=${#installed_plugins[@]}, i-- ; i >= 0 ; i-- )); do
+            if ! /usr/bin/vdr -u $USER -g $GROUP -V -L $PLUGIN_DIR -P ${installed_plugins[$i]} \
+                2>/dev/null | grep -q "^${installed_plugins[$i]} "; then
+                leftout2="${leftout2} ${installed_plugins[$i]}"
+                unset installed_plugins[$i]
+            fi
+        done
+
+        # cleanup the installed_plugins array
+        installed_plugins=( "${installed_plugins[@]}" )
+    fi
+
+    if [ -r "$PLUGIN_CFG_DIR/order.conf" ]; then
+        # load plugin order
+        plugin_order=( `cat $PLUGIN_CFG_DIR/order.conf | sed "s/#.*$//"` )
+
+        # move ordered plugins to list of ordered plugins
+        for plugin in ${plugin_order[@]}; do
+            for (( i=0 ; i<${#installed_plugins[@]} ; i++ )); do
+                if [ "$plugin" == "-${installed_plugins[$i]}" ]; then
+                    unset installed_plugins[$i]
+                    installed_plugins=( "${installed_plugins[@]}" )
+                    break
+                fi
+                if [ "$plugin" == "${installed_plugins[$i]}" ]; then
+                    ordered_plugins=( "${ordered_plugins[@]}" "$plugin" )
+                    unset installed_plugins[$i]
+                    installed_plugins=( "${installed_plugins[@]}" )
+                    break
+                fi
+            done
+        done
+    fi
+
+    # append unordered to ordered plugins
+    ordered_plugins=( "${ordered_plugins[@]}" "${installed_plugins[@]}" )
+
+    # add the command line arguments for each plugin
+    for plugin in ${ordered_plugins[@]}; do
+        echo -n " $plugin"
+        if [ -r "$PLUGIN_CFG_DIR/plugin.$plugin.conf" ] ; then
+            arguments=( `cat $PLUGIN_CFG_DIR/plugin.$plugin.conf | sed "s/#.*$//"` )
+            PLUGINS="$PLUGINS -P \"$plugin ${arguments[*]}\""
+        else
+            PLUGINS="$PLUGINS -P $plugin"
+        fi
+    done
+
+    # warn about incompatible plugins
+    if [ "$leftout" != "" ]; then
+        echo -ne "\nWARNING: The following plugins have been left out due to"\
+             "possible binary incompatibility: "
+        echo -n $leftout
+    fi
+
+    # warn about not startable plugins
+    if [ "$leftout2" != "" ]; then
+        echo -ne "\nWARNING: The following plugins have been left out due to"\
+             "really binary incompatibility: "
+        echo -n $leftout2
+    fi
+}

Added: vdr/vdr/trunk/debian/plugin-template/README.Debian
===================================================================
--- vdr/vdr/trunk/debian/plugin-template/README.Debian	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/plugin-template/README.Debian	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,6 @@
+vdr-plugin-#PACKAGE# for Debian
+-----------#DASHLINE#
+
+<possible notes regarding this package - if none, delete this file>
+
+ -- #USERNAME# <#EMAIL#>, #DATE#

Added: vdr/vdr/trunk/debian/plugin-template/changelog
===================================================================
--- vdr/vdr/trunk/debian/plugin-template/changelog	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/plugin-template/changelog	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,6 @@
+vdr-plugin-#PACKAGE# (#VERSION#-1) unstable; urgency=low
+
+  * Initial Release.
+
+ -- #USERNAME# <#EMAIL#>  #DATE#
+

Added: vdr/vdr/trunk/debian/plugin-template/compat
===================================================================
--- vdr/vdr/trunk/debian/plugin-template/compat	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/plugin-template/compat	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1 @@
+4

Added: vdr/vdr/trunk/debian/plugin-template/control
===================================================================
--- vdr/vdr/trunk/debian/plugin-template/control	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/plugin-template/control	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,13 @@
+Source: vdr-plugin-#PACKAGE#
+Section: misc
+Priority: extra
+Maintainer: #USERNAME# <#EMAIL#>
+Build-Depends: debhelper (>> 4.1.16), vdr-dev (>= #VDRVERSION#)
+Standards-Version: #POLICY#
+
+Package: vdr-plugin-#PACKAGE#
+Architecture: any
+Depends: ${shlibs:Depends}, vdr (>= #VDRVERSION#)
+Description: <insert up to 60 chars description>
+ <insert long description, indented with spaces>
+XB-VDR-Patchlevel: ${patchlevel}

Added: vdr/vdr/trunk/debian/plugin-template/copyright
===================================================================
--- vdr/vdr/trunk/debian/plugin-template/copyright	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/plugin-template/copyright	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,11 @@
+This package was debianized by #USERNAME# <#EMAIL#> on
+#DATE#.
+
+It was downloaded from <fill in ftp site>
+
+Upstream Author: <fill in name and email>
+
+Copyright:
+
+It may be redistributed under the terms of the GNU GPL, Version 2
+found on Debian systems in the file /usr/share/common-licenses/GPL .

Added: vdr/vdr/trunk/debian/plugin-template/docs
===================================================================
--- vdr/vdr/trunk/debian/plugin-template/docs	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/plugin-template/docs	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1 @@
+README

Added: vdr/vdr/trunk/debian/plugin-template/install
===================================================================
--- vdr/vdr/trunk/debian/plugin-template/install	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/plugin-template/install	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1 @@
+libvdr-#PACKAGE#.so.*    usr/lib/vdr/plugins/

Added: vdr/vdr/trunk/debian/plugin-template/links.ex
===================================================================
--- vdr/vdr/trunk/debian/plugin-template/links.ex	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/plugin-template/links.ex	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1 @@
+usr/share/vdr-plugin-#PACKAGE#/#PACKAGE#    /var/lib/vdr/plugins/#PACKAGE#

Added: vdr/vdr/trunk/debian/plugin-template/postinst.ex
===================================================================
--- vdr/vdr/trunk/debian/plugin-template/postinst.ex	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/plugin-template/postinst.ex	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,42 @@
+#! /bin/sh
+# postinst script for vdr-plugin-#PACKAGE#
+#
+# see: dh_installdeb(1)
+
+set -e
+
+# summary of how this script can be called:
+#        * <postinst> `configure' <most-recently-configured-version>
+#        * <old-postinst> `abort-upgrade' <new version>
+#        * <conflictor's-postinst> `abort-remove' `in-favour' <package>
+#          <new-version>
+#        * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
+#          <failed-install-package> <version> `removing'
+#          <conflicting-package> <version>
+# for details, see http://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+#
+
+case "$1" in
+    configure)
+
+    ;;
+
+    abort-upgrade|abort-remove|abort-deconfigure)
+
+    ;;
+
+    *)
+        echo "postinst called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
+
+

Added: vdr/vdr/trunk/debian/plugin-template/postrm.ex
===================================================================
--- vdr/vdr/trunk/debian/plugin-template/postrm.ex	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/plugin-template/postrm.ex	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,38 @@
+#! /bin/sh
+# postrm script for vdr-plugin-#PACKAGE#
+#
+# see: dh_installdeb(1)
+
+set -e
+
+# summary of how this script can be called:
+#        * <postrm> `remove'
+#        * <postrm> `purge'
+#        * <old-postrm> `upgrade' <new-version>
+#        * <new-postrm> `failed-upgrade' <old-version>
+#        * <new-postrm> `abort-install'
+#        * <new-postrm> `abort-install' <old-version>
+#        * <new-postrm> `abort-upgrade' <old-version>
+#        * <disappearer's-postrm> `disappear' <r>overwrit>r> <new-version>
+# for details, see http://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+
+
+case "$1" in
+       purge|remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
+
+
+        ;;
+
+    *)
+        echo "postrm called with unknown argument \`$1'" >&2
+        exit 1
+
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0

Added: vdr/vdr/trunk/debian/plugin-template/preinst.ex
===================================================================
--- vdr/vdr/trunk/debian/plugin-template/preinst.ex	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/plugin-template/preinst.ex	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,41 @@
+#! /bin/sh
+# preinst script for vdr-plugin-#PACKAGE#
+#
+# see: dh_installdeb(1)
+
+set -e
+
+# summary of how this script can be called:
+#        * <new-preinst> `install'
+#        * <new-preinst> `install' <old-version>
+#        * <new-preinst> `upgrade' <old-version>
+#        * <old-preinst> `abort-upgrade' <new-version>
+#
+# for details, see http://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+
+
+case "$1" in
+    install|upgrade)
+#        if [ "$1" = "upgrade" ]
+#        then
+#        fi
+    ;;
+
+    abort-upgrade)
+    ;;
+
+    *)
+        echo "preinst called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
+
+

Added: vdr/vdr/trunk/debian/plugin-template/prerm.ex
===================================================================
--- vdr/vdr/trunk/debian/plugin-template/prerm.ex	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/plugin-template/prerm.ex	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,39 @@
+#! /bin/sh
+# prerm script for vdr-plugin-#PACKAGE#
+#
+# see: dh_installdeb(1)
+
+set -e
+
+# summary of how this script can be called:
+#        * <prerm> `remove'
+#        * <old-prerm> `upgrade' <new-version>
+#        * <new-prerm> `failed-upgrade' <old-version>
+#        * <conflictor's-prerm> `remove' `in-favour' <package> <new-version>
+#        * <deconfigured's-prerm> `deconfigure' `in-favour'
+#          <package-being-installed> <version> `removing'
+#          <conflicting-package> <version>
+# for details, see http://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+
+
+case "$1" in
+    remove|upgrade|deconfigure)
+#       install-info --quiet --remove /usr/info/vdr-plugin-#PACKAGE#.info.gz
+        ;;
+    failed-upgrade)
+        ;;
+    *)
+        echo "prerm called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0
+
+

Added: vdr/vdr/trunk/debian/plugin-template/rules
===================================================================
--- vdr/vdr/trunk/debian/plugin-template/rules	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/plugin-template/rules	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,96 @@
+#!/usr/bin/make -f
+# Sample debian/rules that uses debhelper.
+# GNU copyright 1997 to 1999 by Joey Hess.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
+	CFLAGS += -g
+endif
+ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
+	INSTALL_PROGRAM += -s
+endif
+
+# Set VDR=vdr or VDR=vdrdevel - vdrdevel always uses dpatch
+VDR=$(shell dh_listpackages | grep "^vdr.*-" | head -n 1 | sed -e "s/-.*//")
+ifeq ($(VDR), vdrdevel)
+    DPATCH=yes
+endif
+
+# To use dpatch uncomment the following line and set Build-Depends to dpatch
+# DPATCH=yes
+
+ifdef DPATCH
+include /usr/share/dpatch/dpatch.make
+else
+patch:
+patch-stamp:
+unpatch:
+endif
+
+configure: configure-stamp
+configure-stamp: patch-stamp
+	dh_testdir
+	touch configure-stamp
+
+build: build-stamp
+build-stamp: configure-stamp
+	dh_testdir
+	$(MAKE) all DVBDIR=/usr VDRDIR=/usr/include/$(VDR) LIBDIR=.
+	touch build-stamp
+
+clean: clean-patched unpatch
+clean-patched:
+	dh_testdir
+	dh_testroot
+	rm -f build-stamp configure-stamp
+	$(MAKE) -o .dependencies clean
+	rm -f libvdr-*.so.*
+	dh_clean
+
+install: build
+	dh_testdir
+	dh_testroot
+	dh_clean -k
+	dh_installdirs
+	dh_install
+
+# Build architecture-independent files here.
+binary-indep: build install
+# We have nothing to do by default.
+
+# Build architecture-dependent files here.
+binary-arch: build install
+	dh_testdir
+	dh_testroot
+#	dh_installdebconf
+	dh_installdocs
+	dh_installexamples
+#	dh_installmenu
+#	dh_installlogrotate
+#	dh_installemacsen
+#	dh_installpam
+#	dh_installmime
+#	dh_installinit
+#	dh_installcron
+#	dh_installman
+#	dh_installinfo
+#	dh_undocumented
+	dh_installchangelogs HISTORY
+	dh_link
+	dh_strip
+	dh_compress
+	dh_fixperms
+#	dh_makeshlibs
+	dh_installdeb
+#	dh_perl
+	dh_shlibdeps
+	/usr/lib/$(VDR)-dev/patchlevel.sh subst
+	dh_gencontrol
+	dh_md5sums
+	dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install configure \
+        clean-patched patch unpatch

Added: vdr/vdr/trunk/debian/plugin-template/watch.ex
===================================================================
--- vdr/vdr/trunk/debian/plugin-template/watch.ex	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/plugin-template/watch.ex	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,6 @@
+# Example watch control file for uscan
+# Rename this file to "watch" and then you can run the "uscan" command
+# to check for upstream updates and more.
+# Site		Directory		Pattern			Version	Script
+version=2
+sunsite.unc.edu	/pub/Linux/Incoming	#PACKAGE#-(.*)\.tar\.gz	debian	uupdate

Added: vdr/vdr/trunk/debian/po/POTFILES.in
===================================================================
--- vdr/vdr/trunk/debian/po/POTFILES.in	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/po/POTFILES.in	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1 @@
+[type: gettext/rfc822deb] vdr.templates

Added: vdr/vdr/trunk/debian/po/cs.po
===================================================================
--- vdr/vdr/trunk/debian/po/cs.po	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/po/cs.po	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,85 @@
+#
+#    Translators, if you are not familiar with the PO format, gettext
+#    documentation is worth reading, especially sections dedicated to
+#    this format, e.g. by running:
+#         info -n '(gettext)PO Files'
+#         info -n '(gettext)Header Entry'
+#
+#    Some information specific to po-debconf are available at
+#            /usr/share/doc/po-debconf/README-trans
+#         or http://www.debian.org/intl/l10n/po-debconf/README-trans
+#
+#    Developers do not need to manually edit POT or PO files.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: vdr\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2004-11-14 13:09+0100\n"
+"PO-Revision-Date: 2004-05-15 11:10+0200\n"
+"Last-Translator: Miroslav Kure <kurem@debian.cz>\n"
+"Language-Team: Czech <provoz@debian.cz>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-2\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: note
+#. Description
+#: ../vdr.templates:3
+msgid "VDR needs DVB kernel modules"
+msgstr "VDR vy¾aduje jaderné moduly k DVB"
+
+#. Type: note
+#. Description
+#: ../vdr.templates:3
+msgid ""
+"VDR needs DVB (Digital Video Broadcasting) kernel modules. You may have to "
+"separately install these modules. Ensure that the correct modules for your "
+"DVB hardware get loaded automatically e.g. by adding them to /etc/modules "
+"otherwise VDR won't work!"
+msgstr ""
+"VDR vy¾aduje jaderné moduly pro DVB (Digital Video Broadcasting). Nahrání a "
+"pou¾ití tìchto modulù si budete muset zajistit sami (napøíklad pøidáním "
+"tìchto modulù do /etc/modules). V opaèném pøípadì VDR nebude fungovat!"
+
+#. Type: select
+#. Choices
+#: ../vdr.templates:11
+msgid "Satellite, Terrestrial, Cable"
+msgstr "Satelitní, Pozemní, Kabelová"
+
+#. Type: select
+#. Description
+#: ../vdr.templates:13
+msgid "DVB card type:"
+msgstr "Typ DVB karty:"
+
+#. Type: select
+#. Description
+#: ../vdr.templates:13
+msgid ""
+"VDR needs to know your DVB card type to work correctly. Using your "
+"selection, a channels.conf file will be installed to /var/lib/vdr.  You may "
+"have to change this file depending on your setup."
+msgstr ""
+"VDR musí znát typ va¹í DVB karty. Na základì va¹í odpovìdi se do /var/lib/"
+"vdr nainstaluje soubor channels.conf. Tento soubor mù¾ete pozdìji upravit "
+"dle svých potøeb."
+
+#. Type: boolean
+#. Description
+#: ../vdr.templates:21
+msgid "Create /var/lib/video.00?"
+msgstr "Vytvoøit /var/lib/video.00?"
+
+#. Type: boolean
+#. Description
+#: ../vdr.templates:21
+msgid ""
+"By default VDR is configured to use /var/lib/video.00 to store recordings. "
+"You can either create this directory now, or change this behavior later  by "
+"modifying the VIDEO_DIR variable in /etc/default/vdr."
+msgstr ""
+"Implicitnì je VDR nastaveno pro ukládání nahrávek do /var/lib/video.00. "
+"Tento adresáø se nyní mù¾e vytvoøit automaticky. Jeho umístìní mù¾ete "
+"pozdìji upravit zmìnou promìnné VIDEO_DIR v souboru /etc/default/vdr."

Added: vdr/vdr/trunk/debian/po/de.po
===================================================================
--- vdr/vdr/trunk/debian/po/de.po	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/po/de.po	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,90 @@
+# translation of de.po to German
+#
+#    Translators, if you are not familiar with the PO format, gettext
+#    documentation is worth reading, especially sections dedicated to
+#    this format, e.g. by running:
+#         info -n '(gettext)PO Files'
+#         info -n '(gettext)Header Entry'
+#    Some information specific to po-debconf are available at
+#            /usr/share/doc/po-debconf/README-trans
+#         or http://www.debian.org/intl/l10n/po-debconf/README-trans#
+#    Developers do not need to manually edit POT or PO files.
+# Jens Nachtigall <nachtigall@web.de>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: de\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2004-11-14 13:09+0100\n"
+"PO-Revision-Date: 2004-09-27 16:00+0200\n"
+"Last-Translator: Jens Nachtigall <nachtigall@web.de>\n"
+"Language-Team: German <debian-l10n-german@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.3.1\n"
+"Plural-Forms:  nplurals=2; plural=(n != 1);\n"
+
+#. Type: note
+#. Description
+#: ../vdr.templates:3
+msgid "VDR needs DVB kernel modules"
+msgstr "VDR benötigt DVB-Kernel-Module"
+
+#. Type: note
+#. Description
+#: ../vdr.templates:3
+msgid ""
+"VDR needs DVB (Digital Video Broadcasting) kernel modules. You may have to "
+"separately install these modules. Ensure that the correct modules for your "
+"DVB hardware get loaded automatically e.g. by adding them to /etc/modules "
+"otherwise VDR won't work!"
+msgstr ""
+"VDR benötigt Kernel-Module für DVB (»Digital Video Broadcasting«). Sie "
+"müssen diese Module separat installieren. Stellen Sie sicher, dass die für "
+"Ihre DVB-Hardware richtigen Module automatisch geladen werden, indem Sie sie "
+"z.B. in /etc/modules eintragen. Andernfalls wird VDR nicht funktionieren."
+
+#. Type: select
+#. Choices
+#: ../vdr.templates:11
+msgid "Satellite, Terrestrial, Cable"
+msgstr "Satellit, Terrestrisch, Kabel"
+
+#. Type: select
+#. Description
+#: ../vdr.templates:13
+msgid "DVB card type:"
+msgstr "DVB-Karten-Typ:"
+
+#. Type: select
+#. Description
+#: ../vdr.templates:13
+msgid ""
+"VDR needs to know your DVB card type to work correctly. Using your "
+"selection, a channels.conf file will be installed to /var/lib/vdr.  You may "
+"have to change this file depending on your setup."
+msgstr ""
+"VDR muss den Typ Ihrer DVB-Karte kennen, um korrekt zu funktionieren. Mit "
+"Hilfe ihrer Auswahl wird eine channels.conf-Datei in /var/lib/vdr "
+"installiert.  Eventuell werden Sie diese Datei an Ihre Umgebung anpassen "
+"müssen. "
+
+#. Type: boolean
+#. Description
+#: ../vdr.templates:21
+msgid "Create /var/lib/video.00?"
+msgstr "Soll /var/lib/video.00 erstellt werden?"
+
+#. Type: boolean
+#. Description
+#: ../vdr.templates:21
+msgid ""
+"By default VDR is configured to use /var/lib/video.00 to store recordings. "
+"You can either create this directory now, or change this behavior later  by "
+"modifying the VIDEO_DIR variable in /etc/default/vdr."
+msgstr ""
+"Standardmäßig ist VDR so konfiguriert, dass Aufnahmen in /var/lib/video.00 "
+"gespeichert werden. Sie können dieses Verzeichnis entweder jetzt erstellen, "
+"oder diese Konfiguration später ändern, indem Sie die Variable VIDEO_DIR in /"
+"etc/default/vdr anpassen."

Added: vdr/vdr/trunk/debian/po/fr.po
===================================================================
--- vdr/vdr/trunk/debian/po/fr.po	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/po/fr.po	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,91 @@
+# translation of fr.po to French
+#
+#    Translators, if you are not familiar with the PO format, gettext
+#    documentation is worth reading, especially sections dedicated to
+#    this format, e.g. by running:
+#         info -n '(gettext)PO Files'
+#         info -n '(gettext)Header Entry'
+#    Some information specific to po-debconf are available at
+#            /usr/share/doc/po-debconf/README-trans
+#         or http://www.debian.org/intl/l10n/po-debconf/README-trans#
+#    Developers do not need to manually edit POT or PO files.
+# Emmanuel le Chevoir <mms@debian.org>, 2004.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: vdr_1.2.6-3\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2004-11-14 13:09+0100\n"
+"PO-Revision-Date: 2004-03-18 10:42+0100\n"
+"Last-Translator: Emmanuel le Chevoir <mms@debian.org>\n"
+"Language-Team: French <debian-l10n-french@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=ISO-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: KBabel 1.3.1\n"
+
+#. Type: note
+#. Description
+#: ../vdr.templates:3
+msgid "VDR needs DVB kernel modules"
+msgstr "VDR a besoin des modules DVB du noyau pour fonctionner"
+
+#. Type: note
+#. Description
+#: ../vdr.templates:3
+msgid ""
+"VDR needs DVB (Digital Video Broadcasting) kernel modules. You may have to "
+"separately install these modules. Ensure that the correct modules for your "
+"DVB hardware get loaded automatically e.g. by adding them to /etc/modules "
+"otherwise VDR won't work!"
+msgstr ""
+"VDR a besoin des modules DVB (Digital Video Broadcasting) du noyau pour "
+"fonctionner. Il est possible que vous ayez besoin d'installer ces modules "
+"séparément. Assurez-vous que les modules correspondant à votre matériel DVB "
+"sont chargés automatiquement (en les ajoutant dans le fichier /etc/modules, "
+"par exemple), sans quoi VDR ne fonctionnera pas."
+
+#. Type: select
+#. Choices
+#: ../vdr.templates:11
+msgid "Satellite, Terrestrial, Cable"
+msgstr "Satellite, Terrestre, Câble"
+
+#. Type: select
+#. Description
+#: ../vdr.templates:13
+msgid "DVB card type:"
+msgstr "Type de carte DVB :"
+
+#. Type: select
+#. Description
+#: ../vdr.templates:13
+msgid ""
+"VDR needs to know your DVB card type to work correctly. Using your "
+"selection, a channels.conf file will be installed to /var/lib/vdr.  You may "
+"have to change this file depending on your setup."
+msgstr ""
+"VDR a besoin de connaître le type de votre carte DVB pour fonctionner "
+"correctement. Un fichier channels.conf correspondant au type que vous "
+"choisirez sera installé dans le répertoire /var/lib/vdr. En fonction de "
+"votre configuration, il est possible que vous ayez besoin de modifier ce "
+"fichier par la suite."
+
+#. Type: boolean
+#. Description
+#: ../vdr.templates:21
+msgid "Create /var/lib/video.00?"
+msgstr "Créer le répertoire /var/lib/video.00 ?"
+
+#. Type: boolean
+#. Description
+#: ../vdr.templates:21
+msgid ""
+"By default VDR is configured to use /var/lib/video.00 to store recordings. "
+"You can either create this directory now, or change this behavior later  by "
+"modifying the VIDEO_DIR variable in /etc/default/vdr."
+msgstr ""
+"Par défaut, VDR sauvegarde les enregistrements dans le répertoire /var/lib/"
+"video.00. Vous pouvez changer ce répertoire en modifiant la variable "
+"VIDEO_DIR dans le fichier /etc/default/vdr, ou créer ce répertoire "
+"maintenant."

Added: vdr/vdr/trunk/debian/po/nl.po
===================================================================
--- vdr/vdr/trunk/debian/po/nl.po	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/po/nl.po	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,85 @@
+#    Translators, if you are not familiar with the PO format, gettext
+#    documentation is worth reading, especially sections dedicated to
+#    this format, e.g. by running:
+#         info -n '(gettext)PO Files'
+#         info -n '(gettext)Header Entry'
+#
+#    Some information specific to po-debconf are available at
+#            /usr/share/doc/po-debconf/README-trans
+#         or http://www.debian.org/intl/l10n/po-debconf/README-trans
+#
+#    Developers do not need to manually edit POT or PO files.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: vdr 1.2.6-4\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2004-11-14 13:09+0100\n"
+"PO-Revision-Date: 2004-05-18 08:40+0100\n"
+"Last-Translator: Luk Claes <luk.claes@ugent.be>\n"
+"Language-Team: Debian l10n Dutch <debian-l10n-dutch@lists.debian.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=iso-8859-1\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: note
+#. Description
+#: ../vdr.templates:3
+msgid "VDR needs DVB kernel modules"
+msgstr "VDR heeft DVB-kernelmodules nodig"
+
+#. Type: note
+#. Description
+#: ../vdr.templates:3
+msgid ""
+"VDR needs DVB (Digital Video Broadcasting) kernel modules. You may have to "
+"separately install these modules. Ensure that the correct modules for your "
+"DVB hardware get loaded automatically e.g. by adding them to /etc/modules "
+"otherwise VDR won't work!"
+msgstr ""
+"VDR heeft DVB (Digital Video Broadcasting) kernelmodules nodig. U moet deze "
+"modules misschien afzonderlijk installeren. Verzeker u ervan dat de correcte "
+"modules voor uw DVB-hardware automatisch worden geladen, bijvoorbeeld door "
+"ze toe te voegen aan /etc/modules, anders zal VDR niet werken!"
+
+#. Type: select
+#. Choices
+#: ../vdr.templates:11
+msgid "Satellite, Terrestrial, Cable"
+msgstr "Satelliet, Aards, Kabel"
+
+#. Type: select
+#. Description
+#: ../vdr.templates:13
+msgid "DVB card type:"
+msgstr "DVB-kaarttype:"
+
+#. Type: select
+#. Description
+#: ../vdr.templates:13
+msgid ""
+"VDR needs to know your DVB card type to work correctly. Using your "
+"selection, a channels.conf file will be installed to /var/lib/vdr.  You may "
+"have to change this file depending on your setup."
+msgstr ""
+"VDR moet uw DVB-kaarttype weten om correct te werken. Gebruikmakend van uw "
+"selectie, zal een channels.conf-bestand worden geïnstalleerd in /var/lib/"
+"vdr. U moet dit bestand misschien aanpassen afhankelijk van uw configuratie."
+
+#. Type: boolean
+#. Description
+#: ../vdr.templates:21
+msgid "Create /var/lib/video.00?"
+msgstr "/var/lib/video.00 aanmaken?"
+
+#. Type: boolean
+#. Description
+#: ../vdr.templates:21
+msgid ""
+"By default VDR is configured to use /var/lib/video.00 to store recordings. "
+"You can either create this directory now, or change this behavior later  by "
+"modifying the VIDEO_DIR variable in /etc/default/vdr."
+msgstr ""
+"Standaard is VDR geconfigureerd om /var/lib/video.00 te gebruiken om opnames "
+"te bewaren. U kunt deze map nu aanmaken of dit gedrag later wijzigen door de "
+"VIDEO_DIR-variabele aan te passen in /etc/default/vdr."

Added: vdr/vdr/trunk/debian/po/templates.pot
===================================================================
--- vdr/vdr/trunk/debian/po/templates.pot	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/po/templates.pot	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,77 @@
+#
+#    Translators, if you are not familiar with the PO format, gettext
+#    documentation is worth reading, especially sections dedicated to
+#    this format, e.g. by running:
+#         info -n '(gettext)PO Files'
+#         info -n '(gettext)Header Entry'
+#
+#    Some information specific to po-debconf are available at
+#            /usr/share/doc/po-debconf/README-trans
+#         or http://www.debian.org/intl/l10n/po-debconf/README-trans
+#
+#    Developers do not need to manually edit POT or PO files.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2004-11-14 13:09+0100\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#. Type: note
+#. Description
+#: ../vdr.templates:3
+msgid "VDR needs DVB kernel modules"
+msgstr ""
+
+#. Type: note
+#. Description
+#: ../vdr.templates:3
+msgid ""
+"VDR needs DVB (Digital Video Broadcasting) kernel modules. You may have to "
+"separately install these modules. Ensure that the correct modules for your "
+"DVB hardware get loaded automatically e.g. by adding them to /etc/modules "
+"otherwise VDR won't work!"
+msgstr ""
+
+#. Type: select
+#. Choices
+#: ../vdr.templates:11
+msgid "Satellite, Terrestrial, Cable"
+msgstr ""
+
+#. Type: select
+#. Description
+#: ../vdr.templates:13
+msgid "DVB card type:"
+msgstr ""
+
+#. Type: select
+#. Description
+#: ../vdr.templates:13
+msgid ""
+"VDR needs to know your DVB card type to work correctly. Using your "
+"selection, a channels.conf file will be installed to /var/lib/vdr.  You may "
+"have to change this file depending on your setup."
+msgstr ""
+
+#. Type: boolean
+#. Description
+#: ../vdr.templates:21
+msgid "Create /var/lib/video.00?"
+msgstr ""
+
+#. Type: boolean
+#. Description
+#: ../vdr.templates:21
+msgid ""
+"By default VDR is configured to use /var/lib/video.00 to store recordings. "
+"You can either create this directory now, or change this behavior later  by "
+"modifying the VIDEO_DIR variable in /etc/default/vdr."
+msgstr ""

Added: vdr/vdr/trunk/debian/reccmds.custom.conf
===================================================================
--- vdr/vdr/trunk/debian/reccmds.custom.conf	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/reccmds.custom.conf	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,27 @@
+#
+# This is an example file for defining external commands, that will be 
+# accessable as commands at the recordings list.
+# The commands will be executed under the same user id that vdr is running 
+# with, so take care if your are running vdr as root!
+# 
+# The format of a command entry is:  <title> : <command>
+# <title> is the menu text shown on the OSD and <command> is the command to
+# be executed. Everything that <command> writes to stdout will be displayed
+# on the OSD. Also the name of the selected recording will be passed 
+# in single quotes as the first parameter to the command. i.e.:
+#
+# Show me the recording name: echo 
+#
+# If you uncomment the line above and restart vdr, you will have a new 
+# recordings command menu entry, called "Show me the recording name", that 
+# will simply show you the recording name :-)
+#
+# If you are using the reccmd-patch, you can even divide your commands into
+# submenus. To do so, preceed all sub menu items with a "-". i.e.:
+# 
+# main menu node ...   : echo "sub menu, no command"
+# -sub menu entry 1    : do_something.sh
+# -sub menu entry 2    : do_something_else.sh
+# -sub menu node ...   : echo "sub sub menu, no command"
+# --sub-sub menu entry : do_whatever_you_want.sh
+#

Added: vdr/vdr/trunk/debian/rules
===================================================================
--- vdr/vdr/trunk/debian/rules	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/rules	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,148 @@
+#!/usr/bin/make -f
+# Sample debian/rules that uses debhelper.
+# GNU copyright 1997 to 1999 by Joey Hess.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+CFGDIR    := /var/lib/vdr
+DVBDIR    := /usr/include
+PLUGINDIR := /usr/lib/vdr/plugins
+VIDEODIR  := /var/lib/video.00
+
+# include dpatch stuff
+include /usr/share/dpatch/dpatch.make
+
+ifneq (,$(findstring debug,$(DEB_BUILD_OPTIONS)))
+	CFLAGS += -g
+endif
+ifeq (,$(findstring nostrip,$(DEB_BUILD_OPTIONS)))
+	INSTALL_PROGRAM += -s
+endif
+
+configure: configure-stamp
+configure-stamp:
+	dh_testdir
+	
+	touch configure-stamp
+
+build: patch-stamp configure-stamp build-stamp
+
+build-stamp: 
+	dh_testdir
+
+	# Add here commands to compile the package.
+	
+	# vdr-kbd
+	$(MAKE) VIDEODIR=$(VIDEODIR) VFAT=1 DVBDIR=$(DVBDIR) PLUGINLIBDIR=$(PLUGINDIR) CFGDIR=$(CFGDIR)
+	cp vdr vdr-kbd
+	make clean
+	
+	# vdr-daemon
+	$(MAKE) VIDEODIR=$(VIDEODIR) NO_KBD=1 VFAT=1 DVBDIR=$(DVBDIR) PLUGINLIBDIR=$(PLUGINDIR) CFGDIR=$(CFGDIR)
+	cp vdr vdr-daemon
+	make clean
+	
+	# vdr-lirc
+	$(MAKE) VIDEODIR=$(VIDEODIR) REMOTE=LIRC VFAT=1 DVBDIR=$(DVBDIR) PLUGINLIBDIR=$(PLUGINDIR) CFGDIR=$(CFGDIR)
+	cp vdr vdr-lirc
+	make clean
+	
+	# vdr-rcu
+	$(MAKE) VIDEODIR=$(VIDEODIR) REMOTE=RCU VFAT=1 DVBDIR=$(DVBDIR) PLUGINLIBDIR=$(PLUGINDIR) CFGDIR=$(CFGDIR)
+	cp vdr vdr-rcu
+
+	make include-dir
+
+	# plugins
+	mkdir PLUGINS/lib
+	$(MAKE) plugins
+
+	cp newplugin vdr-newplugin
+
+	gcc -o debian/vdr-shutdown.wrapper debian/vdr-shutdown-wrapper.c
+
+	touch build-stamp
+
+patchlevel:
+	chmod +x debian/patchlevel.sh
+	debian/patchlevel.sh make
+
+clean: clean-patched unpatch
+
+clean-patched:
+	dh_testdir
+	dh_testroot
+	rm -f build-stamp configure-stamp
+
+	# Add here commands to clean up after the build process.
+	-$(MAKE) plugins-clean 
+	-$(MAKE) clean
+
+	rm -f vdr-kbd vdr-daemon vdr-lirc vdr-rcu
+	rm -rf PLUGINS/lib
+	rm -f vdr-newplugin
+	sh debian/patchlevel.sh clean
+
+	rm -f debian/vdr-shutdown.wrapper
+	
+	dh_clean
+
+install: build patchlevel
+	dh_testdir
+	dh_testroot
+	dh_clean -k
+	dh_installdirs
+
+	# patchlevel file:
+	install -D -m644 patchlevel debian/vdr-dev/usr/include/vdr/patchlevel || true
+	
+	# All other files will be installed using dh_install.
+
+# Build architecture-independent files here.
+binary-indep: build install
+	dh_testdir -i
+	dh_testroot -i 
+	dh_installdebconf -i
+	dh_installdocs -i 
+	dh_installexamples -i
+	dh_installman -i 
+	dh_installmenu -i
+	dh_installchangelogs -i
+	dh_install -i
+	dh_link -i
+	dh_strip -i
+	dh_compress -i 
+	dh_fixperms -i
+	dh_installdeb -i
+	dh_gencontrol -i
+	dh_md5sums -i
+	dh_builddeb -i
+
+# Build architecture-dependent files here.
+binary-arch: build install
+	dh_testdir -a
+	dh_testroot -a
+	dh_installdebconf -a -pvdr
+	dh_installdocs -a -Nvdr-daemon -Nvdr-kbd -Nvdr-lirc -Nvdr-rcu -Nvdr-plugin-examples
+	dh_installexamples -a -Nvdr-kbd -Nvdr-lirc -Nvdr-rcu -Nvdr-daemon
+	dh_installchangelogs -a -Nvdr-daemon -Nvdr-kbd -Nvdr-lirc -Nvdr-rcu -Nvdr-plugin-examples -Nvdr-plugin-sky -pvdr HISTORY
+	dh_installchangelogs -a -Nvdr-daemon -Nvdr-kbd -Nvdr-lirc -Nvdr-rcu -Nvdr-plugin-examples -Nvdr -pvdr-plugin-sky PLUGINS/src/sky/HISTORY
+	dh_installman -a
+	dh_installmenu -a
+	dh_installinit -a -pvdr
+	dh_install -a
+	chmod ugo+x $(CURDIR)/debian/vdr/usr/lib/vdr/vdr-*
+	dh_link -a
+	dh_strip -a
+	dh_compress -a
+	dh_fixperms -a
+	dh_installdeb -a
+	dh_shlibdeps -a
+	debian/patchlevel.sh subst
+	dh_gencontrol -a
+	dh_md5sums -a
+	dh_builddeb -a
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install patch  unpatch configure clean-patched


Property changes on: vdr/vdr/trunk/debian/rules
___________________________________________________________________
Name: svn:executable
   + *

Added: vdr/vdr/trunk/debian/runvdr
===================================================================
--- vdr/vdr/trunk/debian/runvdr	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/runvdr	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,42 @@
+#!/bin/bash
+#
+#
+
+OPTIONS="$*"
+VDRCMD="LD_ASSUME_KERNEL=2.4 /usr/bin/vdr $OPTIONS"
+
+function get_modulenames ()
+{
+   KVERS=`uname -r | grep -e '2.6'`
+   if [ -z "$KVERS" ]; then
+      MODULES=`lsmod | grep dvb-core | cut -d'[' -f2 | cut -d']' -f1`
+   else
+      MODULES=`lsmod | grep ^dvb_core | awk '{print $4;}' | awk '{ gsub(/,/," ", $1); print }'`
+   fi
+}
+
+get_modulenames
+
+if [ -z "$MODULES" ]; then		# If no DVB-Modules were found, try to load
+   modprobe dvb > /dev/null 2>&1	# the module with the name dvb, this could
+   get_modulenames			# be an alias for the dvb-ttpci-module or
+fi					# another dvb-module
+
+MODULES="$MODULES dvb-core"
+
+while (true) do
+      eval $VDRCMD >/dev/null 2>&1
+      if test $? -eq 0; then exit; fi
+      logger "restarting VDR"
+      /usr/bin/killall -q -TERM /usr/bin/vdr
+      sleep 10
+      
+	 	for MODUL in $MODULES; do
+			rmmod $MODUL >/dev/null 2>&1
+			wait `pidof rmmod`
+		done
+     	
+		for MODUL in $MODULES; do
+  			modprobe $MODUL >/dev/null 2>&1
+		done		
+done

Added: vdr/vdr/trunk/debian/runvdr.8
===================================================================
--- vdr/vdr/trunk/debian/runvdr.8	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/runvdr.8	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,27 @@
+.\" Man page for runvdr
+
+.TH runvdr 8
+.SH NAME
+runvdr
+.SH DESCRIPTION
+.B runvdr
+is called by the init-script of vdr. It acts as a watchdog for vdr and will 
+reload the dvb-modules and vdr, if vdr exits with an exitcode different from 0.
+
+.B runvdr
+will call /usr/bin/vdr and will pass all Commandline-options directly to 
+/usr/bin/vdr.
+
+.B runvdr
+needs to be called by root in order to work correct, because it will try to 
+unload/load kernel-modules!
+
+.SH AUTHOR
+This man-page has been written by Thomas Schmidt <thomas@thsnet.de>
+.PP
+Permission is granted to copy, distribute and/or modify this document under
+the terms of the GNU General Public License, Version 2 any
+later version published by the Free Software Foundation.
+.PP
+On Debian systems, the complete text of the GNU General Public
+License can be found in /usr/share/common\-licenses/GPL.

Added: vdr/vdr/trunk/debian/vdr-daemon.install
===================================================================
--- vdr/vdr/trunk/debian/vdr-daemon.install	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-daemon.install	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1 @@
+vdr-daemon usr/bin/

Added: vdr/vdr/trunk/debian/vdr-daemon.links
===================================================================
--- vdr/vdr/trunk/debian/vdr-daemon.links	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-daemon.links	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,2 @@
+usr/share/doc/vdr usr/share/doc/vdr-daemon
+usr/share/man/man1/vdr.1.gz usr/share/man/man1/vdr-daemon.1.gz

Added: vdr/vdr/trunk/debian/vdr-daemon.postinst
===================================================================
--- vdr/vdr/trunk/debian/vdr-daemon.postinst	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-daemon.postinst	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,14 @@
+#! /bin/sh -e
+
+case "$1" in
+	abort-upgrade)
+		update-alternatives --install /usr/bin/vdr vdr /usr/bin/vdr-daemon 100
+	;;
+	configure)
+		update-alternatives --install /usr/bin/vdr vdr /usr/bin/vdr-daemon 100
+	;;
+esac
+
+#DEBHELPER#
+
+exit 0

Added: vdr/vdr/trunk/debian/vdr-daemon.prerm
===================================================================
--- vdr/vdr/trunk/debian/vdr-daemon.prerm	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-daemon.prerm	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,11 @@
+#! /bin/sh -e
+
+case "$1" in
+	remove)
+		update-alternatives --remove vdr /usr/bin/vdr-daemon
+	;;
+esac
+
+#DEBHELPER#
+
+exit 0

Added: vdr/vdr/trunk/debian/vdr-dev.dirs
===================================================================
--- vdr/vdr/trunk/debian/vdr-dev.dirs	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-dev.dirs	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1 @@
+usr/include/vdr

Added: vdr/vdr/trunk/debian/vdr-dev.docs
===================================================================
--- vdr/vdr/trunk/debian/vdr-dev.docs	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-dev.docs	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,3 @@
+README
+CONTRIBUTORS
+PLUGINS.html

Added: vdr/vdr/trunk/debian/vdr-dev.install
===================================================================
--- vdr/vdr/trunk/debian/vdr-dev.install	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-dev.install	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,10 @@
+*.h 				usr/include/vdr/
+
+debian/debianize-vdrplugin  	usr/bin/
+debian/plugin-template/     	usr/share/vdr-dev/
+
+vdr-newplugin			usr/bin/
+
+debian/lintian/vdr-dev		usr/share/lintian/overrides/
+
+debian/patchlevel.sh            usr/lib/vdr-dev/

Added: vdr/vdr/trunk/debian/vdr-dev.manpages
===================================================================
--- vdr/vdr/trunk/debian/vdr-dev.manpages	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-dev.manpages	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,2 @@
+debian/vdr-newplugin.1
+debian/debianize-vdrplugin.1

Added: vdr/vdr/trunk/debian/vdr-kbd.install
===================================================================
--- vdr/vdr/trunk/debian/vdr-kbd.install	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-kbd.install	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1 @@
+vdr-kbd usr/bin/

Added: vdr/vdr/trunk/debian/vdr-kbd.links
===================================================================
--- vdr/vdr/trunk/debian/vdr-kbd.links	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-kbd.links	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,2 @@
+usr/share/doc/vdr usr/share/doc/vdr-kbd
+usr/share/man/man1/vdr.1.gz usr/share/man/man1/vdr-kbd.1.gz

Added: vdr/vdr/trunk/debian/vdr-kbd.postinst
===================================================================
--- vdr/vdr/trunk/debian/vdr-kbd.postinst	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-kbd.postinst	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,14 @@
+#! /bin/sh -e
+
+case "$1" in
+	abort-upgrade)
+		update-alternatives --install /usr/bin/vdr vdr /usr/bin/vdr-kbd 110
+	;;
+	configure)
+		update-alternatives --install /usr/bin/vdr vdr /usr/bin/vdr-kbd 110
+	;;
+esac
+
+#DEBHELPER#
+
+exit 0

Added: vdr/vdr/trunk/debian/vdr-kbd.prerm
===================================================================
--- vdr/vdr/trunk/debian/vdr-kbd.prerm	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-kbd.prerm	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,11 @@
+#! /bin/sh -e
+
+case "$1" in
+	remove)
+		update-alternatives --remove vdr /usr/bin/vdr-kbd
+	;;
+esac
+
+#DEBHELPER#
+
+exit 0

Added: vdr/vdr/trunk/debian/vdr-lirc.install
===================================================================
--- vdr/vdr/trunk/debian/vdr-lirc.install	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-lirc.install	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1 @@
+vdr-lirc usr/bin/

Added: vdr/vdr/trunk/debian/vdr-lirc.links
===================================================================
--- vdr/vdr/trunk/debian/vdr-lirc.links	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-lirc.links	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,2 @@
+usr/share/doc/vdr usr/share/doc/vdr-lirc
+usr/share/man/man1/vdr.1.gz usr/share/man/man1/vdr-lirc.1.gz

Added: vdr/vdr/trunk/debian/vdr-lirc.postinst
===================================================================
--- vdr/vdr/trunk/debian/vdr-lirc.postinst	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-lirc.postinst	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,14 @@
+#! /bin/sh -e
+
+case "$1" in
+	abort-upgrade)
+		update-alternatives --install /usr/bin/vdr vdr /usr/bin/vdr-lirc 120
+	;;
+	configure)
+		update-alternatives --install /usr/bin/vdr vdr /usr/bin/vdr-lirc 120
+	;;
+esac
+
+#DEBHELPER#
+
+exit 0

Added: vdr/vdr/trunk/debian/vdr-lirc.prerm
===================================================================
--- vdr/vdr/trunk/debian/vdr-lirc.prerm	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-lirc.prerm	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,11 @@
+#! /bin/sh -e
+
+case "$1" in
+	remove)
+		update-alternatives --remove vdr /usr/bin/vdr-lirc
+	;;
+esac
+
+#DEBHELPER#
+
+exit 0

Added: vdr/vdr/trunk/debian/vdr-newplugin.1
===================================================================
--- vdr/vdr/trunk/debian/vdr-newplugin.1	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-newplugin.1	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,27 @@
+.\" Man page for vdr-newplugin
+
+.TH vdr-newplugin 1
+.SH NAME
+vdr-newplugin
+
+.SH SYNOPSIS
+
+.B vdr-newplugin
+.I <pluginname>
+
+.SH DESCRIPTION
+.B vdr-newplugin
+creates a new plugin source directory from which to start implementing
+a plugin for VDR.
+
+The source directory will be created in the active working-directory.
+
+.SH AUTHOR
+This man-page has been written by Thomas Schmidt <thomas@thsnet.de>
+.PP
+Permission is granted to copy, distribute and/or modify this document under
+the terms of the GNU General Public License, Version 2 any
+later version published by the Free Software Foundation.
+.PP
+On Debian systems, the complete text of the GNU General Public
+License can be found in /usr/share/common\-licenses/GPL.

Added: vdr/vdr/trunk/debian/vdr-plugin-examples.install
===================================================================
--- vdr/vdr/trunk/debian/vdr-plugin-examples.install	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-plugin-examples.install	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,3 @@
+PLUGINS/lib/libvdr-hello.so.* usr/lib/vdr/plugins/
+PLUGINS/lib/libvdr-osddemo.so.* usr/lib/vdr/plugins/
+PLUGINS/lib/libvdr-status.so.* usr/lib/vdr/plugins/

Added: vdr/vdr/trunk/debian/vdr-plugin-examples.links
===================================================================
--- vdr/vdr/trunk/debian/vdr-plugin-examples.links	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-plugin-examples.links	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,2 @@
+usr/share/man/man1/vdr.1.gz usr/share/man/man1/vdr-plugin-examples.1.gz
+usr/share/doc/vdr usr/share/doc/vdr-plugin-examples

Added: vdr/vdr/trunk/debian/vdr-plugin-sky.docs
===================================================================
--- vdr/vdr/trunk/debian/vdr-plugin-sky.docs	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-plugin-sky.docs	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1 @@
+PLUGINS/src/sky/README

Added: vdr/vdr/trunk/debian/vdr-plugin-sky.examples
===================================================================
--- vdr/vdr/trunk/debian/vdr-plugin-sky.examples	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-plugin-sky.examples	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1 @@
+PLUGINS/src/sky/*.sky

Added: vdr/vdr/trunk/debian/vdr-plugin-sky.install
===================================================================
--- vdr/vdr/trunk/debian/vdr-plugin-sky.install	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-plugin-sky.install	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1 @@
+PLUGINS/lib/libvdr-sky.so.* usr/lib/vdr/plugins/

Added: vdr/vdr/trunk/debian/vdr-rcu.install
===================================================================
--- vdr/vdr/trunk/debian/vdr-rcu.install	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-rcu.install	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1 @@
+vdr-rcu usr/bin/

Added: vdr/vdr/trunk/debian/vdr-rcu.links
===================================================================
--- vdr/vdr/trunk/debian/vdr-rcu.links	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-rcu.links	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,2 @@
+usr/share/doc/vdr usr/share/doc/vdr-rcu
+usr/share/man/man1/vdr.1.gz usr/share/man/man1/vdr-rcu.1.gz

Added: vdr/vdr/trunk/debian/vdr-rcu.postinst
===================================================================
--- vdr/vdr/trunk/debian/vdr-rcu.postinst	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-rcu.postinst	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,14 @@
+#! /bin/sh -e
+
+case "$1" in
+	abort-upgrade)
+		update-alternatives --install /usr/bin/vdr vdr /usr/bin/vdr-rcu 105
+	;;
+	configure)
+		update-alternatives --install /usr/bin/vdr vdr /usr/bin/vdr-rcu 105
+	;;
+esac
+
+#DEBHELPER#
+
+exit 0

Added: vdr/vdr/trunk/debian/vdr-rcu.prerm
===================================================================
--- vdr/vdr/trunk/debian/vdr-rcu.prerm	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-rcu.prerm	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,11 @@
+#! /bin/sh -e
+
+case "$1" in
+	remove)
+		update-alternatives --remove vdr /usr/bin/vdr-rcu
+	;;
+esac
+
+#DEBHELPER#
+
+exit 0

Added: vdr/vdr/trunk/debian/vdr-recordingaction
===================================================================
--- vdr/vdr/trunk/debian/vdr-recordingaction	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-recordingaction	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,49 @@
+#!/bin/sh
+#
+# VDR Recording Action Script  - Tobias Grimm <tg@e-tobi.net>
+# ---------------------------
+#
+# This script gets executed by VDR before a recording starts, after a
+# recording ends and after a recording has been edited.
+# In order to allow other addons to hook into this process, this script will
+# search for any executables in /usr/share/vdr/recording-hooks. These
+# hooks are called in their alphabetical order and should follow this
+# naming scheme: 
+#
+# R<XX>.<identifier>
+#
+# Where <XX> is a two digit number, that mainly specifies the execution order 
+# and <identifier> is a unique descriptor.
+#
+# Two parameters are passed to each recording hook:
+#
+# Parameter 1 can have the values "before", "after" and "edited", depending
+# on whether the recording hook is called before the recording starts,
+# after the recording ends or after the recording has been edited.
+#
+# Parameter 2 is the directory of the recording. Be aware, that this directory 
+# doesn't exist before the recording starts.
+#
+
+REC_HOOKS_DIR=/usr/share/vdr/recording-hooks
+
+recordinghooks=`find $REC_HOOKS_DIR -maxdepth 1 -xtype f | sort`
+
+for recordinghook in $recordinghooks; do
+    case $1 in
+	before|after)
+	    action="$1 recording $2" 
+	    ;;
+	edited)
+	    action="after editing recording $2" 
+	    ;;
+    esac
+    if [ -x $recordinghook ]; then
+	logger -t recordingaction "executing $recordinghook $action"
+	$recordinghook $*
+    else
+	logger -t recordingaction "executing $recordinghook $action as shell script"
+	/bin/sh $recordinghook $*
+    fi
+    [ $? -ne 0 ] && logger -t recordingaction "error when executing $recordinghook"
+done 

Added: vdr/vdr/trunk/debian/vdr-shutdown
===================================================================
--- vdr/vdr/trunk/debian/vdr-shutdown	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-shutdown	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,54 @@
+#!/bin/sh
+#
+# VDR Shutdown Script  - Tobias Grimm <tg@e-tobi.net>
+# -------------------
+#
+# see README.Debian
+#
+
+. /usr/lib/vdr/config-loader.sh
+
+SHUTDOWN_HOOKS_DIR=/usr/share/vdr/shutdown-hooks/
+
+log="logger -t vdr-shutdown"
+svdrpsend="/usr/lib/vdr/svdrpsend.pl"
+
+osdmsg()
+{
+    # OSD message must be deferred, to let VDR display it AFTER the
+    # shutdown script has been executed
+    sleep 2
+    $svdrpsend MESG "$1"
+}
+
+shutdownhooks=`find $SHUTDOWN_HOOKS_DIR -maxdepth 1 -xtype f | sort`
+
+for shutdownhook in $shutdownhooks; do
+    TRY_AGAIN=0
+
+    if [ -x $shutdownhook ]; then
+	$log "executing $shutdownhook"
+	result_data=`$shutdownhook $*`
+    else
+	$log "executing $shutdownhook as shell script"
+	result_data=`/bin/sh $shutdownhook $*`
+    fi
+    result=$?
+    eval $result_data
+    if [ $result -ne 0 ] ; then 
+	$log "Shutdown aborted by $shutdownhook with exitcode $result"
+	osdmsg "Shutdown abgebrochen / Shutdown aborted!" &
+	[ -z "$ABORT_MESSAGE" ] || osdmsg "$ABORT_MESSAGE" &
+	exit $result
+    fi
+
+    if [ $TRY_AGAIN -gt 0 ]
+    then
+	$log "$shutdownhook requests to try again in $TRY_AGAIN minutes" 
+        echo "$svdrpsend HITK Power" | at now + $TRY_AGAIN minutes
+        osdmsg "Shutdown aborted. Retry in $TRY_AGAIN minutes." &
+        exit 0
+    fi
+done 
+
+eval $SHUTDOWNCMD

Added: vdr/vdr/trunk/debian/vdr-shutdown-message
===================================================================
--- vdr/vdr/trunk/debian/vdr-shutdown-message	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-shutdown-message	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,19 @@
+#!/bin/sh
+
+svdrpsend="/usr/lib/vdr/svdrpsend.pl"
+log="logger -t vdr-shutdown"
+
+MESSAGE="Shutdown deactivated (see /etc/default/vdr)"
+
+osdmsg()
+{
+    # OSD message must be deferred, to let VDR display it AFTER the
+    # shutdown script has been executed
+    sleep 2
+    $svdrpsend MESG "$1"
+}
+
+osdmsg $MESSAGE &
+$log $MESSAGE &
+
+exit 1

Added: vdr/vdr/trunk/debian/vdr-shutdown-wrapper.c
===================================================================
--- vdr/vdr/trunk/debian/vdr-shutdown-wrapper.c	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr-shutdown-wrapper.c	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,3 @@
+int main (int argc, char *argv[]) {
+   return execv("/usr/lib/vdr/vdr-shutdown", argv);
+}

Added: vdr/vdr/trunk/debian/vdr.NEWS
===================================================================
--- vdr/vdr/trunk/debian/vdr.NEWS	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr.NEWS	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,48 @@
+vdr (1.2.6-6) unstable; urgency=low
+
+  The most important change in this release is that vdr from now on
+  will run under the username vdr, not as root, this is due to some
+  security problems when vdr runs as root, the video-directory and 
+  configfiles will be changed at installation, so they are owned by 
+  the user and group vdr.
+
+  The second thing is that the automatic shutdown of vdr is now disabled
+  by default, you can enable it again by changing ENABLE_SHUTDOWN to 1 
+  in /etc/default/vdr.
+  
+  In this release we also changed the default VIDEO_DIR from 
+  /var/lib/video to /var/lib/video.00, to make adding extra harddiscs 
+  for vdr very easy by just creating /var/lib/video.0{1,2,3,...} and 
+  mounting the drive(s) there. In existing installations we will simply 
+  create a symlink /var/lib/video.00 which points to /var/lib/video. In 
+  new installations /var/lib/video will be a symlink which points to 
+  /var/lib/video.00. (These changes will only be asked when you 
+  selected yes in the debconf-question to create the video-directory!)
+
+ -- Thomas Schmidt <thomas.schmidt@in.stud.tu-ilmenau.de>  Fri, 14 Jan 2005 12:17:51 +0100
+
+vdr (1.2.6-4) unstable; urgency=low
+
+  This is the first release from the VDR and DVB Packaging Team
+  <pkg-vdr-dvb-devel@lists.alioth.debian.org>
+  Many thanks to Tobias Grimm and Thomas Günther for the various improvements
+  of the package.
+
+  In this Release, we changed the path of the conf-files to /var/lib/vdr,
+  static conf-files will still be under /etc/vdr, and symlinked to
+  /var/lib/vdr. 
+  If you allready have non-static files (channels.conf, remote.conf, 
+  setup.conf and timers.conf), these files will be moved by the 
+  postinst-script to /var/lib/vdr.
+
+  The most important change in this release is the new init-system of vdr,
+  which was taken from c't-vdr, a woody-based distribution, optimized for vdr.
+    - Plugins are not any longer loaded via /etc/default/vdr, instead of this,
+      every installed plugin will be loaded automatically. The order of the
+      plugins can be configured via /etc/vdr/plugins/order.conf.
+    - The commands.conf and the reccmds.conf files will be auto-generated 
+      by the init-script for better integration of vdr-addons.
+      If you allready have a commands.conf or reccmds.conf, you should move it
+      to /etc/vdr/command-hooks/{commands|reccmds}.custom.conf .
+
+ -- Thomas Schmidt <thomas.schmidt@in.stud.tu-ilmenau.de>  Sat, 29 May 2004 19:43:49 +0200

Added: vdr/vdr/trunk/debian/vdr.config
===================================================================
--- vdr/vdr/trunk/debian/vdr.config	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr.config	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,24 @@
+#!/bin/sh
+
+set -e
+
+# source debconf lib
+. /usr/share/debconf/confmodule
+
+
+# show info about vdr
+db_input high vdr/showinfo || true
+db_go
+
+
+# ask about creating /var/lib/video
+if [ ! -e /var/lib/video ]; then
+	db_input high vdr/create_video_dir || true
+	db_go
+fi
+
+# ask about dvb card type
+db_input high vdr/select_dvb_card || true
+db_go
+
+exit 0

Added: vdr/vdr/trunk/debian/vdr.default
===================================================================
--- vdr/vdr/trunk/debian/vdr.default	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr.default	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,29 @@
+# /etc/default/vdr
+# Default config thanks to: 
+# Thomas Schmidt <thomas.schmidt@in.stud.tu-ilmenau.de>
+# 29.01.2003
+
+# Change to 1 to enable vdr's init-script
+ENABLED=0
+
+# Change this to 1 if you want vdr to be able to shutdown the
+# computer
+ENABLE_SHUTDOWN=0
+
+# Video-Directory
+VIDEO_DIR="/var/lib/video.00"
+
+# Set this to load only startable plugins (check with "vdr -V -P plugin")
+PLUGIN_CHECK_STARTABLE="yes"
+
+# Set this to load only plugins with the correct patch level
+PLUGIN_CHECK_PATCHLEVEL="no"
+
+# Options that will be passed to vdr's commandline
+# for example: OPTIONS="-w 15"
+OPTIONS="-w 60"
+
+# VDR executes this command when the power-off-key of the remote is
+# pressed after processing all shutdown hook scripts. Shutdown hooks
+# may override this command - see /usr/share/doc/vdr/README.Debian.
+SHUTDOWNCMD="/etc/init.d/vdr stop ; sleep 1 ; /sbin/shutdown -h now"

Added: vdr/vdr/trunk/debian/vdr.dirs
===================================================================
--- vdr/vdr/trunk/debian/vdr.dirs	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr.dirs	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,12 @@
+etc/vdr/plugins
+etc/vdr/command-hooks
+usr/bin
+usr/include/vdr
+usr/lib/vdr/plugins
+usr/sbin
+usr/share/lintian/overrides
+usr/share/vdr/command-hooks
+usr/share/vdr/recording-hooks
+usr/share/vdr/shutdown-hooks
+var/cache/vdr
+var/lib/vdr/plugins

Added: vdr/vdr/trunk/debian/vdr.docs
===================================================================
--- vdr/vdr/trunk/debian/vdr.docs	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr.docs	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,6 @@
+README
+CONTRIBUTORS
+MANUAL
+INSTALL
+PLUGINS.html
+UPDATE-1.2.0

Added: vdr/vdr/trunk/debian/vdr.examples
===================================================================
--- vdr/vdr/trunk/debian/vdr.examples	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr.examples	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,2 @@
+*.conf
+channels.conf.*

Added: vdr/vdr/trunk/debian/vdr.init
===================================================================
--- vdr/vdr/trunk/debian/vdr.init	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr.init	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,69 @@
+#! /bin/bash
+#
+# vdr start-stop script
+#
+
+. /usr/lib/vdr/config-loader.sh
+
+PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
+NAME=vdr
+DESC="Linux Video Disk Recorder"
+
+test "$ENABLE_SHUTDOWN" = "1" && VDRSHUTDOWN="/usr/lib/vdr/vdr-shutdown.wrapper" \
+	|| VDRSHUTDOWN="/usr/lib/vdr/vdr-shutdown-message"
+
+test "$ENABLED" != "0" || exit 0
+
+test -x /usr/sbin/runvdr || exit 0
+
+startvdr() 
+{
+    if ! ps ax | grep "/usr/bin/vdr " | grep -v grep > /dev/null 
+    then
+	. /usr/lib/vdr/plugin-loader.sh
+	. /usr/lib/vdr/commands-loader.sh
+    	getplugins
+    	mergecommands "commands"
+    	mergecommands "reccmds"
+    	start-stop-daemon --start --quiet \
+	 	--exec /usr/sbin/runvdr -- -v $VIDEO_DIR -c $CFG_DIR -r $REC_CMD \
+	 	-s $VDRSHUTDOWN -E $EPG_FILE -u $USER -g $GROUP --port $SVDRP_PORT \
+		$OPTIONS $PLUGINS &
+    else
+	   echo -n " - seems to be running already"
+    fi
+} 
+
+stopvdr()
+{
+    killall -q -TERM runvdr
+    killall -q -TERM /usr/bin/vdr
+}
+
+case "$1" in
+  start)
+	 echo -n "Starting $DESC: $NAME"
+	 startvdr
+	 echo "."
+	 ;;
+  stop)
+	 echo -n "Stopping $DESC: $NAME"
+	 stopvdr
+	 echo "."
+	 ;;
+  restart|force-reload)
+	 echo -n "Restarting $DESC: $NAME"
+	 stopvdr
+	 sleep 4
+	 startvdr
+	 echo "."
+	 ;;
+  *)
+	 N=/etc/init.d/$NAME
+	 echo "Use: $N {start|stop|restart|force-reload}" >&2
+	 exit 1
+	;;
+esac
+
+exit 0
+

Added: vdr/vdr/trunk/debian/vdr.install
===================================================================
--- vdr/vdr/trunk/debian/vdr.install	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr.install	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,33 @@
+epg2html.pl  usr/lib/vdr/
+svdrpsend.pl usr/lib/vdr/
+
+debian/runvdr usr/sbin/
+
+debian/order.conf etc/vdr/plugins/
+
+debian/order.commands.conf etc/vdr/command-hooks/
+debian/order.reccmds.conf  etc/vdr/command-hooks/
+
+debian/commands.custom.conf etc/vdr/command-hooks/
+debian/reccmds.custom.conf  etc/vdr/command-hooks/
+
+debian/config-loader.sh   usr/lib/vdr
+debian/plugin-loader.sh   usr/lib/vdr
+debian/commands-loader.sh usr/lib/vdr
+
+ca.conf		etc/vdr/
+diseqc.conf     etc/vdr/
+keymacros.conf  etc/vdr/
+sources.conf    etc/vdr/
+svdrphosts.conf etc/vdr/
+
+debian/vdr-recordingaction usr/lib/vdr/
+debian/R90.custom          etc/vdr/recording-hooks/
+
+debian/vdr-shutdown         usr/lib/vdr/
+debian/vdr-shutdown-message usr/lib/vdr/
+debian/vdr-shutdown.wrapper usr/lib/vdr/
+debian/S90.custom           etc/vdr/shutdown-hooks/
+
+debian/lintian/vdr usr/share/lintian/overrides/
+

Added: vdr/vdr/trunk/debian/vdr.links
===================================================================
--- vdr/vdr/trunk/debian/vdr.links	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr.links	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,14 @@
+etc/vdr/command-hooks/commands.custom.conf  usr/share/vdr/command-hooks/commands.custom.conf
+etc/vdr/command-hooks/reccmds.custom.conf   usr/share/vdr/command-hooks/reccmds.custom.conf
+
+var/cache/vdr/commands.conf  var/lib/vdr/commands.conf
+var/cache/vdr/reccmds.conf   var/lib/vdr/reccmds.conf
+
+etc/vdr/ca.conf          var/lib/vdr/ca.conf
+etc/vdr/diseqc.conf      var/lib/vdr/diseqc.conf
+etc/vdr/keymacros.conf   var/lib/vdr/keymacros.conf
+etc/vdr/sources.conf     var/lib/vdr/sources.conf
+etc/vdr/svdrphosts.conf  var/lib/vdr/svdrphosts.conf
+
+/etc/vdr/recording-hooks/R90.custom  /usr/share/vdr/recording-hooks/R90.custom
+/etc/vdr/shutdown-hooks/S90.custom   /usr/share/vdr/shutdown-hooks/S90.custom

Added: vdr/vdr/trunk/debian/vdr.manpages
===================================================================
--- vdr/vdr/trunk/debian/vdr.manpages	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr.manpages	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,4 @@
+vdr.1
+vdr.5
+
+debian/runvdr.8

Added: vdr/vdr/trunk/debian/vdr.menu
===================================================================
--- vdr/vdr/trunk/debian/vdr.menu	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr.menu	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,2 @@
+?package(vdr):needs="text" section="Apps/Viewers"\
+  title="vdr" command="/usr/bin/vdr" longtitle="Digital TV viewer and DVD player with On-Screen-Display controls"

Added: vdr/vdr/trunk/debian/vdr.postinst
===================================================================
--- vdr/vdr/trunk/debian/vdr.postinst	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr.postinst	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,156 @@
+#! /bin/sh
+# postinst script for vdr
+#
+# see: dh_installdeb(1)
+
+set -e
+
+# summary of how this script can be called:
+#        * <postinst> `configure' <most-recently-configured-version>
+#        * <old-postinst> `abort-upgrade' <new version>
+#        * <conflictor's-postinst> `abort-remove' `in-favour' <package>
+#          <new-version>
+#        * <deconfigured's-postinst> `abort-deconfigure' `in-favour'
+#          <failed-install-package> <version> `removing'
+#          <conflicting-package> <version>
+# for details, see http://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+#
+# quoting from the policy:
+#     Any necessary prompting should almost always be confined to the
+#     post-installation script, and should be protected with a conditional
+#     so that unnecessary prompting doesn't happen if a package's
+#     installation fails and the `postinst' is called with `abort-upgrade',
+#     `abort-remove' or `abort-deconfigure'.
+
+# source debconf lib
+#. /usr/share/debconf/confmodule
+
+case "$1" in
+    configure)
+	
+	. /usr/share/debconf/confmodule
+	
+	# move cfg-files from /etc/vdr to /var/lib/vdr
+	for FILE in remote.conf setup.conf timers.conf; do
+		if [ -e /etc/vdr/$FILE ] && [ ! -e /var/lib/vdr/$FILE ]; then
+			printf "Note: Moving /etc/vdr/$FILE to /var/lib/vdr/$FILE\n"
+			mv /etc/vdr/$FILE /var/lib/vdr/$FILE
+		fi
+	done
+	
+	# install/move channels.conf 
+	if [ ! -e /var/lib/vdr/channels.conf ]; then
+		if  [ -e /etc/vdr/channels.conf ]; then
+			printf "Note: Moving /etc/vdr/channels.conf to /var/lib/vdr/channels.conf\n"
+			mv /etc/vdr/channels.conf /var/lib/vdr/channels.conf
+		else
+			db_get vdr/select_dvb_card
+	
+			case "$RET" in
+	    		Satellite)
+				gzip -dc /usr/share/doc/vdr/examples/channels.conf.gz \
+				> /var/lib/vdr/channels.conf
+				chmod 644 /var/lib/vdr/channels.conf
+	    		;;
+	    		Terrestrial)
+				gzip -dc /usr/share/doc/vdr/examples/channels.conf.terr.gz \
+				> /var/lib/vdr/channels.conf
+				chmod 644 /var/lib/vdr/channels.conf
+	    		;;
+			Cable)
+				gzip -dc /usr/share/doc/vdr/examples/channels.conf.cable.gz \
+				> /var/lib/vdr/channels.conf
+				chmod 644 /var/lib/vdr/channels.conf
+	    		;;
+			esac
+		fi
+	fi
+	
+	# create needed devices nodes
+	if [ ! -e /dev/dvb/ ]; then
+		echo -n "Creating DVB-Devices: "
+		cd /dev && MAKEDEV dvb
+		echo "done."
+	fi
+
+	db_get vdr/create_video_dir
+	if $RET; then
+		# check if an old directory /var/lib/video exists, and 
+		# symlink it to /var/lib/video.00
+		if [ -d /var/lib/video ] && [ ! -e /var/lib/video.00 ]; then
+	   		ln -s video /var/lib/video.00
+		fi
+
+		# create /var/lib/video.00 if it does not exist
+		if [ ! -e /var/lib/video.00 ]; then
+			mkdir /var/lib/video.00
+		fi
+
+		# check if /var/lib/video.00 exists and /var/lib/video is 
+		# missing, then create the symlink /var/lib/video which
+		# points to /var/lib/video.00
+		if [ ! -e /var/lib/video ] && [ -e /var/lib/video.00 ]; then
+	   		ln -s video.00 /var/lib/video
+		fi
+	fi
+
+	# ensure that user and group 'vdr' exist
+	USER=vdr
+	GROUP=vdr
+	if ! getent group | grep -q "^$GROUP:" ; then
+		echo -n "Adding group $GROUP.."
+          	addgroup --quiet --system $GROUP
+          	echo "..done"
+        fi
+	if ! getent passwd | grep -q "^$USER:"; then
+		echo -n "Adding user $USER.."
+          	adduser --system --home /var/lib/vdr --shell /bin/false \
+			--gecos "VDR user" --no-create-home \
+                  	--disabled-login --disabled-password \
+                  	--ingroup $GROUP \
+                  	$USER
+          	echo "...done"
+	fi
+	
+	# put vdr in group video so that it can access the DVB device nodes
+	adduser $USER video > /dev/null || true
+
+	# ensure that vdr's config and recording files are correctly owned
+	[ ! -e /var/lib/video ] || chown -R $USER:$GROUP /var/lib/video/
+	[ ! -e /var/lib/vdr ] || chown $USER:$GROUP /var/lib/vdr
+	chown $USER:$GROUP /var/lib/vdr/* > /dev/null 2>&1 || true
+	[ ! -e /var/cache/vdr ] || chown $USER:$GROUP /var/cache/vdr
+	chown $USER:$GROUP /var/cache/vdr/* > /dev/null 2>&1|| true
+
+	# make /usr/lib/vdr/vdr-shutdown.wrapper setuid/setgid (owner root:vdr, mode 6750)
+	[ ! -e /usr/lib/vdr/vdr-shutdown.wrapper ] || \
+	chown root:$GROUP /usr/lib/vdr/vdr-shutdown.wrapper && \
+	chmod 6750 /usr/lib/vdr/vdr-shutdown.wrapper
+    ;;
+
+    abort-upgrade|abort-remove|abort-deconfigure)
+    ;;
+
+    *)
+        echo "postinst called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+db_stop
+
+
+# FIXME
+# wait for vdr to properly shutdown before it is restarted again
+sleep 5 
+
+
+#DEBHELPER#
+
+exit 0
+
+

Added: vdr/vdr/trunk/debian/vdr.postrm
===================================================================
--- vdr/vdr/trunk/debian/vdr.postrm	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr.postrm	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,44 @@
+#! /bin/sh
+# postrm script for vdr-plugin-#PACKAGE#
+#
+# see: dh_installdeb(1)
+
+set -e
+
+# summary of how this script can be called:
+#        * <postrm> `remove'
+#        * <postrm> `purge'
+#        * <old-postrm> `upgrade' <new-version>
+#        * <new-postrm> `failed-upgrade' <old-version>
+#        * <new-postrm> `abort-install'
+#        * <new-postrm> `abort-install' <old-version>
+#        * <new-postrm> `abort-upgrade' <old-version>
+#        * <disappearer's-postrm> `disappear' <r>overwrit>r> <new-version>
+# for details, see http://www.debian.org/doc/debian-policy/ or
+# the debian-policy package
+
+
+case "$1" in
+    purge)
+    	rm -f /var/cache/vdr/commands.conf > /dev/null 2>&1 || true
+    	rm -f /var/cache/vdr/reccmds.conf > /dev/null 2>&1 || true
+	rm -f /var/cache/vdr/epg.data > /dev/null 2>&1 || true
+	rm -f /var/lib/vdr/channels.conf > /dev/null 2>&1 || true
+	rm -f /var/lib/vdr/remote.conf > /dev/null 2>&1 || true
+	rm -f /var/lib/vdr/setup.conf > /dev/null 2>&1 || true
+	rm -f /var/lib/vdr/timers.conf > /dev/null 2>&1 || true
+    ;;
+    remove|upgrade|failed-upgrade|abort-install|abort-upgrade|disappear)
+    ;;
+    *)
+        echo "postrm called with unknown argument \`$1'" >&2
+        exit 1
+    ;;
+esac
+
+# dh_installdeb will replace this with shell code automatically
+# generated by other debhelper scripts.
+
+#DEBHELPER#
+
+exit 0

Added: vdr/vdr/trunk/debian/vdr.templates
===================================================================
--- vdr/vdr/trunk/debian/vdr.templates	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/vdr.templates	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,24 @@
+Template: vdr/showinfo
+Type: note
+_Description: VDR needs DVB kernel modules
+ VDR needs DVB (Digital Video Broadcasting) kernel modules. You may have to
+ separately install these modules. Ensure that the correct modules for your
+ DVB hardware get loaded automatically e.g. by adding them to /etc/modules
+ otherwise VDR won't work!
+
+Template: vdr/select_dvb_card
+Type: select
+_Choices: Satellite, Terrestrial, Cable
+Default: Satellite
+_Description: DVB card type:
+ VDR needs to know your DVB card type to work correctly.
+ Using your selection, a channels.conf file will be installed to /var/lib/vdr. 
+ You may have to change this file depending on your setup.
+
+Template: vdr/create_video_dir
+Type: boolean
+Default: false
+_Description: Create /var/lib/video.00?
+ By default VDR is configured to use /var/lib/video.00 to store recordings.
+ You can either create this directory now, or change this behavior later 
+ by modifying the VIDEO_DIR variable in /etc/default/vdr.

Added: vdr/vdr/trunk/debian/watch
===================================================================
--- vdr/vdr/trunk/debian/watch	2005-02-23 11:36:23 UTC (rev 56)
+++ vdr/vdr/trunk/debian/watch	2005-02-23 11:36:39 UTC (rev 57)
@@ -0,0 +1,2 @@
+version=2
+ftp://ftp.cadsoft.de/vdr/ vdr.*-([\d+\.]+|\d+)\.tar(\.gz|\.bz2) debian uupdate