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(×tr, "%s", IndexToHMSF(Current, DisplayFrames));
++ asprintf(×tr, "%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