diff -Nru vdr-1.0.0/debian/changelog vdr-1.2.6/debian/changelog --- vdr-1.0.0/debian/changelog 2005-01-20 19:46:03.000000000 +0100 +++ vdr-1.2.6/debian/changelog 2006-05-18 20:03:12.000000000 +0200 @@ -1,11 +1,354 @@ -vdr (1.0.0-1woody2) stable-security; urgency=high +vdr (1.2.6-13) unstable; urgency=medium - * Non-maintainer upload by the Security Team - * Fixed arbitrary file overwrite vulnerability by switching from fopen() - to open()+fdreopen() and O_CREAT|O_EXCL - [debian/patches/security-z50_CAN-2005-0071_fopen, CAN-2005-0071] + * Darren Salt + - Make the usage of NPTL configurable in /etc/default/vdr + - Disable the usage of NPTL on amd64 in runvdr (this allways + overrides the setting in /etc/default/vdr) (closes: #305098) + * Thomas Schmidt + - Added psmisc to the depends of the package vdr (thanks to Martin + Langer for the hint) + + -- Debian VDR Team Thu, 05 May 2005 21:47:56 +0200 + +vdr (1.2.6-12) unstable; urgency=low + + * Tobias Grimm + - Don't restrict root capabilities with --allow-root anymore + - Passing $OPTIONS to binary compatibility test in plugin loader now + * Thomas Schmidt + - Add "Provides: vdr-daemon, vdr-kbd, vdr-lirc, vdr-rcu" to package + vdr to ensure smooth upgrades + + -- Debian VDR Team Sun, 10 Apr 2005 17:00:24 +0200 + +vdr (1.2.6-11) unstable; urgency=low + + * Tobias Grimm + - Modified not-as-root-patch to allow to start VDR as root anyway, if the + option --allow-root is given + + -- Debian VDR Team Sat, 09 Apr 2005 22:29:02 +0200 + +vdr (1.2.6-10) unstable; urgency=low + + * Thomas Schmidt + - Added patch for the EPG handling under amd64 (closes: #300702) + - Check for existance of /usr/sbin/runvdr before sourcing the + config-loader.sh script (closes: #302826) + - Fixed small typos in the package descriptions of vdr and + vdr-dev (closes: #300042, #300074) + - Add user vdr to group cdrom in postinst, so that vdr is able to + play dvd's with the dvd-plugin again + + -- Debian VDR Team Sat, 09 Apr 2005 18:32:59 +0200 + +vdr (1.2.6-9) experimental; urgency=low + + * Thomas Schmidt + - Change owner of /proc/{av7110_ir,budget_ci_ir} to the uid and + gid under which vdr will run in /usr/sbin/runvdr + (closes: #297640) + - Added 13_remote.dpatch from Darren Salt, this allows to have + just 1 binary for all 4 possible control methods, and it should + reduce build-time by about 75% + - Removed packages vdr-daemon, vdr-kbd, vdr-lirc, vdr-rcu because + they are not necessary anymore + - Added "Conflicts and Replaces: vdr-daemon, vdr-kbd, vdr-lirc, + vdr-rcu" to debian/control + - Removed Andreas Müller from uploaders - he does not intend + to do uploads anymore + + -- Debian VDR Team Sat, 12 Mar 2005 20:05:06 +0100 + +vdr (1.2.6-8) unstable; urgency=low + + * Thomas Schmidt + - 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 Sat, 19 Feb 2005 15:17:38 +0100 + +vdr (1.2.6-7) unstable; urgency=low + + * Thomas Schmidt + - 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 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 + - new (optional) plugin check (with "vdr -V -P plugin") + - Extracted patchlevel code to patchlevel.sh + - Installing patchlevel.sh into vdr-dev package + * Tobias Grimm + - 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 + - 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 + (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 Wed, 19 Jan 2005 00:12:03 +0100 + +vdr (1.2.6-5) unstable; urgency=low + + * Tobias Grimm + - 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 + - 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 + + - List Andreas Mueller as Uploader + - Added patch from Andreas Jochens 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 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 + - 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 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 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 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 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 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 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 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 Tue, 17 Sep 2003 22:12:38 +0200 + + +vdr (1.2.2-1) unstable; urgency=low + + * new upstream build + (closes: Bug#195951) + + -- Andreas Mueller 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 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) - -- Martin Schulze Sun, 16 Jan 2005 15:45:23 +0100 + -- Andreas Mueller Sat, 4 Jan 2003 16:27:00 +0100 + +vdr (1.0.4-1) unstable; urgency=low + + * New upstream release + + -- Eduard Bloch Sat, 3 Aug 2002 12:22:20 +0200 vdr (1.0.0-1) unstable; urgency=medium @@ -30,7 +373,7 @@ vdr (0.98-2) unstable; urgency=medium - * Disabled SVDRP port as-default and noted in README.Debian. + * 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 @@ -86,3 +429,4 @@ Local variables: mode: debian-changelog End: + diff -Nru vdr-1.0.0/debian/commands.custom.conf vdr-1.2.6/debian/commands.custom.conf --- vdr-1.0.0/debian/commands.custom.conf 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/commands.custom.conf 2006-05-18 20:03:12.000000000 +0200 @@ -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: : <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. +# diff -Nru vdr-1.0.0/debian/commands-loader.sh vdr-1.2.6/debian/commands-loader.sh --- vdr-1.0.0/debian/commands-loader.sh 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/commands-loader.sh 2006-05-18 20:03:12.000000000 +0200 @@ -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 +} diff -Nru vdr-1.0.0/debian/compat vdr-1.2.6/debian/compat --- vdr-1.0.0/debian/compat 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/compat 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1 @@ +4 diff -Nru vdr-1.0.0/debian/config-loader.sh vdr-1.2.6/debian/config-loader.sh --- vdr-1.0.0/debian/config-loader.sh 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/config-loader.sh 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,58 @@ +# +# 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 + +# Change this to 0 if you want to allow VDR to use NPTL (if available). +# This is disabled by default, although it should be safe to enable it. +# (This has no effect on AMD64 machines.) +NONPTL=1 + +test -f /etc/default/vdr && . /etc/default/vdr diff -Nru vdr-1.0.0/debian/control vdr-1.2.6/debian/control --- vdr-1.0.0/debian/control 2002-04-14 12:10:11.000000000 +0200 +++ vdr-1.2.6/debian/control 2006-05-18 20:03:12.000000000 +0200 @@ -1,75 +1,68 @@ Source: vdr Section: misc Priority: extra -Maintainer: Eduard Bloch <blade@debian.org> -Build-Depends: debhelper (>> 3.0.0), dvb-dev, libncurses5-dev, g++, libjpeg62-dev -Standards-Version: 3.5.2 +Maintainer: Debian VDR Team <pkg-vdr-dvb-devel@lists.alioth.debian.org> +Uploaders: Thomas Schmidt <tschmidt@debian.org> +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: i386 -Depends: ${shlibs:Depends}, vdr-kbd | vdr-lirc | vdr-rcu | vdr-daemon -Conflicts: kvdr (<< 0.43), vdr-kbd (<< 1.0.0), vdr-lirc (<< 1.0.0), vdr-daemon (<< 1.0.0) -Description: Video Disk Recorder for DVB-S cards, base package +Architecture: any +Depends: ${misc:Depends}, makedev (>=2.3.1-66), adduser, psmisc +Recommends: lirc +Provides: vdr-daemon, vdr-kbd, vdr-lirc, vdr-rcu +Conflicts: vdr-daemon, vdr-kbd, vdr-lirc, vdr-rcu +Replaces: vdr-daemon, vdr-kbd, vdr-lirc, vdr-rcu +Description: Video Disk Recorder for DVB cards Video Disk Recorder (VDR) is a digital sat-receiver program using - Linux and DVB-S technologies. It allows one to record MPEG2 streams, + 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. + (hardware accelerated) with some comfort and use an 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. + 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-kbd -Architecture: i386 -Depends: ${shlibs:Depends}, vdr (= ${Source-Version}) -Description: Video Disk Recorder for DVB-S cards with keyboard control +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-S technologies. It allows one to record MPEG2 streams, + 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 - with some comfort and hardware acceleration. + (hardware accelerated) with some comfort and use an IR remote control. . - 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. + This package contains the header files of VDR. + You need this package to be able to build vdr-plugins! -Package: vdr-lirc -Architecture: i386 +Package: vdr-plugin-sky +Architecture: any Depends: ${shlibs:Depends}, vdr (= ${Source-Version}) -Description: Video Disk Recorder for DVB-S cards with IR remote control +Description: Plugin for using a Sky Digibox with vdr Video Disk Recorder (VDR) is a digital sat-receiver program using - Linux and DVB-S technologies. It allows one to record MPEG2 streams, - as well as output the stream to TV. It is also possible to watch DVDs - with some comfort and hardware acceleration. + 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. + 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-rcu -Architecture: i386 +Package: vdr-plugin-examples +Architecture: any Depends: ${shlibs:Depends}, vdr (= ${Source-Version}) -Description: Video Disk Recorder for DVB-S cards with RCU control - Video Disk Recorder (VDR) is a digital sat-receiver program using - Linux and DVB-S technologies. It allows one to record MPEG2 streams, - as well as output the stream to TV. It is also possible to watch DVDs - with some comfort and hardware acceleration. - . - 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: i386 -Depends: ${shlibs:Depends}, vdr (= ${Source-Version}), debconf, -Description: Server version of Video Disk Recorder for DVB-S cards +Description: Plugins for vdr to show some possible features Video Disk Recorder (VDR) is a digital sat-receiver program using - Linux and DVB-S technologies. It allows one to record MPEG2 streams, - as well as output the stream to TV. It is also possible to watch DVDs - with some comfort and hardware acceleration. + 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. + 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} diff -Nru vdr-1.0.0/debian/copyright vdr-1.2.6/debian/copyright --- vdr-1.0.0/debian/copyright 2002-04-03 14:39:30.000000000 +0200 +++ vdr-1.2.6/debian/copyright 2006-05-18 20:03:12.000000000 +0200 @@ -1,11 +1,43 @@ -This package was debianized by Eduard Bloch <blade@debian.org> on -Sat, 22 Sep 2001 03:16:11 +0200. +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: -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 . + 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'. + diff -Nru vdr-1.0.0/debian/debianize-vdrplugin vdr-1.2.6/debian/debianize-vdrplugin --- vdr-1.0.0/debian/debianize-vdrplugin 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/debianize-vdrplugin 2006-05-18 20:03:12.000000000 +0200 @@ -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 diff -Nru vdr-1.0.0/debian/debianize-vdrplugin.1 vdr-1.2.6/debian/debianize-vdrplugin.1 --- vdr-1.0.0/debian/debianize-vdrplugin.1 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/debianize-vdrplugin.1 2006-05-18 20:03:12.000000000 +0200 @@ -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. diff -Nru vdr-1.0.0/debian/dirs vdr-1.2.6/debian/dirs --- vdr-1.0.0/debian/dirs 2002-04-03 12:46:01.000000000 +0200 +++ vdr-1.2.6/debian/dirs 1970-01-01 01:00:00.000000000 +0100 @@ -1,2 +0,0 @@ -usr/bin -usr/share/vdr diff -Nru vdr-1.0.0/debian/dvb-driver.config.template vdr-1.2.6/debian/dvb-driver.config.template --- vdr-1.0.0/debian/dvb-driver.config.template 2002-04-03 12:46:01.000000000 +0200 +++ vdr-1.2.6/debian/dvb-driver.config.template 1970-01-01 01:00:00.000000000 +0100 @@ -1,18 +0,0 @@ -#!/bin/sh -e - -# source debconf library -. /usr/share/debconf/confmodule - -db_input high dvb-driver-#KVERS#/note || true -db_input high dvb-driver-#KVERS#/installinit || true - -# ask about device creation if needed -#if [ `ls /dev/ost/*` -lt 40 ] ; then -db_input high dvb-driver-#KVERS#/createdevs || true -#else -# db_set joystick/createdevs false || true -#fi - -# go, go, go! :) -db_go - diff -Nru vdr-1.0.0/debian/lintian/vdr vdr-1.2.6/debian/lintian/vdr --- vdr-1.0.0/debian/lintian/vdr 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/lintian/vdr 2006-05-18 20:03:12.000000000 +0200 @@ -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 diff -Nru vdr-1.0.0/debian/lintian/vdr-dev vdr-1.2.6/debian/lintian/vdr-dev --- vdr-1.0.0/debian/lintian/vdr-dev 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/lintian/vdr-dev 2006-05-18 20:03:12.000000000 +0200 @@ -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 diff -Nru vdr-1.0.0/debian/order.commands.conf vdr-1.2.6/debian/order.commands.conf --- vdr-1.0.0/debian/order.commands.conf 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/order.commands.conf 2006-05-18 20:03:12.000000000 +0200 @@ -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 diff -Nru vdr-1.0.0/debian/order.conf vdr-1.2.6/debian/order.conf --- vdr-1.0.0/debian/order.conf 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/order.conf 2006-05-18 20:03:12.000000000 +0200 @@ -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 diff -Nru vdr-1.0.0/debian/order.reccmds.conf vdr-1.2.6/debian/order.reccmds.conf --- vdr-1.0.0/debian/order.reccmds.conf 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/order.reccmds.conf 2006-05-18 20:03:12.000000000 +0200 @@ -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 diff -Nru vdr-1.0.0/debian/patches/00list vdr-1.2.6/debian/patches/00list --- vdr-1.0.0/debian/patches/00list 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/patches/00list 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,29 @@ +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 +09_amd64_epg +13_remote + +# 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 diff -Nru vdr-1.0.0/debian/patches/01_gcc3.4-FTBFS-fix.dpatch vdr-1.2.6/debian/patches/01_gcc3.4-FTBFS-fix.dpatch --- vdr-1.0.0/debian/patches/01_gcc3.4-FTBFS-fix.dpatch 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/patches/01_gcc3.4-FTBFS-fix.dpatch 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,32 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run + +## 01_gcc3.4-FTBFS-fix.dpatch by Thomas Schmidt <tschmidt@debian.org> +## +## 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(); + } diff -Nru vdr-1.0.0/debian/patches/01_gcc4.0-FTBFS-fix.dpatch vdr-1.2.6/debian/patches/01_gcc4.0-FTBFS-fix.dpatch --- vdr-1.0.0/debian/patches/01_gcc4.0-FTBFS-fix.dpatch 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/patches/01_gcc4.0-FTBFS-fix.dpatch 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,235 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 01_gcc4.0-FTBFS-fix.dpatch by Thomas Schmidt <tschmidt@debian.org> +## +## 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) diff -Nru vdr-1.0.0/debian/patches/01_vdr_1.2.6-3.1.diff.gz.dpatch vdr-1.2.6/debian/patches/01_vdr_1.2.6-3.1.diff.gz.dpatch --- vdr-1.0.0/debian/patches/01_vdr_1.2.6-3.1.diff.gz.dpatch 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/patches/01_vdr_1.2.6-3.1.diff.gz.dpatch 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,52 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run + +## 01_vdr_1.2.6-3.1.diff.gz.dpatch by Thomas Schmidt <tschmidt@debian.org> +## +## 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: + diff -Nru vdr-1.0.0/debian/patches/02_Makefile-CFGDIR.dpatch vdr-1.2.6/debian/patches/02_Makefile-CFGDIR.dpatch --- vdr-1.0.0/debian/patches/02_Makefile-CFGDIR.dpatch 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/patches/02_Makefile-CFGDIR.dpatch 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,39 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run + +## 01_Makefile-CFGDIR.dpatch by Thomas Schmidt <tschmidt@debian.org> +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Allow default config dir to be set as define. + +@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); + diff -Nru vdr-1.0.0/debian/patches/03_cmdsubmenu.dpatch vdr-1.2.6/debian/patches/03_cmdsubmenu.dpatch --- vdr-1.0.0/debian/patches/03_cmdsubmenu.dpatch 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/patches/03_cmdsubmenu.dpatch 2006-05-18 20:03:12.000000000 +0200 @@ -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); diff -Nru vdr-1.0.0/debian/patches/04_newplugin.dpatch vdr-1.2.6/debian/patches/04_newplugin.dpatch --- vdr-1.0.0/debian/patches/04_newplugin.dpatch 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/patches/04_newplugin.dpatch 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,49 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 04_newplugin.dpatch by Thomas Schmidt <tschmidt@debian.org> +## +## 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 + + }; + diff -Nru vdr-1.0.0/debian/patches/05_set_system_time_as_user.dpatch vdr-1.2.6/debian/patches/05_set_system_time_as_user.dpatch --- vdr-1.0.0/debian/patches/05_set_system_time_as_user.dpatch 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/patches/05_set_system_time_as_user.dpatch 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,198 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 05_set_system_time_as_user.dpatch by Thomas Schmidt <tschmidt@debian.org> +## +## 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) diff -Nru vdr-1.0.0/debian/patches/06_default_svdrp_port_0.dpatch vdr-1.2.6/debian/patches/06_default_svdrp_port_0.dpatch --- vdr-1.0.0/debian/patches/06_default_svdrp_port_0.dpatch 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/patches/06_default_svdrp_port_0.dpatch 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,21 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 06_default_svdrp_port_0.dpatch by Thomas Schmidt <tschmidt@debian.org> +## +## 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 + diff -Nru vdr-1.0.0/debian/patches/07_not_as_root.dpatch vdr-1.2.6/debian/patches/07_not_as_root.dpatch --- vdr-1.0.0/debian/patches/07_not_as_root.dpatch 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/patches/07_not_as_root.dpatch 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,101 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 07_not_as_root.dpatch by Thomas Schmidt <tschmidt@debian.org> +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Refuse to run vdr as user root, except when using the +## DP: --allow-root option + +@DPATCH@ +diff -urNad vdr/vdr.c /tmp/dpep.Qz74kG/vdr/vdr.c +--- vdr/vdr.c 2005-04-10 15:51:35.000000000 +0200 ++++ /tmp/dpep.Qz74kG/vdr/vdr.c 2005-04-10 15:53:03.000000000 +0200 +@@ -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" +@@ -202,8 +203,10 @@ + cPluginManager PluginManager(DEFAULTPLUGINDIR); + const char* username = NULL; + const char* groupname = NULL; ++ bool IsAllowRootAnyway = false; + + static struct option long_options[] = { ++ { "allow-root",no_argument, NULL, '!' }, + { "audio", required_argument, NULL, 'a' }, + { "config", required_argument, NULL, 'c' }, + { "daemon", no_argument, NULL, 'd' }, +@@ -321,16 +324,36 @@ + break; + case 'g': groupname = optarg; + break; ++ case '!': IsAllowRootAnyway = true; ++ break; + default: return 2; + } + } + ++ // 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 || IsAllowRootAnyway) { ++ 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 +397,7 @@ + } + if (DisplayVersion) + printf("vdr (%s) - The Video Disk Recorder\n", VDRVERSION); +- if (PluginManager.HasPlugins()) { ++ if ((!IsRoot || IsAllowRootAnyway) && PluginManager.HasPlugins()) { + if (DisplayHelp) + printf("Plugins: vdr -P\"name [OPTIONS]\"\n\n"); + for (int i = 0; ; i++) { +@@ -394,9 +417,20 @@ + return 0; + } + ++ if (IsRoot) { ++ if (IsAllowRootAnyway) { ++ char* rootWarning="Warning! VDR started with root privileges"; ++ isyslog(rootWarning); ++ fprintf(stderr, "%s\n", rootWarning); ++ } else { ++ 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 ()) { ++ if (!IsAllowRootAnyway && (!getuid () || !getgid () || !geteuid () || !getegid ())) { + if(username && set_keepcaps() != 0) + return 2; + diff -Nru vdr-1.0.0/debian/patches/08_security_CAN-2005-0071.dpatch vdr-1.2.6/debian/patches/08_security_CAN-2005-0071.dpatch --- vdr-1.0.0/debian/patches/08_security_CAN-2005-0071.dpatch 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/patches/08_security_CAN-2005-0071.dpatch 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,34 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 08_security_CAN-2005-0071.dpatch by Thomas Schmidt <tschmidt@debian.org> +## +## 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; diff -Nru vdr-1.0.0/debian/patches/09_amd64_epg.dpatch vdr-1.2.6/debian/patches/09_amd64_epg.dpatch --- vdr-1.0.0/debian/patches/09_amd64_epg.dpatch 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/patches/09_amd64_epg.dpatch 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,29 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 09_amd64_epg.dpatch by Thomas Schmidt <tschmidt@debian.org> +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Fixes the crc function to work under amd64 too +## DP: (closes: #300702) + +@DPATCH@ +diff -urNad vdr-1.2.6/libdtv/libsi/si_parser.c /tmp/dpep.Y5cRRE/vdr-1.2.6/libdtv/libsi/si_parser.c +--- vdr-1.2.6/libdtv/libsi/si_parser.c 2003-08-15 15:56:02.000000000 +0200 ++++ /tmp/dpep.Y5cRRE/vdr-1.2.6/libdtv/libsi/si_parser.c 2005-03-21 18:13:17.285886176 +0100 +@@ -1278,7 +1278,7 @@ + + // CRC32 lookup table for polynomial 0x04c11db7 + +-static u_long crc_table[256] = { ++static __u32 crc_table[256] = { + 0x00000000, 0x04c11db7, 0x09823b6e, 0x0d4326d9, 0x130476dc, 0x17c56b6b, + 0x1a864db2, 0x1e475005, 0x2608edb8, 0x22c9f00f, 0x2f8ad6d6, 0x2b4bcb61, + 0x350c9b64, 0x31cd86d3, 0x3c8ea00a, 0x384fbdbd, 0x4c11db70, 0x48d0c6c7, +@@ -1326,7 +1326,7 @@ + static u_long crc32 (char *data, int len) + { + register int i; +- u_long crc = 0xffffffff; ++ __u32 crc = 0xffffffff; + + for (i=0; i<len; i++) + crc = (crc << 8) ^ crc_table[((crc >> 24) ^ *data++) & 0xff]; diff -Nru vdr-1.0.0/debian/patches/13_remote.dpatch vdr-1.2.6/debian/patches/13_remote.dpatch --- vdr-1.0.0/debian/patches/13_remote.dpatch 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/patches/13_remote.dpatch 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,121 @@ +#! /bin/sh /usr/share/dpatch/dpatch-run +## 01_remote.dpatch by <ds@flibble.youmustbejoking.demon.co.uk> +## +## All lines beginning with `## DP:' are a description of the patch. +## DP: Consolidate input device handling. + +@DPATCH@ +diff -urNad vdr-1.2.6/Makefile /tmp/dpep.8j05le/vdr-1.2.6/Makefile +--- vdr-1.2.6/Makefile 2005-02-27 00:02:04.864404216 +0100 ++++ /tmp/dpep.8j05le/vdr-1.2.6/Makefile 2005-02-27 00:02:05.231348432 +0100 +@@ -43,11 +43,10 @@ + OSDFONT = -adobe-helvetica-medium-r-normal--23-*-100-100-p-*-iso8859-1 + FIXFONT = -adobe-courier-bold-r-normal--25-*-100-100-m-*-iso8859-1 + +-ifndef NO_KBD +-DEFINES += -DREMOTE_KBD +-endif ++REMOTE_LIRC ?= /dev/lircd ++REMOTE_RCU ?= /dev/ttyS1 + +-DEFINES += -DREMOTE_$(REMOTE) ++DEFINES += -DREMOTE_RCU=\"$(REMOTE_RCU)\" -DREMOTE_LIRC=\"$(REMOTE_LIRC)\" + + DEFINES += -DCMD_SUBMENUS + DEFINES += -D_GNU_SOURCE +diff -urNad vdr-1.2.6/vdr.1 /tmp/dpep.8j05le/vdr-1.2.6/vdr.1 +--- vdr-1.2.6/vdr.1 2003-05-29 13:58:28.000000000 +0200 ++++ /tmp/dpep.8j05le/vdr-1.2.6/vdr.1 2005-02-27 00:06:28.218368328 +0100 +@@ -45,8 +45,19 @@ + Read config files from directory \fIdir\fR + (default is to read them from the video directory). + .TP +-.B -d, --daemon +-Run in daemon mode. ++.B \-d, \-\-daemon ++Run in daemon mode. (This implies \-\-no\-kbd.) ++.TP ++.B \-\-no\-kbd ++Don't use the keyboard as an input device. ++.TP ++.BI \-\-lirc [=DEVICE] ++If this option is present, vdr will use a LIRC remote control device. ++If the device name is omitted, vdr uses \fI/dev/lircd\fR. ++.TP ++.BI \-\-rcu [=DEVICE] ++If this option is present, vdr will use a serial port remote control device. ++If the device name is omitted, vdr uses \fI/dev/ttyS1\fR. + .TP + .BI -D\ num ,\ --device= num + Use only the given DVB device (\fInum\fR = 0, 1, 2...). +diff -urNad vdr-1.2.6/vdr.c /tmp/dpep.8j05le/vdr-1.2.6/vdr.c +--- vdr-1.2.6/vdr.c 2005-02-27 00:02:04.889400416 +0100 ++++ /tmp/dpep.8j05le/vdr-1.2.6/vdr.c 2005-02-27 00:09:23.444729872 +0100 +@@ -200,6 +200,8 @@ + int WatchdogTimeout = DEFAULTWATCHDOG; + const char *Terminal = NULL; + const char *Shutdown = NULL; ++ const char *rcu = NULL, *lirc = NULL; ++ int kbd = 1; + cPluginManager PluginManager(DEFAULTPLUGINDIR); + const char* username = NULL; + const char* groupname = NULL; +@@ -224,6 +226,9 @@ + { "watchdog", required_argument, NULL, 'w' }, + { "user", required_argument, NULL, 'u' }, + { "group", required_argument, NULL, 'g' }, ++ { "no-kbd", no_argument, NULL, 'k'&31 }, ++ { "rcu", optional_argument, NULL, 'r'&31 }, ++ { "lirc", optional_argument, NULL, 'l'&31 }, + { NULL } + }; + +@@ -322,6 +327,15 @@ + break; + case 'g': groupname = optarg; + break; ++ case 'k'&31: ++ kbd = 0; ++ break; ++ case 'r'&31: ++ rcu = optarg ? : REMOTE_RCU; ++ break; ++ case 'l'&31: ++ lirc = optarg ? : REMOTE_LIRC; ++ break; + default: return 2; + } + } +@@ -383,6 +397,11 @@ + " 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" ++ " --no-kbd don't use the keyboard as an input device\n" ++ " --rcu[=PATH] use a remote control device, attached to PATH\n" ++ " (default: " REMOTE_RCU ")\n" ++ " --lirc[=PATH] use a LIRC remote control device, attached to PATH\n" ++ " (default: " REMOTE_LIRC ")\n" + "\n", + cSIProcessor::GetEpgDataFileName() ? cSIProcessor::GetEpgDataFileName() : "'-'", + DEFAULTPLUGINDIR, +@@ -555,15 +574,12 @@ + return 2; + + // Remote Controls: +-#if defined(REMOTE_RCU) +- new cRcuRemote("/dev/ttyS1"); +-#elif defined(REMOTE_LIRC) +- new cLircRemote("/dev/lircd"); +-#endif +-#if defined(REMOTE_KBD) +- if (!DaemonMode && HasStdin) ++ if (rcu) ++ new cRcuRemote((char*)rcu); ++ if (lirc) ++ new cLircRemote((char*)lirc); ++ if (!DaemonMode && HasStdin && kbd) + new cKbdRemote; +-#endif + Interface->LearnKeys(); + + // External audio: diff -Nru vdr-1.0.0/debian/patches/opt-20_elchiaio4d+1.dpatch vdr-1.2.6/debian/patches/opt-20_elchiaio4d+1.dpatch --- vdr-1.0.0/debian/patches/opt-20_elchiaio4d+1.dpatch 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/patches/opt-20_elchiaio4d+1.dpatch 2006-05-18 20:03:12.000000000 +0200 @@ -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 -urNad vdr-1.2.6/config.c /tmp/dpep.R4020h/vdr-1.2.6/config.c +--- vdr-1.2.6/config.c 2005-02-27 00:58:27.417178032 +0100 ++++ /tmp/dpep.R4020h/vdr-1.2.6/config.c 2005-02-27 00:58:28.012087592 +0100 +@@ -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 -urNad vdr-1.2.6/config.h /tmp/dpep.R4020h/vdr-1.2.6/config.h +--- vdr-1.2.6/config.h 2005-02-27 00:58:27.493166480 +0100 ++++ /tmp/dpep.R4020h/vdr-1.2.6/config.h 2005-02-27 00:58:28.013087440 +0100 +@@ -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 -urNad vdr-1.2.6/dvbplayer.c /tmp/dpep.R4020h/vdr-1.2.6/dvbplayer.c +--- vdr-1.2.6/dvbplayer.c 2003-05-24 11:04:26.000000000 +0200 ++++ /tmp/dpep.R4020h/vdr-1.2.6/dvbplayer.c 2005-02-27 00:58:28.013087440 +0100 +@@ -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 -urNad vdr-1.2.6/eit.c /tmp/dpep.R4020h/vdr-1.2.6/eit.c +--- vdr-1.2.6/eit.c 2003-10-12 13:05:42.000000000 +0200 ++++ /tmp/dpep.R4020h/vdr-1.2.6/eit.c 2005-02-27 00:58:28.015087136 +0100 +@@ -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 -urNad vdr-1.2.6/eit.h /tmp/dpep.R4020h/vdr-1.2.6/eit.h +--- vdr-1.2.6/eit.h 2003-05-17 11:15:56.000000000 +0200 ++++ /tmp/dpep.R4020h/vdr-1.2.6/eit.h 2005-02-27 00:58:28.015087136 +0100 +@@ -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 -urNad vdr-1.2.6/font.c /tmp/dpep.R4020h/vdr-1.2.6/font.c +--- vdr-1.2.6/font.c 2000-11-18 16:16:08.000000000 +0100 ++++ /tmp/dpep.R4020h/vdr-1.2.6/font.c 2005-02-27 00:58:28.016086984 +0100 +@@ -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 -urNad vdr-1.2.6/font.h /tmp/dpep.R4020h/vdr-1.2.6/font.h +--- vdr-1.2.6/font.h 2000-11-18 15:51:45.000000000 +0100 ++++ /tmp/dpep.R4020h/vdr-1.2.6/font.h 2005-02-27 00:58:28.016086984 +0100 +@@ -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 -urNad vdr-1.2.6/fontsml.c /tmp/dpep.R4020h/vdr-1.2.6/fontsml.c +--- vdr-1.2.6/fontsml.c 1970-01-01 01:00:00.000000000 +0100 ++++ /tmp/dpep.R4020h/vdr-1.2.6/fontsml.c 2005-02-27 00:58:28.022086072 +0100 +@@ -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 -urNad vdr-1.2.6/fontsym.c /tmp/dpep.R4020h/vdr-1.2.6/fontsym.c +--- vdr-1.2.6/fontsym.c 1970-01-01 01:00:00.000000000 +0100 ++++ /tmp/dpep.R4020h/vdr-1.2.6/fontsym.c 2005-02-27 00:58:28.025085616 +0100 +@@ -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 -urNad vdr-1.2.6/HISTORY-ElchiAIO /tmp/dpep.R4020h/vdr-1.2.6/HISTORY-ElchiAIO +--- vdr-1.2.6/HISTORY-ElchiAIO 1970-01-01 01:00:00.000000000 +0100 ++++ /tmp/dpep.R4020h/vdr-1.2.6/HISTORY-ElchiAIO 2005-02-27 00:58:28.026085464 +0100 +@@ -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 -urNad vdr-1.2.6/i18n.c /tmp/dpep.R4020h/vdr-1.2.6/i18n.c +--- vdr-1.2.6/i18n.c 2003-09-11 15:51:56.000000000 +0200 ++++ /tmp/dpep.R4020h/vdr-1.2.6/i18n.c 2005-02-27 00:58:28.028085160 +0100 +@@ -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 -urNad vdr-1.2.6/interface.c /tmp/dpep.R4020h/vdr-1.2.6/interface.c +--- vdr-1.2.6/interface.c 2003-10-24 16:38:08.000000000 +0200 ++++ /tmp/dpep.R4020h/vdr-1.2.6/interface.c 2005-02-27 00:58:28.029085008 +0100 +@@ -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 -urNad vdr-1.2.6/interface.h /tmp/dpep.R4020h/vdr-1.2.6/interface.h +--- vdr-1.2.6/interface.h 2003-10-05 11:42:53.000000000 +0200 ++++ /tmp/dpep.R4020h/vdr-1.2.6/interface.h 2005-02-27 00:58:28.029085008 +0100 +@@ -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 -urNad vdr-1.2.6/Makefile /tmp/dpep.R4020h/vdr-1.2.6/Makefile +--- vdr-1.2.6/Makefile 2005-02-27 00:58:27.457171952 +0100 ++++ /tmp/dpep.R4020h/vdr-1.2.6/Makefile 2005-02-27 00:58:47.472129216 +0100 +@@ -39,6 +39,9 @@ + 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 + ++# ElchiAIO ++OBJS += theme.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 -urNad vdr-1.2.6/menu.c /tmp/dpep.R4020h/vdr-1.2.6/menu.c +--- vdr-1.2.6/menu.c 2005-02-27 00:58:27.444173928 +0100 ++++ /tmp/dpep.R4020h/vdr-1.2.6/menu.c 2005-02-27 00:58:28.033084400 +0100 +@@ -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 -urNad vdr-1.2.6/menu.h /tmp/dpep.R4020h/vdr-1.2.6/menu.h +--- vdr-1.2.6/menu.h 2003-08-03 11:37:18.000000000 +0200 ++++ /tmp/dpep.R4020h/vdr-1.2.6/menu.h 2005-02-27 00:58:28.033084400 +0100 +@@ -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 -urNad vdr-1.2.6/menuitems.c /tmp/dpep.R4020h/vdr-1.2.6/menuitems.c +--- vdr-1.2.6/menuitems.c 2003-04-12 11:21:33.000000000 +0200 ++++ /tmp/dpep.R4020h/vdr-1.2.6/menuitems.c 2005-02-27 00:58:28.034084248 +0100 +@@ -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 -urNad vdr-1.2.6/menuitems.h /tmp/dpep.R4020h/vdr-1.2.6/menuitems.h +--- vdr-1.2.6/menuitems.h 2003-01-12 16:06:23.000000000 +0100 ++++ /tmp/dpep.R4020h/vdr-1.2.6/menuitems.h 2005-02-27 00:58:28.035084096 +0100 +@@ -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 -urNad vdr-1.2.6/osdbase.c /tmp/dpep.R4020h/vdr-1.2.6/osdbase.c +--- vdr-1.2.6/osdbase.c 2003-08-24 13:38:27.000000000 +0200 ++++ /tmp/dpep.R4020h/vdr-1.2.6/osdbase.c 2005-02-27 00:58:28.035084096 +0100 +@@ -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 -urNad vdr-1.2.6/osdbase.h /tmp/dpep.R4020h/vdr-1.2.6/osdbase.h +--- vdr-1.2.6/osdbase.h 2002-09-08 16:12:41.000000000 +0200 ++++ /tmp/dpep.R4020h/vdr-1.2.6/osdbase.h 2005-02-27 00:58:28.036083944 +0100 +@@ -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 -urNad vdr-1.2.6/osd.c /tmp/dpep.R4020h/vdr-1.2.6/osd.c +--- vdr-1.2.6/osd.c 2003-06-04 18:13:00.000000000 +0200 ++++ /tmp/dpep.R4020h/vdr-1.2.6/osd.c 2005-02-27 00:58:28.036083944 +0100 +@@ -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 -urNad vdr-1.2.6/osd.h /tmp/dpep.R4020h/vdr-1.2.6/osd.h +--- vdr-1.2.6/osd.h 2003-09-14 12:59:22.000000000 +0200 ++++ /tmp/dpep.R4020h/vdr-1.2.6/osd.h 2005-02-27 00:58:28.079077408 +0100 +@@ -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 -urNad vdr-1.2.6/recorder.c /tmp/dpep.R4020h/vdr-1.2.6/recorder.c +--- vdr-1.2.6/recorder.c 2003-08-02 15:01:19.000000000 +0200 ++++ /tmp/dpep.R4020h/vdr-1.2.6/recorder.c 2005-02-27 00:58:28.079077408 +0100 +@@ -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 -urNad vdr-1.2.6/recording.c /tmp/dpep.R4020h/vdr-1.2.6/recording.c +--- vdr-1.2.6/recording.c 2003-11-08 16:25:35.000000000 +0100 ++++ /tmp/dpep.R4020h/vdr-1.2.6/recording.c 2005-02-27 00:58:28.080077256 +0100 +@@ -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 -urNad vdr-1.2.6/recording.h /tmp/dpep.R4020h/vdr-1.2.6/recording.h +--- vdr-1.2.6/recording.h 2003-10-17 16:27:36.000000000 +0200 ++++ /tmp/dpep.R4020h/vdr-1.2.6/recording.h 2005-02-27 00:58:28.080077256 +0100 +@@ -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 -urNad vdr-1.2.6/remux.c /tmp/dpep.R4020h/vdr-1.2.6/remux.c +--- vdr-1.2.6/remux.c 2003-09-14 12:34:39.000000000 +0200 ++++ /tmp/dpep.R4020h/vdr-1.2.6/remux.c 2005-02-27 00:58:28.081077104 +0100 +@@ -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 -urNad vdr-1.2.6/theme.c /tmp/dpep.R4020h/vdr-1.2.6/theme.c +--- vdr-1.2.6/theme.c 1970-01-01 01:00:00.000000000 +0100 ++++ /tmp/dpep.R4020h/vdr-1.2.6/theme.c 2005-02-27 00:58:28.082076952 +0100 +@@ -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 -urNad vdr-1.2.6/theme.h /tmp/dpep.R4020h/vdr-1.2.6/theme.h +--- vdr-1.2.6/theme.h 1970-01-01 01:00:00.000000000 +0100 ++++ /tmp/dpep.R4020h/vdr-1.2.6/theme.h 2005-02-27 00:58:28.082076952 +0100 +@@ -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 -urNad vdr-1.2.6/timers.c /tmp/dpep.R4020h/vdr-1.2.6/timers.c +--- vdr-1.2.6/timers.c 2003-10-12 12:33:09.000000000 +0200 ++++ /tmp/dpep.R4020h/vdr-1.2.6/timers.c 2005-02-27 00:58:28.082076952 +0100 +@@ -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 -urNad vdr-1.2.6/timers.h /tmp/dpep.R4020h/vdr-1.2.6/timers.h +--- vdr-1.2.6/timers.h 2003-05-11 15:35:53.000000000 +0200 ++++ /tmp/dpep.R4020h/vdr-1.2.6/timers.h 2005-02-27 00:58:28.082076952 +0100 +@@ -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 -urNad vdr-1.2.6/tools.c /tmp/dpep.R4020h/vdr-1.2.6/tools.c +--- vdr-1.2.6/tools.c 2003-04-06 17:31:45.000000000 +0200 ++++ /tmp/dpep.R4020h/vdr-1.2.6/tools.c 2005-02-27 00:58:28.083076800 +0100 +@@ -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 -urNad vdr-1.2.6/transfer.c /tmp/dpep.R4020h/vdr-1.2.6/transfer.c +--- vdr-1.2.6/transfer.c 2003-08-31 14:19:16.000000000 +0200 ++++ /tmp/dpep.R4020h/vdr-1.2.6/transfer.c 2005-02-27 00:58:28.083076800 +0100 +@@ -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 -urNad vdr-1.2.6/vdr.c /tmp/dpep.R4020h/vdr-1.2.6/vdr.c +--- vdr-1.2.6/vdr.c 2005-02-27 00:58:27.457171952 +0100 ++++ /tmp/dpep.R4020h/vdr-1.2.6/vdr.c 2005-02-27 00:58:28.084076648 +0100 +@@ -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(); diff -Nru vdr-1.0.0/debian/patches/opt-21_ttxtsubs.dpatch vdr-1.2.6/debian/patches/opt-21_ttxtsubs.dpatch --- vdr-1.0.0/debian/patches/opt-21_ttxtsubs.dpatch 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/patches/opt-21_ttxtsubs.dpatch 2006-05-18 20:03:12.000000000 +0200 @@ -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 diff -Nru vdr-1.0.0/debian/patches/opt-22_8bitcolor.dpatch vdr-1.2.6/debian/patches/opt-22_8bitcolor.dpatch --- vdr-1.0.0/debian/patches/opt-22_8bitcolor.dpatch 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/patches/opt-22_8bitcolor.dpatch 2006-05-18 20:03:12.000000000 +0200 @@ -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; diff -Nru vdr-1.0.0/debian/patches/opt-23_osdpip-0.0.3.dpatch vdr-1.2.6/debian/patches/opt-23_osdpip-0.0.3.dpatch --- vdr-1.0.0/debian/patches/opt-23_osdpip-0.0.3.dpatch 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/patches/opt-23_osdpip-0.0.3.dpatch 2006-05-18 20:03:12.000000000 +0200 @@ -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); diff -Nru vdr-1.0.0/debian/patches/opt-24_jumpplay-0.4.dpatch vdr-1.2.6/debian/patches/opt-24_jumpplay-0.4.dpatch --- vdr-1.0.0/debian/patches/opt-24_jumpplay-0.4.dpatch 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/patches/opt-24_jumpplay-0.4.dpatch 2006-05-18 20:03:12.000000000 +0200 @@ -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; diff -Nru vdr-1.0.0/debian/patches/security-compatibility-videodir.diff vdr-1.2.6/debian/patches/security-compatibility-videodir.diff --- vdr-1.0.0/debian/patches/security-compatibility-videodir.diff 2002-04-03 13:12:07.000000000 +0200 +++ vdr-1.2.6/debian/patches/security-compatibility-videodir.diff 1970-01-01 01:00:00.000000000 +0100 @@ -1,78 +0,0 @@ ---- vdr-0.98+1.0.0pre5.orig/Makefile -+++ vdr-0.98+1.0.0pre5/Makefile -@@ -55,7 +55,7 @@ - # Implicit rules: - - %.o: %.c -- g++ -g -O2 -Wall -Woverloaded-virtual -m486 -c $(DEFINES) $(INCLUDES) $< -+ g++ -g -O2 -Wall -Woverloaded-virtual -c $(DEFINES) $(INCLUDES) $< - - # Dependencies: - ---- vdr-0.98+1.0.0pre5.orig/vdr.c -+++ vdr-0.98+1.0.0pre5/vdr.c -@@ -39,6 +39,7 @@ - #include "recording.h" - #include "tools.h" - #include "videodir.h" -+#include <string.h> - - #ifdef REMOTE_KBD - #define KEYS_CONF "keys-pc.conf" -@@ -77,7 +78,12 @@ - - // Command line options: - -+// changed by the Debian maintainer -+/*#if defined(REMOTE_NONE) - #define DEFAULTSVDRPPORT 2001 -+#else */ -+#define DEFAULTSVDRPPORT 0 -+/*#endif */ - #define DEFAULTWATCHDOG 0 // seconds - - int SVDRPport = DEFAULTSVDRPPORT; -@@ -87,6 +93,7 @@ - int WatchdogTimeout = DEFAULTWATCHDOG; - const char *Terminal = NULL; - const char *Shutdown = NULL; -+ VideoDirectory = getenv("HOME"); - - static struct option long_options[] = { - { "audio", required_argument, NULL, 'a' }, -@@ -177,7 +184,7 @@ - break; - case 'p': if (isnumber(optarg)) - SVDRPport = atoi(optarg); -- else { -+ else { - fprintf(stderr, "vdr: invalid port number: %s\n", optarg); - return 2; - } -@@ -254,6 +261,16 @@ - - if (!ConfigDirectory) - ConfigDirectory = VideoDirectory; -+ -+ /* added by Debian maintainer: installs a template of the channel.conf file */ -+ char *bla, *bla2, *bla3; -+ bla = (char *) malloc (strlen(ConfigDirectory) + 120); -+ strcpy(bla, ConfigDirectory); -+ strcat(bla,"/channels.conf"); -+ bla2 = strdup(bla); -+ bla3= strdup(bla); -+ sprintf(bla, "if [ -f /usr/share/doc/vdr/examples/channels.conf.gz -a ! -f %s ] ; then zcat /usr/share/doc/vdr/examples/channels.conf.gz >> %s ; fi", bla2, bla3); -+ system(bla); - - Setup.Load(AddDirectory(ConfigDirectory, "setup.conf")); - Channels.Load(AddDirectory(ConfigDirectory, "channels.conf")); ---- vdr-0.98+1.0.0pre5.orig/videodir.c -+++ vdr-0.98+1.0.0pre5/videodir.c -@@ -39,6 +39,7 @@ - - cVideoDirectory::cVideoDirectory(void) - { -+// VideoDirectory = getenv("HOME"); - length = strlen(VideoDirectory); - name = (VideoDirectory[length - 1] == '0') ? strdup(VideoDirectory) : NULL; - stored = adjusted = NULL; diff -Nru vdr-1.0.0/debian/patches/security-z50_CAN-2005-0071_fopen vdr-1.2.6/debian/patches/security-z50_CAN-2005-0071_fopen --- vdr-1.0.0/debian/patches/security-z50_CAN-2005-0071_fopen 2005-01-16 15:43:59.000000000 +0100 +++ vdr-1.2.6/debian/patches/security-z50_CAN-2005-0071_fopen 1970-01-01 01:00:00.000000000 +0100 @@ -1,26 +0,0 @@ -diff -u -p -Nr --exclude CVS vdr-1.0.0.orig/dvbapi.c vdr-1.0.0/dvbapi.c ---- vdr-1.0.0.orig/dvbapi.c 2002-04-07 11:35:51.000000000 +0200 -+++ vdr-1.0.0/dvbapi.c 2005-01-16 15:41:39.000000000 +0100 -@@ -1987,8 +1987,10 @@ bool cDvbApi::GrabImage(const char *File - Quality = 255; //XXX is this 'best'??? - - isyslog(LOG_INFO, "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, 0600); -+ if (fd > -1) { -+ FILE *f = fdopen(fd, "wb"); -+ if (f) { - if (Jpeg) { - // write JPEG file: - struct jpeg_compress_struct cinfo; -@@ -2022,7 +2024,8 @@ bool cDvbApi::GrabImage(const char *File - } - } - fclose(f); -- } -+ } -+ } - else { - LOG_ERROR_STR(FileName); - result |= 1; diff -Nru vdr-1.0.0/debian/patchlevel.sh vdr-1.2.6/debian/patchlevel.sh --- vdr-1.0.0/debian/patchlevel.sh 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/patchlevel.sh 2006-05-18 20:03:12.000000000 +0200 @@ -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 diff -Nru vdr-1.0.0/debian/plugin-loader.sh vdr-1.2.6/debian/plugin-loader.sh --- vdr-1.0.0/debian/plugin-loader.sh 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/plugin-loader.sh 2006-05-18 20:03:12.000000000 +0200 @@ -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 $OPTIONS -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 +} diff -Nru vdr-1.0.0/debian/plugin-template/changelog vdr-1.2.6/debian/plugin-template/changelog --- vdr-1.0.0/debian/plugin-template/changelog 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/plugin-template/changelog 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,6 @@ +vdr-plugin-#PACKAGE# (#VERSION#-1) unstable; urgency=low + + * Initial Release. + + -- #USERNAME# <#EMAIL#> #DATE# + diff -Nru vdr-1.0.0/debian/plugin-template/compat vdr-1.2.6/debian/plugin-template/compat --- vdr-1.0.0/debian/plugin-template/compat 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/plugin-template/compat 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1 @@ +4 diff -Nru vdr-1.0.0/debian/plugin-template/control vdr-1.2.6/debian/plugin-template/control --- vdr-1.0.0/debian/plugin-template/control 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/plugin-template/control 2006-05-18 20:03:12.000000000 +0200 @@ -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} diff -Nru vdr-1.0.0/debian/plugin-template/copyright vdr-1.2.6/debian/plugin-template/copyright --- vdr-1.0.0/debian/plugin-template/copyright 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/plugin-template/copyright 2006-05-18 20:03:12.000000000 +0200 @@ -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 . diff -Nru vdr-1.0.0/debian/plugin-template/docs vdr-1.2.6/debian/plugin-template/docs --- vdr-1.0.0/debian/plugin-template/docs 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/plugin-template/docs 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1 @@ +README diff -Nru vdr-1.0.0/debian/plugin-template/install vdr-1.2.6/debian/plugin-template/install --- vdr-1.0.0/debian/plugin-template/install 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/plugin-template/install 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1 @@ +libvdr-#PACKAGE#.so.* usr/lib/vdr/plugins/ diff -Nru vdr-1.0.0/debian/plugin-template/links.ex vdr-1.2.6/debian/plugin-template/links.ex --- vdr-1.0.0/debian/plugin-template/links.ex 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/plugin-template/links.ex 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1 @@ +usr/share/vdr-plugin-#PACKAGE#/#PACKAGE# /var/lib/vdr/plugins/#PACKAGE# diff -Nru vdr-1.0.0/debian/plugin-template/postinst.ex vdr-1.2.6/debian/plugin-template/postinst.ex --- vdr-1.0.0/debian/plugin-template/postinst.ex 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/plugin-template/postinst.ex 2006-05-18 20:03:12.000000000 +0200 @@ -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 + + diff -Nru vdr-1.0.0/debian/plugin-template/postrm.ex vdr-1.2.6/debian/plugin-template/postrm.ex --- vdr-1.0.0/debian/plugin-template/postrm.ex 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/plugin-template/postrm.ex 2006-05-18 20:03:12.000000000 +0200 @@ -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 diff -Nru vdr-1.0.0/debian/plugin-template/preinst.ex vdr-1.2.6/debian/plugin-template/preinst.ex --- vdr-1.0.0/debian/plugin-template/preinst.ex 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/plugin-template/preinst.ex 2006-05-18 20:03:12.000000000 +0200 @@ -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 + + diff -Nru vdr-1.0.0/debian/plugin-template/prerm.ex vdr-1.2.6/debian/plugin-template/prerm.ex --- vdr-1.0.0/debian/plugin-template/prerm.ex 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/plugin-template/prerm.ex 2006-05-18 20:03:12.000000000 +0200 @@ -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 + + diff -Nru vdr-1.0.0/debian/plugin-template/README.Debian vdr-1.2.6/debian/plugin-template/README.Debian --- vdr-1.0.0/debian/plugin-template/README.Debian 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/plugin-template/README.Debian 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,6 @@ +vdr-plugin-#PACKAGE# for Debian +-----------#DASHLINE# + +<possible notes regarding this package - if none, delete this file> + + -- #USERNAME# <#EMAIL#>, #DATE# diff -Nru vdr-1.0.0/debian/plugin-template/rules vdr-1.2.6/debian/plugin-template/rules --- vdr-1.0.0/debian/plugin-template/rules 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/plugin-template/rules 2006-05-18 20:03:12.000000000 +0200 @@ -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 diff -Nru vdr-1.0.0/debian/plugin-template/watch.ex vdr-1.2.6/debian/plugin-template/watch.ex --- vdr-1.0.0/debian/plugin-template/watch.ex 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/plugin-template/watch.ex 2006-05-18 20:03:12.000000000 +0200 @@ -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 diff -Nru vdr-1.0.0/debian/po/cs.po vdr-1.2.6/debian/po/cs.po --- vdr-1.0.0/debian/po/cs.po 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/po/cs.po 2006-05-18 20:03:12.000000000 +0200 @@ -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." diff -Nru vdr-1.0.0/debian/po/de.po vdr-1.2.6/debian/po/de.po --- vdr-1.0.0/debian/po/de.po 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/po/de.po 2006-05-18 20:03:12.000000000 +0200 @@ -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." diff -Nru vdr-1.0.0/debian/po/fr.po vdr-1.2.6/debian/po/fr.po --- vdr-1.0.0/debian/po/fr.po 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/po/fr.po 2006-05-18 20:03:12.000000000 +0200 @@ -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." diff -Nru vdr-1.0.0/debian/po/nl.po vdr-1.2.6/debian/po/nl.po --- vdr-1.0.0/debian/po/nl.po 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/po/nl.po 2006-05-18 20:03:12.000000000 +0200 @@ -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." diff -Nru vdr-1.0.0/debian/po/POTFILES.in vdr-1.2.6/debian/po/POTFILES.in --- vdr-1.0.0/debian/po/POTFILES.in 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/po/POTFILES.in 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1 @@ +[type: gettext/rfc822deb] vdr.templates diff -Nru vdr-1.0.0/debian/po/templates.pot vdr-1.2.6/debian/po/templates.pot --- vdr-1.0.0/debian/po/templates.pot 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/po/templates.pot 2006-05-18 20:03:12.000000000 +0200 @@ -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 "" diff -Nru vdr-1.0.0/debian/R90.custom vdr-1.2.6/debian/R90.custom --- vdr-1.0.0/debian/R90.custom 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/R90.custom 2006-05-18 20:03:12.000000000 +0200 @@ -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 diff -Nru vdr-1.0.0/debian/README.Debian vdr-1.2.6/debian/README.Debian --- vdr-1.0.0/debian/README.Debian 2002-04-03 12:46:01.000000000 +0200 +++ vdr-1.2.6/debian/README.Debian 2006-05-18 20:03:12.000000000 +0200 @@ -3,16 +3,184 @@ Comments to the Debian version: - - The SVDRP port is disabled by default for security reasons. Feel free to - specify the --port option and it will be enabled. - You need a DVB card and with a driver using the "Linux DVB API" - (http://www.linuxtv.org/developer/dvbapi.xml). Currently only the drivers - for Siemens based cards are available, but it is not clear whether they may - be added to Debian before the Firmware license has been clarified. - - the default video directory is the home directory. Can be changed with the - -v option. - - example channel lists can be found in the documentation directory. + (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/share/vdr/. You may use and modify them for you own purposes. + /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" - -- Eduard Bloch <blade@debian.org>, Thu, 13 Dec 2001 01:18:49 +0100 + -- Thomas Schmidt <tschmidt@debian.org>, 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 diff -Nru vdr-1.0.0/debian/reccmds.custom.conf vdr-1.2.6/debian/reccmds.custom.conf --- vdr-1.0.0/debian/reccmds.custom.conf 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/reccmds.custom.conf 2006-05-18 20:03:12.000000000 +0200 @@ -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 +# diff -Nru vdr-1.0.0/debian/rules vdr-1.2.6/debian/rules --- vdr-1.0.0/debian/rules 2005-01-16 15:28:06.000000000 +0100 +++ vdr-1.2.6/debian/rules 2006-05-18 20:03:12.000000000 +0200 @@ -5,88 +5,128 @@ # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 -# This is the debhelper compatability version to use. -export DH_COMPAT=3 -VERS=1.0.0 -DVDVERS=vdr-1.0.0pre5-nav7 +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 - # Add here commands to configure the package. - mkdir build-tree - cd build-tree ; tar zxvf ../upstream/vdr-$(VERS).tgz; mv vdr-$(VERS)/* . - cp upstream/* build-tree -a -# cd build-tree ; zcat ../patches/* | patch -p1 - cd build-tree ; cat ../debian/patches/* | patch -p1 touch configure-stamp -build: configure-stamp build-stamp -build-stamp: +build: patch-stamp configure-stamp build-stamp + +build-stamp: dh_testdir # Add here commands to compile the package. - cd build-tree; $(MAKE) DVBDIR=/usr DVDDIR=/usr VFAT=1 DVD=1 - cd build-tree; cp vdr vdr-kbd - cd build-tree; make clean - cd build-tree; $(MAKE) DVBDIR=/usr DVDDIR=/usr VFAT=1 REMOTE=NONE DVD=1 - cd build-tree; cp vdr vdr-daemon - cd build-tree; make clean - cd build-tree; $(MAKE) DVBDIR=/usr DVDDIR=/usr VFAT=1 REMOTE=LIRC DVD=1 - cd build-tree; cp vdr vdr-lirc - cd build-tree; make clean - cd build-tree; $(MAKE) DVBDIR=/usr DVDDIR=/usr VFAT=1 REMOTE=RCU DVD=1 - cd build-tree; cp vdr vdr-rcu + + $(MAKE) VIDEODIR=$(VIDEODIR) VFAT=1 DVBDIR=$(DVBDIR) PLUGINLIBDIR=$(PLUGINDIR) CFGDIR=$(CFGDIR) + ln -f vdr vdr-kbd + + 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 -clean: +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. - rm -rf build-tree + -$(MAKE) plugins-clean + -$(MAKE) clean + + rm -f vdr-kbd + rm -rf PLUGINS/lib + rm -f vdr-newplugin + sh debian/patchlevel.sh clean + rm -f debian/vdr-shutdown.wrapper + dh_clean -install: build +install: build patchlevel dh_testdir dh_testroot dh_clean -k - dh_installdirs -a usr/share/doc + dh_installdirs - # Add here commands to install the package into debian/vdr. - cd build-tree; install -m 755 $(CURDIR)/debian/vdr-message vdr-lirc vdr-kbd vdr-rcu vdr-daemon $(CURDIR)/debian/vdr/usr/bin/ - cd build-tree; cp -a epg2html.pl svdrpsend.pl $(CURDIR)/debian/vdr/usr/share/vdr/ - dh_installman $(CURDIR)/debian/vdr-message.1 -p vdr - cd build-tree; for x in vdr-lirc vdr-kbd vdr-rcu vdr-daemon ; do mkdir -p $(CURDIR)/debian/$$x/usr/share/doc; ln -s vdr-message.1.gz $(CURDIR)/debian/vdr/usr/share/man/man1/$$x.1.gz; ln -s vdr $(CURDIR)/debian/$$x/usr/share/doc/$$x; done - dh_movefiles --sourcedir=debian/vdr + # 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 -# We have nothing to do by default. + 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 - dh_testroot - dh_installdocs - dh_installdebconf -pvdr-daemon - dh_installexamples build-tree/*.conf* -pvdr - dh_installman $(CURDIR)/build-tree/vdr.1 $(CURDIR)/build-tree/vdr.5 -p vdr - dh_installmenu - dh_installchangelogs build-tree/HISTORY -pvdr - dh_link - dh_strip - dh_compress - dh_fixperms - dh_installdeb - dh_shlibdeps - dh_gencontrol - dh_md5sums - dh_builddeb + dh_testdir -a + dh_testroot -a + dh_installdebconf -a -pvdr + dh_installdocs -a -Nvdr-plugin-examples + dh_installexamples -a + dh_installchangelogs -a -Nvdr-plugin-examples -Nvdr-plugin-sky -pvdr HISTORY + dh_installchangelogs -a -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 configure +.PHONY: build clean binary-indep binary-arch binary install patch unpatch configure clean-patched diff -Nru vdr-1.0.0/debian/runvdr vdr-1.2.6/debian/runvdr --- vdr-1.0.0/debian/runvdr 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/runvdr 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,58 @@ +#!/bin/bash +# +# + +. /usr/lib/vdr/config-loader.sh + +OPTIONS="$*" +if [ "$NONPTL" = "1" -a `uname -m` != x86_64 ]; then + VDRCMD="LD_ASSUME_KERNEL=2.4 /usr/bin/vdr $OPTIONS" +else + VDRCMD="/usr/bin/vdr $OPTIONS" +fi + +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 +} + +function set_permissions () +{ + for FILE in av7110_ir budget_ci_ir; do + if [ -e "/proc/$FILE" ]; then + chown $USER.$GROUP /proc/$FILE + fi + done +} + +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 + set_permissions + 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 MODULE in $MODULES; do + rmmod $MODULE >/dev/null 2>&1 + wait `pidof rmmod` + done + + for MODULE in $MODULES; do + modprobe $MODULE >/dev/null 2>&1 + done +done diff -Nru vdr-1.0.0/debian/runvdr.8 vdr-1.2.6/debian/runvdr.8 --- vdr-1.0.0/debian/runvdr.8 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/runvdr.8 2006-05-18 20:03:12.000000000 +0200 @@ -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. diff -Nru vdr-1.0.0/debian/S90.custom vdr-1.2.6/debian/S90.custom --- vdr-1.0.0/debian/S90.custom 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/S90.custom 2006-05-18 20:03:12.000000000 +0200 @@ -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 +# + + diff -Nru vdr-1.0.0/debian/scripts/vdr-daemon vdr-1.2.6/debian/scripts/vdr-daemon --- vdr-1.0.0/debian/scripts/vdr-daemon 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/scripts/vdr-daemon 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,2 @@ +#! /bin/sh +exec /usr/bin/vdr-kbd "$@" --no-kbd diff -Nru vdr-1.0.0/debian/scripts/vdr-lirc vdr-1.2.6/debian/scripts/vdr-lirc --- vdr-1.0.0/debian/scripts/vdr-lirc 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/scripts/vdr-lirc 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,2 @@ +#! /bin/sh +exec /usr/bin/vdr-kbd "$@" --lirc diff -Nru vdr-1.0.0/debian/scripts/vdr-rcu vdr-1.2.6/debian/scripts/vdr-rcu --- vdr-1.0.0/debian/scripts/vdr-rcu 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/scripts/vdr-rcu 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,2 @@ +#! /bin/sh +exec /usr/bin/vdr-kbd "$@" --rcu diff -Nru vdr-1.0.0/debian/vdr.config vdr-1.2.6/debian/vdr.config --- vdr-1.0.0/debian/vdr.config 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr.config 2006-05-18 20:03:12.000000000 +0200 @@ -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 diff -Nru vdr-1.0.0/debian/vdr-daemon.files vdr-1.2.6/debian/vdr-daemon.files --- vdr-1.0.0/debian/vdr-daemon.files 2002-04-03 12:46:01.000000000 +0200 +++ vdr-1.2.6/debian/vdr-daemon.files 1970-01-01 01:00:00.000000000 +0100 @@ -1,2 +0,0 @@ -/usr/bin/vdr-daemon -/usr/share/man/man1/vdr-daemon.1.gz diff -Nru vdr-1.0.0/debian/vdr.default vdr-1.2.6/debian/vdr.default --- vdr-1.0.0/debian/vdr.default 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr.default 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,31 @@ +# /etc/default/vdr + +# 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" + +# Change this to 0 if you want to allow VDR to use NPTL (if available). +# This is disabled by default, although it should be safe to enable it. +# (This has no effect on AMD64 machines.) +NONPTL=1 diff -Nru vdr-1.0.0/debian/vdr-dev.dirs vdr-1.2.6/debian/vdr-dev.dirs --- vdr-1.0.0/debian/vdr-dev.dirs 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr-dev.dirs 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1 @@ +usr/include/vdr diff -Nru vdr-1.0.0/debian/vdr-dev.docs vdr-1.2.6/debian/vdr-dev.docs --- vdr-1.0.0/debian/vdr-dev.docs 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr-dev.docs 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,3 @@ +README +CONTRIBUTORS +PLUGINS.html diff -Nru vdr-1.0.0/debian/vdr-dev.install vdr-1.2.6/debian/vdr-dev.install --- vdr-1.0.0/debian/vdr-dev.install 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr-dev.install 2006-05-18 20:03:12.000000000 +0200 @@ -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/ diff -Nru vdr-1.0.0/debian/vdr-dev.manpages vdr-1.2.6/debian/vdr-dev.manpages --- vdr-1.0.0/debian/vdr-dev.manpages 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr-dev.manpages 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,2 @@ +debian/vdr-newplugin.1 +debian/debianize-vdrplugin.1 diff -Nru vdr-1.0.0/debian/vdr.dirs vdr-1.2.6/debian/vdr.dirs --- vdr-1.0.0/debian/vdr.dirs 2002-04-03 12:46:01.000000000 +0200 +++ vdr-1.2.6/debian/vdr.dirs 2006-05-18 20:03:12.000000000 +0200 @@ -1,2 +1,12 @@ +etc/vdr/plugins +etc/vdr/command-hooks usr/bin -usr/share/vdr +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 diff -Nru vdr-1.0.0/debian/vdr.docs vdr-1.2.6/debian/vdr.docs --- vdr-1.0.0/debian/vdr.docs 2002-04-03 13:38:26.000000000 +0200 +++ vdr-1.2.6/debian/vdr.docs 2006-05-18 20:03:12.000000000 +0200 @@ -1,4 +1,6 @@ -build-tree/README -build-tree/CONTRIBUTORS -build-tree/MANUAL -build-tree/INSTALL +README +CONTRIBUTORS +MANUAL +INSTALL +PLUGINS.html +UPDATE-1.2.0 diff -Nru vdr-1.0.0/debian/vdr.examples vdr-1.2.6/debian/vdr.examples --- vdr-1.0.0/debian/vdr.examples 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr.examples 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,2 @@ +*.conf +channels.conf.* diff -Nru vdr-1.0.0/debian/vdr.init vdr-1.2.6/debian/vdr.init --- vdr-1.0.0/debian/vdr.init 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr.init 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,80 @@ +#! /bin/bash +# +# vdr start-stop script +# + +test -x /usr/sbin/runvdr || exit 0 + +. /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 + +startvdr() +{ + # only start vdr if there is no other instance running + # (Appears as vdr-kbd in the official debian-packages + # and just as vdr in the c't-vdr packages) + if ! ps ax | grep "/usr/bin/\(vdr\|vdr-kbd\) " | grep -qv grep + 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 + + # check if the running process is /usr/bin/vdr or /usr/bin/vdr-kbd + if ps ax | grep "/usr/bin/vdr " | grep -qv grep + then + killall -q -TERM /usr/bin/vdr > /dev/null 2>&1 + else + # (assume that vdr-kbd is running) + killall -q -TERM /usr/bin/vdr-kbd > /dev/null 2>&1 + fi +} + +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 + diff -Nru vdr-1.0.0/debian/vdr.install vdr-1.2.6/debian/vdr.install --- vdr-1.0.0/debian/vdr.install 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr.install 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,37 @@ +vdr-kbd usr/bin/ +debian/scripts/vdr-daemon usr/bin/ +debian/scripts/vdr-lirc usr/bin/ +debian/scripts/vdr-rcu usr/bin/ + +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/ diff -Nru vdr-1.0.0/debian/vdr-kbd.files vdr-1.2.6/debian/vdr-kbd.files --- vdr-1.0.0/debian/vdr-kbd.files 2002-04-03 12:46:01.000000000 +0200 +++ vdr-1.2.6/debian/vdr-kbd.files 1970-01-01 01:00:00.000000000 +0100 @@ -1,2 +0,0 @@ -/usr/bin/vdr-kbd -/usr/share/man/man1/vdr-kbd.1.gz diff -Nru vdr-1.0.0/debian/vdr.links vdr-1.2.6/debian/vdr.links --- vdr-1.0.0/debian/vdr.links 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr.links 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,19 @@ +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 + +usr/share/man/man1/vdr.1.gz usr/share/man/man1/vdr-daemon.1.gz +usr/share/man/man1/vdr.1.gz usr/share/man/man1/vdr-kbd.1.gz +usr/share/man/man1/vdr.1.gz usr/share/man/man1/vdr-lirc.1.gz +usr/share/man/man1/vdr.1.gz usr/share/man/man1/vdr-rcu.1.gz diff -Nru vdr-1.0.0/debian/vdr-lirc.files vdr-1.2.6/debian/vdr-lirc.files --- vdr-1.0.0/debian/vdr-lirc.files 2002-04-03 12:46:01.000000000 +0200 +++ vdr-1.2.6/debian/vdr-lirc.files 1970-01-01 01:00:00.000000000 +0100 @@ -1,2 +0,0 @@ -/usr/bin/vdr-lirc -/usr/share/man/man1/vdr-lirc.1.gz diff -Nru vdr-1.0.0/debian/vdr.manpages vdr-1.2.6/debian/vdr.manpages --- vdr-1.0.0/debian/vdr.manpages 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr.manpages 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,4 @@ +vdr.1 +vdr.5 + +debian/runvdr.8 diff -Nru vdr-1.0.0/debian/vdr.menu vdr-1.2.6/debian/vdr.menu --- vdr-1.0.0/debian/vdr.menu 2002-04-03 12:46:01.000000000 +0200 +++ vdr-1.2.6/debian/vdr.menu 2006-05-18 20:03:12.000000000 +0200 @@ -1,2 +1,2 @@ -?package(vdr):needs=text section=Apps/Viewers\ +?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" diff -Nru vdr-1.0.0/debian/vdr-message vdr-1.2.6/debian/vdr-message --- vdr-1.0.0/debian/vdr-message 2002-04-03 12:46:01.000000000 +0200 +++ vdr-1.2.6/debian/vdr-message 1970-01-01 01:00:00.000000000 +0100 @@ -1,12 +0,0 @@ -#!/bin/sh -echo -e "\nRun better one of the following programs:\n\n - vdr-kbd (for PC keyboard control)\n - vdr-lirc (for control via the "Linux Infrared Remote Control")\n - vdr-rcu (for control via the \"Remote Control Unit\" receiver\n - vdr-daemon (to be controled by other applications)\n\nIf you do not wish to see this message, try update-alternatives --config vdr\n" -sleep 5 -if which vdr-kbd; then - exec vdr-kbd $* -elif which vdr-lirc; then - exec vdr-lirc $* -elif which vdr-rcu; then - exec vdr-rcu $* -elif which vdr-daemon; then - exec vdr-daemon $* -fi diff -Nru vdr-1.0.0/debian/vdr-message.1 vdr-1.2.6/debian/vdr-message.1 --- vdr-1.0.0/debian/vdr-message.1 2002-04-14 12:21:09.000000000 +0200 +++ vdr-1.2.6/debian/vdr-message.1 1970-01-01 01:00:00.000000000 +0100 @@ -1,40 +0,0 @@ -.\" Hey, EMACS: -*- nroff -*- -.\" First parameter, NAME, should be all caps -.\" Second parameter, SECTION, should be 1-8, maybe w/ subsection -.\" other parameters are allowed: see man(7), man(1) -.TH VDR SECTION "September 22, 2001" -.\" Please adjust this date whenever revising the manpage. -.\" -.\" Some roff macros, for reference: -.\" .nh disable hyphenation -.\" .hy enable hyphenation -.\" .ad l left justify -.\" .ad b justify to both left and right margins -.\" .nf disable filling -.\" .fi enable filling -.\" .br insert line break -.\" .sp <n> insert n+1 empty lines -.\" for manpage-specific macros, see man(7) -.SH NAME -vdr \- Digital TV viewer -.SH SYNOPSIS -.B [ vdr | vdr-kbd | vdr-lirc | vdr-rcu | vdr-daemon ] -<options> -.SH DESCRIPTION -This manual page documents briefly the -.B vdr -command. -This manual page was written for the Debian GNU/Linux distribution -to provide an overview about existing vdr versions. The common description of vdr is contained in the -.B vdr(1) -manpage. -.PP -\fBvdr\fP is a program that can be used to watch TV via a DVB-S card. The program does not need a monitor - all user interaction is done via the TV box and the keyboard or (optionaly) a remote control. -.SH OPTIONS -You can get an overview of the exisiting options with "vdr -h". For detailed descrition look in the miscellaneos documentation distributed with the package. This Debian package contains multiple binaries with different control frontends: Keyboard control (\fBkbd\fP), IR remote control (\fBlirc\fP) and RCU receiver (\fBrcu\fP). A special case is \fBvdr-daemon\fP: this version cannot be controled directly, you need an additional frontend like kvdr to do anything with \fBvdr-daemon\fP. -.SH SEE ALSO -.B vdr(1) -.SH AUTHOR -The program has been written by Klaus Schmidinger <kls@cadsoft.de> and others. -This manual page was written by Eduard Bloch <blade@debian.org>, -for the Debian GNU/Linux system (but may be used by others). diff -Nru vdr-1.0.0/debian/vdr-newplugin.1 vdr-1.2.6/debian/vdr-newplugin.1 --- vdr-1.0.0/debian/vdr-newplugin.1 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr-newplugin.1 2006-05-18 20:03:12.000000000 +0200 @@ -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. diff -Nru vdr-1.0.0/debian/vdr.NEWS vdr-1.2.6/debian/vdr.NEWS --- vdr-1.0.0/debian/vdr.NEWS 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr.NEWS 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,64 @@ +vdr (1.2.6-9) experimental; urgency=low + + This release adds a patch which allows us to have just one binary- + package for all four control-methods, so we do not need the + packages vdr-daemon, vdr-kbd, vdr-lirc and vdr-rcu anymore. + You can run vdr with the control-method you want by calling + /usr/bin/vdr-{daemon,kbd,lirc,rcu} or by using + + update-alternatives --config vdr + + and setting it to the desired control-method. (lirc is default) + After this a call of /usr/bin/vdr will allways use the control- + method you selected with update-alternatives. + + -- Thomas Schmidt <tschmidt@debian.org> Sun, 27 Feb 2005 00:44:05 +0100 + +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 <tschmidt@debian.org> 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 <tschmidt@debian.org> Sat, 29 May 2004 19:43:49 +0200 diff -Nru vdr-1.0.0/debian/vdr-plugin-examples.install vdr-1.2.6/debian/vdr-plugin-examples.install --- vdr-1.0.0/debian/vdr-plugin-examples.install 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr-plugin-examples.install 2006-05-18 20:03:12.000000000 +0200 @@ -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/ diff -Nru vdr-1.0.0/debian/vdr-plugin-examples.links vdr-1.2.6/debian/vdr-plugin-examples.links --- vdr-1.0.0/debian/vdr-plugin-examples.links 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr-plugin-examples.links 2006-05-18 20:03:12.000000000 +0200 @@ -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 diff -Nru vdr-1.0.0/debian/vdr-plugin-sky.docs vdr-1.2.6/debian/vdr-plugin-sky.docs --- vdr-1.0.0/debian/vdr-plugin-sky.docs 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr-plugin-sky.docs 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1 @@ +PLUGINS/src/sky/README diff -Nru vdr-1.0.0/debian/vdr-plugin-sky.examples vdr-1.2.6/debian/vdr-plugin-sky.examples --- vdr-1.0.0/debian/vdr-plugin-sky.examples 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr-plugin-sky.examples 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1 @@ +PLUGINS/src/sky/*.sky diff -Nru vdr-1.0.0/debian/vdr-plugin-sky.install vdr-1.2.6/debian/vdr-plugin-sky.install --- vdr-1.0.0/debian/vdr-plugin-sky.install 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr-plugin-sky.install 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1 @@ +PLUGINS/lib/libvdr-sky.so.* usr/lib/vdr/plugins/ diff -Nru vdr-1.0.0/debian/vdr.postinst vdr-1.2.6/debian/vdr.postinst --- vdr-1.0.0/debian/vdr.postinst 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr.postinst 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,186 @@ +#! /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 + + # Try to stop vdr a second time when we are upgrading + # from a version smaller 1.2.6-9, because the init-script + # of the old version can not stop vdr without a existing + # /usr/bin/vdr + if [ ! -z $2 ]; then + if `dpkg --compare-versions $2 lt 1.2.6-9`; then + if [ -x "/etc/init.d/vdr" ]; then + if [ -x "`which invoke-rc.d 2>/dev/null`" ]; then + invoke-rc.d vdr stop || exit 0 + else + /etc/init.d/vdr stop || exit 0 + fi + fi + fi + fi + + # 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 + + # put vdr in group cdrom so that it can access the cdrom and dvd + # device nodes + adduser $USER cdrom > /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/ + if [ -e /var/lib/vdr ] ; then + chown $USER:$GROUP /var/lib/vdr + chown $USER:$GROUP /var/lib/vdr/* > /dev/null 2>&1 || true + fi + if [ -e /var/cache/vdr ] ; then + chown $USER:$GROUP /var/cache/vdr + chown $USER:$GROUP /var/cache/vdr/* > /dev/null 2>&1|| true + fi + + # make /usr/lib/vdr/vdr-shutdown.wrapper setuid/setgid + # (owner root:vdr, mode 6750) + if [ -e /usr/lib/vdr/vdr-shutdown.wrapper ] ; then + chown root:$GROUP /usr/lib/vdr/vdr-shutdown.wrapper && \ + chmod 6750 /usr/lib/vdr/vdr-shutdown.wrapper + fi + + # Install alternatives for the different control methods + update-alternatives --install /usr/bin/vdr vdr /usr/bin/vdr-lirc 120 + update-alternatives --install /usr/bin/vdr vdr /usr/bin/vdr-kbd 110 + update-alternatives --install /usr/bin/vdr vdr /usr/bin/vdr-rcu 105 + update-alternatives --install /usr/bin/vdr vdr /usr/bin/vdr-daemon 100 + ;; + + 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 diff -Nru vdr-1.0.0/debian/vdr.postrm vdr-1.2.6/debian/vdr.postrm --- vdr-1.0.0/debian/vdr.postrm 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr.postrm 2006-05-18 20:03:12.000000000 +0200 @@ -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 diff -Nru vdr-1.0.0/debian/vdr.prerm vdr-1.2.6/debian/vdr.prerm --- vdr-1.0.0/debian/vdr.prerm 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr.prerm 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,19 @@ +#! /bin/sh +# prerm script for vdr +# +# see: dh_installdeb(1) + +set -e + +case "$1" in + remove) + update-alternatives --remove vdr /usr/bin/vdr-daemon + update-alternatives --remove vdr /usr/bin/vdr-kbd + update-alternatives --remove vdr /usr/bin/vdr-lirc + update-alternatives --remove vdr /usr/bin/vdr-rcu + ;; +esac + +#DEBHELPER# + +exit 0 diff -Nru vdr-1.0.0/debian/vdr-rcu.files vdr-1.2.6/debian/vdr-rcu.files --- vdr-1.0.0/debian/vdr-rcu.files 2002-04-03 12:46:01.000000000 +0200 +++ vdr-1.2.6/debian/vdr-rcu.files 1970-01-01 01:00:00.000000000 +0100 @@ -1,2 +0,0 @@ -/usr/bin/vdr-rcu -/usr/share/man/man1/vdr-rcu.1.gz diff -Nru vdr-1.0.0/debian/vdr-recordingaction vdr-1.2.6/debian/vdr-recordingaction --- vdr-1.0.0/debian/vdr-recordingaction 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr-recordingaction 2006-05-18 20:03:12.000000000 +0200 @@ -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 diff -Nru vdr-1.0.0/debian/vdr-shutdown vdr-1.2.6/debian/vdr-shutdown --- vdr-1.0.0/debian/vdr-shutdown 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr-shutdown 2006-05-18 20:03:12.000000000 +0200 @@ -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 diff -Nru vdr-1.0.0/debian/vdr-shutdown-message vdr-1.2.6/debian/vdr-shutdown-message --- vdr-1.0.0/debian/vdr-shutdown-message 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr-shutdown-message 2006-05-18 20:03:12.000000000 +0200 @@ -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 diff -Nru vdr-1.0.0/debian/vdr-shutdown-wrapper.c vdr-1.2.6/debian/vdr-shutdown-wrapper.c --- vdr-1.0.0/debian/vdr-shutdown-wrapper.c 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr-shutdown-wrapper.c 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,3 @@ +int main (int argc, char *argv[]) { + return execv("/usr/lib/vdr/vdr-shutdown", argv); +} diff -Nru vdr-1.0.0/debian/vdr.templates vdr-1.2.6/debian/vdr.templates --- vdr-1.0.0/debian/vdr.templates 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/vdr.templates 2006-05-18 20:03:12.000000000 +0200 @@ -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. diff -Nru vdr-1.0.0/debian/watch vdr-1.2.6/debian/watch --- vdr-1.0.0/debian/watch 1970-01-01 01:00:00.000000000 +0100 +++ vdr-1.2.6/debian/watch 2006-05-18 20:03:12.000000000 +0200 @@ -0,0 +1,2 @@ +version=2 +ftp://ftp.cadsoft.de/vdr/ vdr.*-([\d+\.]+|\d+)\.tar(\.gz|\.bz2) debian uupdate