From 9aa2cda494d7af2733362de78234441a25959e86 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sun, 19 Nov 2000 18:00:00 +0100 Subject: Version 0.68 - Date and time in the title of an event info page are now always right adjusted. - The 'current channel' is now handled device specific (in case there is more than one DVB card). - The 'SetSystemTime' option in the "Setup" menu is now shown as "yes/no". - Implemented "internationalization" (see 'i18n.c' for information on how to add new languages). Thanks to Miha Setina for translating the OSD texts to the Slovenian language. - Fixed learning keys on the PC keyboard (display oscillated). - Fixed a timing problem with OSD refresh and SVDRP. - Avoiding multiple definitions of the same timer in the "Schedule" menu (this could happen when pressing the "Red" button while editing the timer). - There can now be a configuration file named 'commands.conf' that defines commands that can be executed through the "Main" menu's "Commands" option (see FORMATS for details on how to define these commands). - Added a 'fixed' font for use with the output of system commands. - The 'Priority' parameter of the timers is now also used to interrupt a low priority timer recording if a higher priority timer wants to record. - A timer recording on a DVB card with a CAM module will now be interrupted by a timer that needs to use this specific DVB card to record an encrypted channel, if the timer currently occupying this DVB card doesn't need the CAM module (and thus can continue recording on a different DVB card). - The "Yellow" button in the "What's on now/next?" menus now displays the schedule of the current channel from that menu. - All DVB cards in a multi-card system now write their EIT information into the same data structure. - If there is more than one DVB card in the system, the non-primary cards are now used to periodically scan through the channels in order to keep the EPG info up-to-date. Scanning kicks in after 60 seconds of user inactivity (timeout in order to keep user interactions instantaneously) and each channel that has the 'pnr' parameter defined in 'channels.conf' is switched to for 20 seconds. If there is only one DVB card in the system, that card will start scanning after 5 hours (configurable through the "Setup" menu) of user inactivity and will switch back to the channel it originally displayed at the first sign of user activity. Any scanning will only occur if that particular card is not currently recording or replaying. - Now shifting the 'Subtitle' info into the 'ExtendedDescription' on stations that don't send the EIT information correctly (like, e.g., 'VOX'). - Implemented a 10 seconds latency when removing files. - Fixed unwanted reaction on the "Green" and "Yellow" button in the "Event" display. - Implemented 'Transfer Mode' to display video data from the DVB card that actually can receive a certain channel on the primary interface. This is currently in an early state and may still cause some problems, but it appears to work nice already. --- BUGS | 4 +- CONTRIBUTORS | 3 + FORMATS | 31 +- HISTORY | 46 + MANUAL | 43 +- Makefile | 28 +- README | 11 +- channels.conf | 66 +- config.c | 97 +- config.h | 30 +- dvbapi.c | 210 +- dvbapi.h | 68 +- dvbosd.c | 19 +- dvbosd.h | 6 +- eit.c | 40 +- eit.h | 7 +- font.c | 16 +- font.h | 3 +- fontfix.c | 6498 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ i18n.c | 478 +++++ i18n.h | 19 + interface.c | 70 +- interface.h | 3 +- menu.c | 414 ++-- menu.h | 4 +- osd.c | 12 +- osd.h | 6 +- recording.c | 7 +- remote.c | 4 +- svdrp.c | 16 +- thread.c | 8 +- thread.h | 14 +- timers.conf | 15 +- tools.c | 14 +- tools.h | 5 +- vdr.c | 38 +- 36 files changed, 8044 insertions(+), 309 deletions(-) create mode 100644 fontfix.c create mode 100644 i18n.c create mode 100644 i18n.h diff --git a/BUGS b/BUGS index d24d370..506316a 100644 --- a/BUGS +++ b/BUGS @@ -4,5 +4,5 @@ Video Disk Recorder - Known Bugs * Sometimes the picture "jumps" as if a frame is skipped. Presumably this is a problem in the card driver or firmware? -* The first picture captured with the GRAB command in SVDRP - is empty. Also, these pictures appear to be too dark. +* The pictures captured with the GRAB command in SVDRP + appear to be too dark. diff --git a/CONTRIBUTORS b/CONTRIBUTORS index db47d8b..279706d 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -40,3 +40,6 @@ Bastian Guse Matthias Schniedermeyer for implementing the 'MarkInstantRecord' setup option. + +Miha Setina + for translating the OSD texts to the Slovenian language. diff --git a/FORMATS b/FORMATS index 331fe3d..3eee494 100644 --- a/FORMATS +++ b/FORMATS @@ -47,8 +47,11 @@ Video Disk Recorder File Formats ----F-- = Friday -----S- = Saturday ------S = Sunday - (any combination is possible, for example MTWTF--) or the "day of month" (1..31) - - Star time (first two digits for the hour, second two digits for the minutes) + (any combination is possible, for example MTWTF--, and the days may be + indicated by any characters except '-', so for example ABC---- would set + a timer that records on monday, tuesday and wednesday) or the "day of month" + (1..31) + - Start time (first two digits for the hour, second two digits for the minutes) - End time (first two digits for the hour, second two digits for the minutes) - Priority (from 00 to 99, 00 = lowest prioity, 99 = highest priority) - Guaranteed lifetime of recording (in days) @@ -63,3 +66,27 @@ Video Disk Recorder File Formats See the MANUAL file for a description of the available options. +* commands.conf + + This file contains the definitions of commands that can be executed from + the "Main" menus "Commands" option. + + Each line contains one command definition in the following format: + + title : command + + where 'title' is the string the will be displayed in the "Commands" menu, + and 'command' is the actual command string that will be executed when this + option is selected. The delimiting ':' may be surrounded by any number of + white space characters. + + In order to avoid error messages to stderr, every command should have + stderr redirected to stdout. Everything the command prints to stdout will + be displayed in a result window, with 'title' as its title. + + Examples: + + Check for new mail: /usr/local/bin/checkmail 2>&1 + CPU status : /usr/loval/bin/cpustatus 2>&1 + Disk space : df -h | grep '/video' | awk '{ print 100 - $5 "% free"; }' + diff --git a/HISTORY b/HISTORY index 189fd7b..485f24a 100644 --- a/HISTORY +++ b/HISTORY @@ -265,3 +265,49 @@ Video Disk Recorder Revision History - Problematic characters in recording names (which can come from timers that are programmed via the "Schedules" menu) are now replaced by suitable substitutes. + +2000-11-19: Version 0.68 + +- Date and time in the title of an event info page are now always right adjusted. +- The 'current channel' is now handled device specific (in case there is more + than one DVB card). +- The 'SetSystemTime' option in the "Setup" menu is now shown as "yes/no". +- Implemented "internationalization" (see 'i18n.c' for information on how to + add new languages). Thanks to Miha Setina for translating the OSD texts to + the Slovenian language. +- Fixed learning keys on the PC keyboard (display oscillated). +- Fixed a timing problem with OSD refresh and SVDRP. +- Avoiding multiple definitions of the same timer in the "Schedule" menu (this + could happen when pressing the "Red" button while editing the timer). +- There can now be a configuration file named 'commands.conf' that defines + commands that can be executed through the "Main" menu's "Commands" option + (see FORMATS for details on how to define these commands). +- Added a 'fixed' font for use with the output of system commands. +- The 'Priority' parameter of the timers is now also used to interrupt a low + priority timer recording if a higher priority timer wants to record. +- A timer recording on a DVB card with a CAM module will now be interrupted + by a timer that needs to use this specific DVB card to record an encrypted + channel, if the timer currently occupying this DVB card doesn't need the + CAM module (and thus can continue recording on a different DVB card). +- The "Yellow" button in the "What's on now/next?" menus now displays the + schedule of the current channel from that menu. +- All DVB cards in a multi-card system now write their EIT information into the + same data structure. +- If there is more than one DVB card in the system, the non-primary cards are + now used to periodically scan through the channels in order to keep the + EPG info up-to-date. Scanning kicks in after 60 seconds of user inactivity + (timeout in order to keep user interactions instantaneously) and each channel + that has the 'pnr' parameter defined in 'channels.conf' is switched to for + 20 seconds. If there is only one DVB card in the system, that card will start + scanning after 5 hours (configurable through the "Setup" menu) of user inactivity + and will switch back to the channel it originally displayed at the first sign of + user activity. Any scanning will only occur if that particular card is not + currently recording or replaying. +- Now shifting the 'Subtitle' info into the 'ExtendedDescription' on stations + that don't send the EIT information correctly (like, e.g., 'VOX'). +- Implemented a 10 seconds latency when removing files. +- Fixed unwanted reaction on the "Green" and "Yellow" button in the "Event" display. +- Implemented 'Transfer Mode' to display video data from the DVB card that actually + can receive a certain channel on the primary interface. This is currently in + an early state and may still cause some problems, but it appears to work nice + already. diff --git a/MANUAL b/MANUAL index ffcc10b..46466bf 100644 --- a/MANUAL +++ b/MANUAL @@ -74,8 +74,8 @@ Video Disk Recorder User's Manual programmes that will start next on all channels. Inside the "What's on now/next?" menus the "Green" button toggles between - the "Now" and "Next" display, and the "Yellow" button gets you back to the - "Schedule" menu of the current channel. + the "Now" and "Next" display, and the "Yellow" button takes you to the + "Schedule" menu of the current channel in the list. The "Red" button allows you to instantly program a timer to record the selected programme. You will get into the "Edit Timer" menu in which @@ -203,7 +203,9 @@ Video Disk Recorder User's Manual to free space for a new recording. If the disk is full and a new recording needs more space, an existing recording with the lowest Priority (and which has exceeded its guaranteed Lifetime) will be - removed. + removed. If all available DVB cards are currently occupied, a + timer with a higher priority will interrupt the timer with the + lowest priority in order to start recording. Lifetime: The number of days (0..99) a recording made through this timer is guaranteed to remain on disk before it is automatically removed to free up space for a new recording. Note that setting this @@ -228,6 +230,10 @@ Video Disk Recorder User's Manual displayed as "no" and "yes" in the "Setup" menu, while in the setup file they are stored as '0' and '1', respectively): + OSDLanguage = 0 Defines the language used to display the OSD texts. + 0 = Englisch + 1 = Deutsch + PrimaryDVB = 1 Defines the primary DVB interface (i.e. the one that will display the menus and will react on input through the remote control). Valid values range from '1' to the @@ -266,6 +272,37 @@ Video Disk Recorder User's Manual 1 = system time wil be set Note that this works only if VDR is running under a user id that has permisson to set the system time. + MarginStart = 2 Defines how many minutes before the official start time MarginStop = 10 of a broadcast VDR shall start recording, and how long after the official end time it shall stop recording. + + EPGScanTimeout = 5 The time (in hours) of user inactivity after which the + DVB card in a single card system starts scanning channels + to keep the EPG up-to-date. + A value of '0' turns off scanning on a single card system. + +* Executing system commands + + The "Main" menu option "Commands" allows you to execute any system commands + defined in the configuration file 'commands.conf' (see FORMATS for details). + The "Commands" option will only be present in the "Main" menu if a valid + 'commands.conf' file containing at least one command definition has been + found at program start. + + This feature can be used to do virtually anything, like checking for new + mail, displaying the CPU temperature - you name it! All you need to do is + enter the necessary command definition into 'commands.conf' and implement + the actual command that will be called. Such a command can typically be a + shell script or a Perl program. Anything that command writes to stdout will + be displayed on a result screen after executing the command. This screen will + use a 'fixed' font so that you can generate formatted output. In order to + avoid error messages going to stderr, command definitions should redirect + stderr to stdout (see FORMATS). + + WARNING: THE COMMANDS DEFINED IN 'commands.conf' WILL BE EXECUTED UNDER THE + ======= SAME USER ID THAT VDR IS RUNNING WITH. BE VERY CAREFUL WHEN + DEFINING THESE COMMANDS AND MAKE SURE THEY DON'T HARM YOUR SYSTEM, + ESPECIALLY IF YOU ARE RUNNING VDR UNDER A HIGH PRIVILEGED USER ID + (LIKE 'root'). + diff --git a/Makefile b/Makefile index 9db79f3..739d394 100644 --- a/Makefile +++ b/Makefile @@ -4,15 +4,16 @@ # See the main source file 'vdr.c' for copyright information and # how to reach the author. # -# $Id: Makefile 1.14 2000/10/28 16:24:16 kls Exp $ +# $Id: Makefile 1.16 2000/11/18 14:58:10 kls Exp $ DVBDIR = ../DVB INCLUDES = -I$(DVBDIR)/driver -OBJS = config.o dvbapi.o dvbosd.o eit.o font.o interface.o menu.o osd.o\ +OBJS = config.o dvbapi.o dvbosd.o eit.o font.o i18n.o interface.o menu.o osd.o\ recording.o remote.o svdrp.o thread.o tools.o vdr.o videodir.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 ifndef REMOTE REMOTE = KBD @@ -25,8 +26,8 @@ DEFINES += -DDEBUG_OSD endif all: vdr -font: genfontfile fontosd.c - @echo "font file created." +font: genfontfile fontfix.c fontosd.c + @echo "font files created." # Implicit rules: @@ -35,20 +36,21 @@ font: genfontfile fontosd.c # Dependencies: -config.o : config.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h remote.h svdrp.h thread.h tools.h +config.o : config.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h interface.h remote.h svdrp.h thread.h tools.h dvbapi.o : dvbapi.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h remote.h svdrp.h thread.h tools.h videodir.h dvbosd.o : dvbosd.c dvbosd.h font.h tools.h eit.o : eit.c eit.h thread.h tools.h -font.o : font.c font.h fontosd.c tools.h -interface.o: interface.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h remote.h svdrp.h thread.h tools.h -menu.o : menu.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h menu.h osd.h recording.h remote.h svdrp.h thread.h tools.h -osd.o : osd.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h osd.h remote.h svdrp.h thread.h tools.h +font.o : font.c font.h fontfix.c fontosd.c tools.h +i18n.o : i18n.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h thread.h tools.h +interface.o: interface.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h interface.h remote.h svdrp.h thread.h tools.h +menu.o : menu.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h interface.h menu.h osd.h recording.h remote.h svdrp.h thread.h tools.h +osd.o : osd.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h interface.h osd.h remote.h svdrp.h thread.h tools.h recording.o: recording.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h recording.h remote.h svdrp.h thread.h tools.h videodir.h remote.o : remote.c config.h dvbapi.h dvbosd.h eit.h font.h remote.h thread.h tools.h svdrp.o : svdrp.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h remote.h svdrp.h thread.h tools.h thread.o : thread.c thread.h tools.o : tools.c tools.h -vdr.o : vdr.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h menu.h osd.h recording.h remote.h svdrp.h thread.h tools.h videodir.h +vdr.o : vdr.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h interface.h menu.h osd.h recording.h remote.h svdrp.h thread.h tools.h videodir.h videodir.o : videodir.c tools.h videodir.h # The main program: @@ -56,8 +58,10 @@ videodir.o : videodir.c tools.h videodir.h vdr: $(OBJS) g++ -g -O2 $(OBJS) -lncurses -ljpeg -lpthread -o vdr -# The font file: +# The font files: +fontfix.c: + genfontfile "cFont::tPixelData FontFix" $(FIXFONT) > $@ fontosd.c: genfontfile "cFont::tPixelData FontOsd" $(OSDFONT) > $@ @@ -73,4 +77,4 @@ genfontfile: genfontfile.o clean: -rm -f $(OBJS) vdr genfontfile genfontfile.o CLEAN: clean - -rm -f fontosd.c + -rm -f fontfix.c fontosd.c diff --git a/README b/README index cfc10a7..b1e071e 100644 --- a/README +++ b/README @@ -1,9 +1,8 @@ -On Screen Menu for the Video Disk Recorder ------------------------------------------- +Video Disk Recorder ('VDR') +--------------------------- -These files contain the source code of an on screen -menu for a video disk recorder based on the DVB driver -of the LinuxTV project (http://linuxtv.org). +These files contain the source code of the "Video Disk Recorder", +which is based on the DVB driver of the LinuxTV project (http://linuxtv.org). For details about the "Video Disk Recorder" project please refer to http://www.cadsoft.de/people/kls/vdr. @@ -13,6 +12,8 @@ Web pages, which can be used within this program. Please see the INSTALL file for details on how to install this program on your computer. +The MANUAL file describes how to operate the VDR. + The author can be contacted at kls@cadsoft.de. Yet another "set-top-box"? diff --git a/channels.conf b/channels.conf index c61669c..ce30919 100644 --- a/channels.conf +++ b/channels.conf @@ -6,7 +6,6 @@ ARD:11837:h:1:27500:101:102:0:28106 BR3:11837:h:1:27500:201:202:0:28107 Hessen-3:11837:h:1:27500:301:302:0:28108 N3:12110:h:1:27500:2401:2402:0:28224 -:Group 1 SR3:11837:h:1:27500:501:502:0:28110 WDR:11837:h:1:27500:601:602:0:28111 BR-alpha:11837:h:1:27500:701:702:0:28112 @@ -16,25 +15,24 @@ ZDF:11954:h:1:27500:110:120:0:28006 3sat:11954:h:1:27500:210:220:0:28007 KiKa:11954:h:1:27500:310:320:0:28008 arte:11836:h:1:27500:401:402:0:28109 -:Group 2 -Eurosport:11954:h:1:27500:410:420:0:28009 ORF Sat:11954:h:1:27500:506:507:0:28010 ZDF.info:11954:h:1:27500:610:620:0:28011 -:Group 3 -CNN:12168:v:1:27500:165:100:0:0 +CNN:12168:v:1:27500:165:100:0:28512 Super RTL:12188:h:1:27500:165:120:0:12040 VOX:12188:h:1:27500:167:136:0:12060 DW TV:12363:v:1:27500:305:306:0:8905 Kabel 1:12480:v:1:27500:511:512:0:899 -TM3:12480:v:1:27500:767:768:0:0 -DSF:12480:v:1:27500:1023:1024:0:0 -HOT:12480:v:1:27500:1279:1280:0:0 -BloombergTV:12552:v:1:22000:162:99:0:0 +tm3:12480:v:1:27500:767:768:0:897 +DSF:12480:v:1:27500:1023:1024:0:900 +HOT:12480:v:1:27500:1279:1280:0:40 +Bloomberg TV Germany:12551:v:1:22000:162:99:0:12160 +BLOOMBERG TV:11817:v:1:27500:163:92:0:8004 +Bloomberg:12168:v:1:27500:167:112:0:12721 Sky News:12552:v:1:22000:305:306:0:3995 -KinderNet:12574:h:1:22000:163:92:0:0 -Alice:12610:v:1:22000:162:96:0:0 -n-tv:12670:v:1:22000:162:96:0:0 -Grand Tourisme:12670:v:1:22000:289:290:0:0 +KinderNet:12574:h:1:22000:163:92:0:5020 +Alice:12610:v:1:22000:162:96:0:12200 +n-tv:12669:v:1:22000:162:96:0:12730 +Grand Tourisme:12670:v:1:22000:289:290:0:17300 TW1:12692:h:1:22000:166:167:0:13013 Eurosport:11954:h:1:27500:410:420:0:28009 EinsExtra:12110:H:1:27500:101:102:0:28201 @@ -43,10 +41,12 @@ EinsMuXx:12110:H:1:27500:301:302:0:28203 ZDF Theaterkanal:11954:H:1:27500:1110:1120:0:28016 ZDF.doku:11954:H:1:27500:660:670:0:28014 MDR:12110:h:1:27500:401:402:0:28204 +NICK-PARAMOUNT:12246:v:1:27500:167:108:0:29312 ORB:12110:h:1:27500:501:502:0:28205 B1:12110:h:1:27500:601:602:0:28206 ARD Online-Kanal:12722:h:1:22000:8191:701:0:0 -Premiere World Promo:11798:h:1:27500:255:256:0:0 +:Premiere World +Premiere World Promo:11798:h:1:27500:255:256:0:8 Premiere:11798:h:1:27500:511:512:2:10 Star Kino:11798:h:1:27500:767:768:2:9 Cine Action:11798:h:1:27500:1023:1024:2:20 @@ -54,9 +54,31 @@ Cine Comedy:11798:h:1:27500:1279:1280:2:29 Sci Fantasy:11798:h:1:27500:1535:1536:2:41 Romantic Movies:11798:h:1:27500:1791:1792:2:11 Studio Universal:11798:h:1:27500:2047:2048:2:21 -TV Niepokalanow:11876:h:1:27500:305:321:0:0 -Mosaico:11934:v:1:27500:165:100:0:0 -Andalucia TV:11934:v:1:27500:166:104:0:0 +13th Street:11797:h:1:27500:2303:2304:2:43 +Junior:12031:h:1:27500:255:256:2:19 +K-Toon:12032:h:1:27500:511:512:2:12 +Disney Channel:12031:h:1:27500:767:768:2:15 +Fox Kids:11798:h:1:27500:255:256:2:0 +Sunset:12031:h:1:27500:1023:1024:2:16 +Comedy:12031:h:1:27500:1279:1280:2:28 +Planet:12031:h:1:27500:2047:2048:2:13 +Discovery Channel:12031:h:1:27500:1791:1792:2:14 +Krimi&Co:12031:h:1:27500:1535:1536:2:23 +Filmpalast:12090:v:1:27500:255:256:2:36 +Heimatkanal:11758:h:1:27500:2815:2816:2:517 +Goldstar:11758:h:1:27500:3839:3840:2:518 +Classica:12090:v:1:27500:767:768:2:34 +Seasons:12090:v:1:27500:511:512:2:33 +Blue Channel:11758:h:1:27500:2559:2560:2:516 +Feed (F1 Boxengasse):11720:h:1:27500:2559:2560:2:242 +Feed (F1 Data):11720:h:1:27500:3071:3072:2:244 +Feed (F1 Multi):11720:h:1:27500:2815:2816:2:243 +Feed (F1 On Board):11720:h:1:27500:2303:2304:2:241 +Feed (F1 Verfolger):11720:h:1:27500:2047:2048:2:240 +: +TV Niepokalanow:11876:h:1:27500:305:321:0:20601 +Mosaico:11934:v:1:27500:165:100:0:29010 +Andalucia TV:11934:v:1:27500:166:104:0:29011 TVC Internacional:11934:v:1:27500:167:108:0:0 Nasza TV:11992:h:1:27500:165:98:0:0 WishLine test:12012:v:1:27500:163:90:0:0 @@ -96,7 +118,7 @@ ESC 1:12363:v:1:27500:163:104:0:0 TV5 Europe:12363:v:1:27500:164:112:0:0 TV7 Tunisia:12363:v:1:27500:166:128:0:0 ARTE:12363:v:1:27500:167:137:0:0 -RAI Uno:12363:v:1:27500:289:290:0:0 +RAI Uno:12363:v:1:27500:289:290:0:8904 RTP International:12363:v:1:27500:300:301:0:0 Fashion TV:12402:v:1:27500:163:92:0:0 VideoService:12422:h:1:27500:255:256:0:0 @@ -116,6 +138,10 @@ Astra Vision 1:12552:v:1:22000:168:150:0:0 RTL Tele Letzebuerg:12552:v:1:22000:168:144:0:0 Astra Mosaic:12552:v:1:22000:175:176:0:0 MHP test:12604:h:1:22000:5632:8191:0:0 -Bloomberg TV Germany:12552:v:1:22000:162:99:0:12160 -Video Italia:12610:v:1:22000:121:122:0:0 +VERONICA:12574:h:1:22000:161:84:0:5010 +VH1 Classic:12699:v:1:22000:3071:3072:0:28647 +VH-1 Germany:12699:v:1:22000:3081:3082:0:28648 +Via 1 - Schöner Reisen:12148:h:1:27500:511:512:0:44 +Video Italia:12610:v:1:22000:121:122:0:12220 AC 3 promo:12670:v:1:22000:308:256:0:0 +ORF/ZDF:12699:h:1:22000:506:507:0:13012 diff --git a/config.c b/config.c index 5b485f6..8964e5a 100644 --- a/config.c +++ b/config.c @@ -4,13 +4,14 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: config.c 1.29 2000/11/01 18:22:43 kls Exp $ + * $Id: config.c 1.34 2000/11/18 13:26:36 kls Exp $ */ #include "config.h" #include #include #include "dvbapi.h" +#include "i18n.h" #include "interface.h" // -- cKeys ------------------------------------------------------------------ @@ -256,22 +257,23 @@ bool cChannel::Save(FILE *f) return fprintf(f, ToText()) > 0; } -bool cChannel::Switch(cDvbApi *DvbApi) +bool cChannel::Switch(cDvbApi *DvbApi, bool Log) { if (!DvbApi) DvbApi = cDvbApi::PrimaryDvbApi; if (!DvbApi->Recording() && !groupSep) { - isyslog(LOG_INFO, "switching to channel %d", number); - CurrentChannel = number; + if (Log) { + isyslog(LOG_INFO, "switching to channel %d", number); + } for (int i = 3; i--;) { - if (DvbApi->SetChannel(frequency, polarization, diseqc, srate, vpid, apid, ca, pnr)) + if (DvbApi->SetChannel(number, frequency, polarization, diseqc, srate, vpid, apid, ca, pnr)) return true; esyslog(LOG_ERR, "retrying"); } return false; } if (DvbApi->Recording()) - Interface->Info("Channel locked (recording)!"); + Interface->Info(tr("Channel locked (recording)!")); return false; } @@ -284,7 +286,7 @@ cTimer::cTimer(bool Instant) startTime = stopTime = 0; recording = false; active = Instant; - cChannel *ch = Channels.GetByNumber(CurrentChannel); + cChannel *ch = Channels.GetByNumber(cDvbApi::CurrentChannel()); channel = ch ? ch->number : 0; time_t t = time(NULL); struct tm *now = localtime(&t); @@ -294,8 +296,8 @@ cTimer::cTimer(bool Instant) if (stop >= 2400) stop -= 2400; //TODO VPS??? - priority = 99; - lifetime = 99; + priority = DEFAULTPRIORITY; + lifetime = DEFAULTLIFETIME; *file = 0; summary = NULL; if (Instant && ch) @@ -319,8 +321,8 @@ cTimer::cTimer(const cEventInfo *EventInfo) stop = time->tm_hour * 100 + time->tm_min; if (stop >= 2400) stop -= 2400; - priority = 99; - lifetime = 99; + priority = DEFAULTPRIORITY; + lifetime = DEFAULTLIFETIME; *file = 0; const char *Title = EventInfo->GetTitle(); if (!isempty(Title)) @@ -406,7 +408,7 @@ const char *cTimer::PrintDay(int d) static char buffer[8]; if ((d & 0x80000000) != 0) { char *b = buffer; - char *w = "MTWTFSS"; + const char *w = tr("MTWTFSS"); *b = 0; while (*w) { *b++ = (d & 1) ? *w : '-'; @@ -426,7 +428,7 @@ bool cTimer::Parse(const char *s) delete summary; summary = NULL; //XXX Apparently sscanf() doesn't work correctly if the last %a argument - //XXX results in an empty string (this firt occured when the EIT gathering + //XXX results in an empty string (this first occured when the EIT gathering //XXX was put into a separate thread - don't know why this happens... //XXX As a cure we copy the original string and add a blank. //XXX If anybody can shed some light on why sscanf() failes here, I'd love @@ -539,13 +541,71 @@ cTimer *cTimer::GetMatch(void) return t0; } +// --- cCommand ------------------------------------------------------------- + +char *cCommand::result = NULL; + +cCommand::cCommand(void) +{ + title = command = NULL; +} + +cCommand::~cCommand() +{ + delete title; + delete command; +} + +bool cCommand::Parse(const char *s) +{ + const char *p = strchr(s, ':'); + if (p) { + int l = p - s; + if (l > 0) { + title = new char[l + 1]; + strn0cpy(title, s, l + 1); + if (!isempty(title)) { + command = stripspace(strdup(skipspace(p + 1))); + return !isempty(command); + } + } + } + return false; +} + +const char *cCommand::Execute(void) +{ + dsyslog(LOG_INFO, "executing command '%s'", command); + delete result; + result = NULL; + FILE *p = popen(command, "r"); + if (p) { + int l = 0; + int c; + while ((c = fgetc(p)) != EOF) { + if (l % 20 == 0) + result = (char *)realloc(result, l + 21); + result[l++] = c; + } + if (result) + result[l] = 0; + pclose(p); + } + else + esyslog(LOG_ERR, "ERROR: can't open pipe for command '%s'", command); + return result; +} + // -- cKeys ------------------------------------------------------------------ cKeys Keys; +// -- cCommands -------------------------------------------------------------- + +cCommands Commands; + // -- cChannels -------------------------------------------------------------- -int CurrentChannel = 1; int CurrentGroup = -1; cChannels Channels; @@ -652,6 +712,7 @@ char *cSetup::fileName = NULL; cSetup::cSetup(void) { + OSDLanguage = 0; PrimaryDVB = 1; ShowInfoOnChSwitch = 1; MenuScrollPage = 1; @@ -661,6 +722,7 @@ cSetup::cSetup(void) SetSystemTime = 0; MarginStart = 2; MarginStop = 10; + EPGScanTimeout = 5; } bool cSetup::Parse(char *s) @@ -669,7 +731,8 @@ bool cSetup::Parse(char *s) char *Name = strtok(s, Delimiters); char *Value = strtok(NULL, Delimiters); if (Name && Value) { - if (!strcasecmp(Name, "PrimaryDVB")) PrimaryDVB = atoi(Value); + if (!strcasecmp(Name, "OSDLanguage")) OSDLanguage = atoi(Value); + else if (!strcasecmp(Name, "PrimaryDVB")) PrimaryDVB = atoi(Value); else if (!strcasecmp(Name, "ShowInfoOnChSwitch")) ShowInfoOnChSwitch = atoi(Value); else if (!strcasecmp(Name, "MenuScrollPage")) MenuScrollPage = atoi(Value); else if (!strcasecmp(Name, "MarkInstantRecord")) MarkInstantRecord = atoi(Value); @@ -678,6 +741,7 @@ bool cSetup::Parse(char *s) else if (!strcasecmp(Name, "SetSystemTime")) SetSystemTime = atoi(Value); else if (!strcasecmp(Name, "MarginStart")) MarginStart = atoi(Value); else if (!strcasecmp(Name, "MarginStop")) MarginStop = atoi(Value); + else if (!strcasecmp(Name, "EPGScanTimeout")) EPGScanTimeout = atoi(Value); else return false; return true; @@ -719,6 +783,7 @@ bool cSetup::Save(const char *FileName) FILE *f = fopen(FileName, "w"); if (f) { fprintf(f, "# VDR Setup\n"); + fprintf(f, "OSDLanguage = %d\n", OSDLanguage); fprintf(f, "PrimaryDVB = %d\n", PrimaryDVB); fprintf(f, "ShowInfoOnChSwitch = %d\n", ShowInfoOnChSwitch); fprintf(f, "MenuScrollPage = %d\n", MenuScrollPage); @@ -727,7 +792,7 @@ bool cSetup::Save(const char *FileName) fprintf(f, "LnbFrequHi = %d\n", LnbFrequHi); fprintf(f, "SetSystemTime = %d\n", SetSystemTime); fprintf(f, "MarginStart = %d\n", MarginStart); - fprintf(f, "MarginStop = %d\n", MarginStop); + fprintf(f, "EPGScanTimeout = %d\n", EPGScanTimeout); fclose(f); isyslog(LOG_INFO, "saved setup to %s", FileName); return true; diff --git a/config.h b/config.h index f9bd579..db3f1ed 100644 --- a/config.h +++ b/config.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: config.h 1.29 2000/11/01 13:42:29 kls Exp $ + * $Id: config.h 1.34 2000/11/18 13:25:53 kls Exp $ */ #ifndef __CONFIG_H @@ -18,7 +18,7 @@ #include "eit.h" #include "tools.h" -#define VDRVERSION "0.67" +#define VDRVERSION "0.68" #define MaxBuffer 10000 @@ -92,9 +92,12 @@ public: const char *ToText(void); bool Parse(const char *s); bool Save(FILE *f); - bool Switch(cDvbApi *DvbApi = NULL); + bool Switch(cDvbApi *DvbApi = NULL, bool Log = true); }; +#define DEFAULTPRIORITY 99 +#define DEFAULTLIFETIME 99 + class cTimer : public cListObject { private: time_t startTime, stopTime; @@ -115,7 +118,7 @@ public: char *summary; cTimer(bool Instant = false); cTimer(const cEventInfo *EventInfo); - ~cTimer(); + virtual ~cTimer(); cTimer& operator= (const cTimer &Timer); const char *ToText(void); bool Parse(const char *s); @@ -132,6 +135,19 @@ public: static const char *PrintDay(int d); }; +class cCommand : public cListObject { +private: + char *title; + char *command; + static char *result; +public: + cCommand(void); + virtual ~cCommand(); + bool Parse(const char *s); + const char *Title(void) { return title; } + const char *Execute(void); + }; + template class cConfig : public cList { private: char *fileName; @@ -217,12 +233,14 @@ public: cTimer *GetTimer(cTimer *Timer); }; -extern int CurrentChannel; +class cCommands : public cConfig {}; + extern int CurrentGroup; extern cChannels Channels; extern cTimers Timers; extern cKeys Keys; +extern cCommands Commands; class cSetup { private: @@ -230,6 +248,7 @@ private: bool Parse(char *s); public: // Also adjust cMenuSetup (menu.c) when adding parameters here! + int OSDLanguage; int PrimaryDVB; int ShowInfoOnChSwitch; int MenuScrollPage; @@ -238,6 +257,7 @@ public: int LnbFrequHi; int SetSystemTime; int MarginStart, MarginStop; + int EPGScanTimeout; cSetup(void); bool Load(const char *FileName); bool Save(const char *FileName = NULL); diff --git a/dvbapi.c b/dvbapi.c index cc246d2..5e4f2e6 100644 --- a/dvbapi.c +++ b/dvbapi.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: dvbapi.c 1.34 2000/11/01 09:19:27 kls Exp $ + * $Id: dvbapi.c 1.40 2000/11/19 16:46:37 kls Exp $ */ #include "dvbapi.h" @@ -372,7 +372,9 @@ private: int *inFile, *outFile; protected: int Free(void) { return ((tail >= head) ? size + head - tail : head - tail) - 1; } +public: int Available(void) { return (tail >= head) ? tail - head : size - head + tail; } +protected: int Readable(void) { return (tail >= head) ? size - tail - (head ? 0 : 1) : head - tail - 1; } // keep a 1 byte gap! int Writeable(void) { return (tail >= head) ? tail - head : size - head; } int Byte(int Offset); @@ -1079,6 +1081,63 @@ int cReplayBuffer::Write(int Max) return Written; } +// --- cTransferBuffer ------------------------------------------------------- + +class cTransferBuffer : public cThread { +private: + bool active; + int fromDevice, toDevice; +protected: + virtual void Action(void); +public: + cTransferBuffer(int FromDevice, int ToDevice); + virtual ~cTransferBuffer(); + }; + +cTransferBuffer::cTransferBuffer(int FromDevice, int ToDevice) +{ + fromDevice = FromDevice; + toDevice = ToDevice; + active = true; + Start(); +} + +cTransferBuffer::~cTransferBuffer() +{ + { + LOCK_THREAD; + active = false; + } + for (time_t t0 = time(NULL); time(NULL) - t0 < 3; ) { + LOCK_THREAD; + if (active) + break; + } +} + +void cTransferBuffer::Action(void) +{ + dsyslog(LOG_INFO, "data transfer thread started (pid=%d)", getpid()); + //XXX hack to make the video device go into 'replaying' mode: + char *dummy = "AV"; // must be "AV" to make the driver go into AV_PES mode! + write(toDevice, dummy, strlen(dummy)); + { + cRingBuffer Buffer(&fromDevice, &toDevice, VIDEOBUFSIZE, 0, 0); + while (active && Buffer.Available() < 100000) { // need to give the read buffer a head start + Buffer.Read(); // initializes fromDevice for reading + usleep(1); // this keeps the CPU load low + } + for (; active;) { + if (Buffer.Read() < 0 || Buffer.Write() < 0) + break; + usleep(1); // this keeps the CPU load low + } + } + dsyslog(LOG_INFO, "data transfer thread stopped (pid=%d)", getpid()); + LOCK_THREAD; + active = true; +} + // --- cDvbApi --------------------------------------------------------------- int cDvbApi::NumDvbApis = 0; @@ -1091,6 +1150,10 @@ cDvbApi::cDvbApi(const char *VideoFileName, const char *VbiFileName) pidRecord = pidReplay = 0; fromRecord = toRecord = -1; fromReplay = toReplay = -1; + ca = 0; + priority = -1; + transferBuffer = NULL; + transferringFromDvbApi = NULL; videoDev = open(VideoFileName, O_RDWR | O_NONBLOCK); if (videoDev >= 0) { siProcessor = new cSIProcessor(VbiFileName); @@ -1130,6 +1193,7 @@ cDvbApi::cDvbApi(const char *VideoFileName, const char *VbiFileName) #endif lastProgress = lastTotal = -1; replayTitle = NULL; + currentChannel = 1; } cDvbApi::~cDvbApi() @@ -1139,7 +1203,9 @@ cDvbApi::~cDvbApi() Close(); Stop(); StopRecord(); + StopTransfer(); OvlO(false); //Overlay off! + //XXX the following call sometimes causes a segfault - driver problem? close(videoDev); } #if defined(DEBUG_OSD) || defined(REMOTE_KBD) @@ -1160,22 +1226,25 @@ bool cDvbApi::SetPrimaryDvbApi(int n) return false; } -cDvbApi *cDvbApi::GetDvbApi(int Ca) +cDvbApi *cDvbApi::GetDvbApi(int Ca, int Priority) { cDvbApi *d = NULL; - Ca--; + int index = Ca - 1; for (int i = MAXDVBAPI; --i >= 0; ) { - if (dvbApi[i] && !dvbApi[i]->Recording()) { - if (i == Ca) - return dvbApi[i]; - if (Ca < 0) { + if (dvbApi[i]) { + if (i == index) { // means we need exactly _this_ device d = dvbApi[i]; - if (d != PrimaryDvbApi) + break; + } + else if (Ca == 0) { // means any device would be acceptable + if (!d || !dvbApi[i]->Recording() || (d->Recording() && d->Priority() > dvbApi[i]->Priority())) + d = dvbApi[i]; + if (d && d != PrimaryDvbApi && !d->Recording()) // avoids the PrimaryDvbApi if possible break; } } } - return d; + return (d && (!d->Recording() || d->Priority() < Priority || (!d->Ca() && Ca))) ? d : NULL; } int cDvbApi::Index(void) @@ -1616,6 +1685,24 @@ int cDvbApi::Width(unsigned char c) #endif } +int cDvbApi::WidthInCells(const char *s) +{ +#ifdef DEBUG_OSD + return strlen(s); +#else + return (osd->Width(s) + charWidth - 1) / charWidth; +#endif +} + +eDvbFont cDvbApi::SetFont(eDvbFont Font) +{ +#ifdef DEBUG_OSD + return Font; +#else + return osd->SetFont(Font); +#endif +} + void cDvbApi::Text(int x, int y, const char *s, eDvbColor colorFg, eDvbColor colorBg) { if (x < 0) x = cols + x; @@ -1689,9 +1776,15 @@ bool cDvbApi::ShowProgress(bool Initial) return false; } -bool cDvbApi::SetChannel(int FrequencyMHz, char Polarization, int Diseqc, int Srate, int Vpid, int Apid, int Ca, int Pnr) +bool cDvbApi::SetChannel(int ChannelNumber, int FrequencyMHz, char Polarization, int Diseqc, int Srate, int Vpid, int Apid, int Ca, int Pnr) { if (videoDev >= 0) { + StopTransfer(); + if (transferringFromDvbApi) { + transferringFromDvbApi->StopTransfer(); + transferringFromDvbApi = NULL; + } + SetReplayMode(VID_PLAY_RESET); struct frontend front; ioctl(videoDev, VIDIOCGFRONTEND, &front); unsigned int freq = FrequencyMHz; @@ -1712,8 +1805,20 @@ bool cDvbApi::SetChannel(int FrequencyMHz, char Polarization, int Diseqc, int Sr front.AFC = 1; ioctl(videoDev, VIDIOCSFRONTEND, &front); if (front.sync & 0x1F == 0x1F) { - if (siProcessor) + if (this == PrimaryDvbApi && siProcessor) siProcessor->SetCurrentServiceID(Pnr); + currentChannel = ChannelNumber; + // If this DVB card can't receive this channel, let's see if we can + // use the card that actually can receive it and transfer data from there: + if (Ca && Ca != Index() + 1) { + cDvbApi *CaDvbApi = GetDvbApi(Ca, 0); + if (CaDvbApi) { + if (!CaDvbApi->Recording()) { + if (CaDvbApi->SetChannel(ChannelNumber, FrequencyMHz, Polarization, Diseqc, Srate, Vpid, Apid, Ca, Pnr)) + transferringFromDvbApi = CaDvbApi->StartTransfer(videoDev); + } + } + } return true; } esyslog(LOG_ERR, "ERROR: channel not sync'ed (front.sync=%X)!", front.sync); @@ -1721,6 +1826,27 @@ bool cDvbApi::SetChannel(int FrequencyMHz, char Polarization, int Diseqc, int Sr return false; } +bool cDvbApi::Transferring(void) +{ + return transferBuffer; +} + +cDvbApi *cDvbApi::StartTransfer(int TransferToVideoDev) +{ + StopTransfer(); + transferBuffer = new cTransferBuffer(videoDev, TransferToVideoDev); + return this; +} + +void cDvbApi::StopTransfer(void) +{ + if (transferBuffer) { + delete transferBuffer; + transferBuffer = NULL; + SetReplayMode(VID_PLAY_RESET); + } +} + bool cDvbApi::Recording(void) { if (pidRecord && !CheckProcess(pidRecord)) @@ -1735,7 +1861,7 @@ bool cDvbApi::Replaying(void) return pidReplay; } -bool cDvbApi::StartRecord(const char *FileName) +bool cDvbApi::StartRecord(const char *FileName, int Ca, int Priority) { if (Recording()) { esyslog(LOG_ERR, "ERROR: StartRecord() called while recording - ignored!"); @@ -1743,6 +1869,8 @@ bool cDvbApi::StartRecord(const char *FileName) } if (videoDev >= 0) { + StopTransfer(); + Stop(); // TODO: remove this if the driver is able to do record and replay at the same time // Check FileName: @@ -1832,6 +1960,9 @@ bool cDvbApi::StartRecord(const char *FileName) fromRecord = fromRecordPipe[0]; toRecord = toRecordPipe[1]; + + ca = Ca; + priority = Priority; return true; } return false; @@ -1846,6 +1977,8 @@ void cDvbApi::StopRecord(void) toRecord = fromRecord = -1; KillProcess(pidRecord); pidRecord = 0; + ca = 0; + priority = -1; SetReplayMode(VID_PLAY_RESET); //XXX } } @@ -1865,6 +1998,7 @@ bool cDvbApi::StartReplay(const char *FileName, const char *Title) esyslog(LOG_ERR, "ERROR: StartReplay() called while recording - ignored!"); return false; } + StopTransfer(); Stop(); if (videoDev >= 0) { @@ -2086,3 +2220,55 @@ bool cDvbApi::GetIndex(int *Current, int *Total) return false; } +// --- cEITScanner ----------------------------------------------------------- + +cEITScanner::cEITScanner(void) +{ + lastScan = lastActivity = time(NULL); + currentChannel = 0; + lastChannel = 1; +} + +void cEITScanner::Activity(void) +{ + if (currentChannel) { + Channels.SwitchTo(currentChannel); + currentChannel = 0; + } + lastActivity = time(NULL); +} + +void cEITScanner::Process(void) +{ + if (Channels.MaxNumber() > 1) { + time_t now = time(NULL); + if (now - lastScan > ScanTimeout && now - lastActivity > ActivityTimeout) { + for (int i = 0; i < cDvbApi::NumDvbApis; i++) { + cDvbApi *DvbApi = cDvbApi::GetDvbApi(i, 0); + if (DvbApi) { + if (DvbApi != cDvbApi::PrimaryDvbApi || (cDvbApi::NumDvbApis == 1 && Setup.EPGScanTimeout && now - lastActivity > Setup.EPGScanTimeout * 3600)) { + if (!(DvbApi->Recording() || DvbApi->Replaying() || DvbApi->Transferring())) { + int oldCh = lastChannel; + int ch = oldCh + 1; + while (ch != oldCh) { + if (ch > Channels.MaxNumber()) + ch = 1; + cChannel *Channel = Channels.GetByNumber(ch); + if (Channel && Channel->pnr) { + if (DvbApi == cDvbApi::PrimaryDvbApi && !currentChannel) + currentChannel = DvbApi->Channel(); + Channel->Switch(DvbApi, false); + lastChannel = ch; + break; + } + ch++; + } + } + } + } + } + lastScan = time(NULL); + } + } +} + diff --git a/dvbapi.h b/dvbapi.h index 16a2b7a..f6640ff 100644 --- a/dvbapi.h +++ b/dvbapi.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: dvbapi.h 1.20 2000/11/01 09:18:50 kls Exp $ + * $Id: dvbapi.h 1.26 2000/11/19 14:09:41 kls Exp $ */ #ifndef __DVBAPI_H @@ -42,10 +42,11 @@ public: bool Save(int Index); }; +class cTransferBuffer; + class cDvbApi { private: int videoDev; - cSIProcessor *siProcessor; cDvbApi(const char *VideoFileName, const char *VbiFileName); public: ~cDvbApi(); @@ -59,11 +60,15 @@ public: static bool SetPrimaryDvbApi(int n); // Sets the primary DVB device to 'n' (which must be in the range // 1...NumDvbApis) and returns true if this was possible. - static cDvbApi *GetDvbApi(int Ca = 0); + static cDvbApi *GetDvbApi(int Ca, int Priority); // Selects a free DVB device, starting with the highest device number // (but avoiding, if possible, the PrimaryDvbApi). - // If Ca is not 0, the device with the given number will be returned - // if it is not currently recording. + // If Ca is not 0, the device with the given number will be returned. + // If all DVB devices are currently recording, the one recording the + // lowest priority timer (if any) that is lower than the given Priority + // will be returned. + // The caller must check whether the returned DVB device is actually + // recording and stop recording if necessary. int Index(void); // Returns the index of this DvbApi. static bool Init(void); @@ -75,6 +80,9 @@ public: // EIT facilities +private: + cSIProcessor *siProcessor; +public: const cSchedules *Schedules(cThreadLock *ThreadLock) const; // Caller must provide a cThreadLock which has to survive the entire // time the returned cSchedules is accessed. Once the cSchedules is no @@ -124,6 +132,8 @@ public: void ClrEol(int x, int y, eDvbColor color = clrBackground); int CellWidth(void); int Width(unsigned char c); + int WidthInCells(const char *s); + eDvbFont SetFont(eDvbFont Font); void Text(int x, int y, const char *s, eDvbColor colorFg = clrWhite, eDvbColor colorBg = clrBackground); void Flush(void); @@ -137,7 +147,26 @@ public: // Channel facilities - bool SetChannel(int FrequencyMHz, char Polarization, int Diseqc, int Srate, int Vpid, int Apid, int Ca, int Pnr); +private: + int currentChannel; +public: + bool SetChannel(int ChannelNumber, int FrequencyMHz, char Polarization, int Diseqc, int Srate, int Vpid, int Apid, int Ca, int Pnr); + static int CurrentChannel(void) { return PrimaryDvbApi ? PrimaryDvbApi->currentChannel : 0; } + int Channel(void) { return currentChannel; } + + // Transfer facilities + +private: + cTransferBuffer *transferBuffer; + cDvbApi *transferringFromDvbApi; +public: + bool Transferring(void); + // Returns true if we are currently transferring video data. +private: + cDvbApi *StartTransfer(int TransferToVideoDev); + // Starts transferring video data from this DVB device to TransferToVideoDev. + void StopTransfer(void); + // Stops transferring video data (in case a transfer is currently active). // Record/Replay facilities @@ -153,14 +182,23 @@ private: pid_t pidRecord, pidReplay; int fromRecord, toRecord; int fromReplay, toReplay; + int ca; + int priority; void SetReplayMode(int Mode); +protected: + int Ca(void) { return ca; } + // Returns the ca of the current recording session (0..MAXDVBAPI). + int Priority(void) { return priority; } + // Returns the priority of the current recording session (0..99), + // or -1 if no recording is currently active. public: bool Recording(void); // Returns true if we are currently recording. bool Replaying(void); // Returns true if we are currently replaying. - bool StartRecord(const char *FileName); - // Starts recording the current channel into the given file. + bool StartRecord(const char *FileName, int Ca, int Priority); + // Starts recording the current channel into the given file, with + // the given ca and priority. // In order to be able to record longer movies, // a numerical suffix will be appended to the file name. The inital // value of that suffix will be larger than any existing file under @@ -194,4 +232,18 @@ public: bool GetIndex(int *Current, int *Total = NULL); }; +class cEITScanner { +private: + enum { ActivityTimeout = 60, + ScanTimeout = 20 + }; + time_t lastScan, lastActivity; + int currentChannel, lastChannel; +public: + cEITScanner(void); + bool Active(void) { return currentChannel; } + void Activity(void); + void Process(void); + }; + #endif //__DVBAPI_H diff --git a/dvbosd.c b/dvbosd.c index c0150e2..457175d 100644 --- a/dvbosd.c +++ b/dvbosd.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: dvbosd.c 1.4 2000/11/01 09:13:32 kls Exp $ + * $Id: dvbosd.c 1.6 2000/11/18 15:36:51 kls Exp $ */ #include "dvbosd.h" @@ -21,6 +21,7 @@ cBitmap::cBitmap(int Width, int Height) width = Width; height = Height; bitmap = NULL; + fontType = fontOsd; font = NULL; if (width > 0 && height > 0) { bitmap = new char[width * height]; @@ -42,10 +43,15 @@ cBitmap::~cBitmap() delete bitmap; } -void cBitmap::SetFont(eDvbFont Font) +eDvbFont cBitmap::SetFont(eDvbFont Font) { - delete font; - font = new cFont(Font); + eDvbFont oldFont = fontType; + if (fontType != Font || !font) { + delete font; + font = new cFont(Font); + fontType = Font; + } + return oldFont; } bool cBitmap::Dirty(void) @@ -81,6 +87,11 @@ int cBitmap::Width(unsigned char c) return font ? font->Width(c) : -1; } +int cBitmap::Width(const char *s) +{ + return font ? font->Width(s) : -1; +} + void cBitmap::Text(int x, int y, const char *s, eDvbColor ColorFg, eDvbColor ColorBg) { if (bitmap) { diff --git a/dvbosd.h b/dvbosd.h index 149dc6c..e2a424a 100644 --- a/dvbosd.h +++ b/dvbosd.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: dvbosd.h 1.2 2000/11/01 09:13:44 kls Exp $ + * $Id: dvbosd.h 1.4 2000/11/18 15:25:25 kls Exp $ */ #ifndef __DVBOSD_H @@ -45,6 +45,7 @@ enum eDvbColor { class cBitmap { private: cFont *font; + eDvbFont fontType; protected: int width, height; char *bitmap; @@ -53,10 +54,11 @@ protected: public: cBitmap(int Width, int Height); virtual ~cBitmap(); - void SetFont(eDvbFont Font); + eDvbFont SetFont(eDvbFont Font); bool Dirty(void); void SetPixel(int x, int y, eDvbColor Color); int Width(unsigned char c); + int Width(const char *s); void Text(int x, int y, const char *s, eDvbColor ColorFg = clrWhite, eDvbColor ColorBg = clrBackground); void Fill(int x1, int y1, int x2, int y2, eDvbColor Color); void Clear(void); diff --git a/eit.c b/eit.c index 65856e6..7985528 100644 --- a/eit.c +++ b/eit.c @@ -13,7 +13,7 @@ * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * - * $Id: eit.c 1.7 2000/11/02 17:06:19 kls Exp $ + * $Id: eit.c 1.9 2000/11/18 13:42:28 kls Exp $ ***************************************************************************/ #include "eit.h" @@ -24,7 +24,6 @@ #include #include #include -#include #include #include #include @@ -753,7 +752,7 @@ protected: // Protected attributes cEIT::cEIT(void * buf, int length, cSchedules *Schedules) { - buflen = min((unsigned int)length, sizeof(buffer)); + buflen = length < int(sizeof(buffer)) ? length : sizeof(buffer); memset(buffer, 0, sizeof(buffer)); memcpy(buffer, buf, buflen); tid = buffer[0]; @@ -1057,15 +1056,20 @@ bool cEIT::WriteExtEventDescriptor(unsigned short service, eit_loop_t *eitloop, #define MAX_FILTERS 20 +int cSIProcessor::numSIProcessors = 0; +cSchedules *cSIProcessor::schedules = NULL; +cMutex cSIProcessor::schedulesMutex; + /** */ cSIProcessor::cSIProcessor(const char *FileName) { + masterSIProcessor = numSIProcessors == 0; // the first one becomes the 'master' useTStime = false; filters = NULL; - schedules = NULL; if ((fsvbi = open(FileName, O_RDONLY)) >= 0) { - schedules = new cSchedules; + if (!numSIProcessors++) // the first one creates it + schedules = new cSchedules; filters = (SIP_FILTER *)calloc(MAX_FILTERS, sizeof(SIP_FILTER)); } else @@ -1079,7 +1083,8 @@ cSIProcessor::~cSIProcessor() Stop(); ShutDownFilters(); delete filters; - delete schedules; + if (!--numSIProcessors) // the last one deletes it + delete schedules; close(fsvbi); } } @@ -1094,7 +1099,7 @@ void cSIProcessor::Action() return; } - dsyslog(LOG_INFO, "EIT processing thread started (pid=%d)", getpid()); + dsyslog(LOG_INFO, "EIT processing thread started (pid=%d)%s", getpid(), masterSIProcessor ? " - master" : ""); unsigned char buf[4096+1]; // max. allowed size for any EIT section (+1 for safety ;-) unsigned int seclen; @@ -1104,15 +1109,20 @@ void cSIProcessor::Action() while(true) { - time_t now = time(NULL); - struct tm *ptm = localtime(&now); - if (now - lastCleanup > 3600 && ptm->tm_hour == 5) + if (masterSIProcessor) { - LOCK_THREAD; + time_t now = time(NULL); + struct tm *ptm = localtime(&now); + if (now - lastCleanup > 3600 && ptm->tm_hour == 5) + { + LOCK_THREAD; - isyslog(LOG_INFO, "Now cleaning up things"); - schedules->Cleanup(); - lastCleanup = now; + schedulesMutex.Lock(); + isyslog(LOG_INFO, "cleaning up schedules data"); + schedules->Cleanup(); + schedulesMutex.Unlock(); + lastCleanup = now; + } } /* wait data become ready from the bitfilter */ @@ -1151,8 +1161,10 @@ void cSIProcessor::Action() { LOCK_THREAD; + schedulesMutex.Lock(); cEIT ceit(buf, seclen, schedules); ceit.ProcessEIT(); + schedulesMutex.Unlock(); } else dsyslog(LOG_INFO, "Received stuffing section in EIT\n"); diff --git a/eit.h b/eit.h index fec498b..d5c4ebd 100644 --- a/eit.h +++ b/eit.h @@ -13,7 +13,7 @@ * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * - * $Id: eit.h 1.2 2000/10/29 10:21:56 kls Exp $ + * $Id: eit.h 1.3 2000/11/17 16:14:27 kls Exp $ ***************************************************************************/ #ifndef __EIT_H @@ -120,7 +120,10 @@ typedef struct sip_filter { class cSIProcessor : public cThread { private: - cSchedules *schedules; + static int numSIProcessors; + static cSchedules *schedules; + static cMutex schedulesMutex; + bool masterSIProcessor; bool useTStime; SIP_FILTER *filters; int fsvbi; diff --git a/font.c b/font.c index 3ef4083..22c92be 100644 --- a/font.c +++ b/font.c @@ -4,21 +4,27 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: font.c 1.1 2000/10/01 15:01:49 kls Exp $ + * $Id: font.c 1.2 2000/11/18 15:16:08 kls Exp $ */ #include "font.h" #include "tools.h" +#include "fontfix.c" #include "fontosd.c" -cFont::cFont(eDvbFont Font)//XXX +cFont::cFont(eDvbFont Font) { + +#define FONTINDEX(Name)\ + case font##Name: for (int i = 0; i < NUMCHARS; i++)\ + data[i] = (tCharData *)&Font##Name[i < 32 ? 0 : i - 32];\ + break; + switch (Font) { default: - case fontOsd: for (int i = 0; i < NUMCHARS; i++) - data[i] = (tCharData *)&FontOsd[i < 32 ? 0 : i - 32]; - break; + FONTINDEX(Osd); + FONTINDEX(Fix); // TODO others... } } diff --git a/font.h b/font.h index f31c6b5..414eaa8 100644 --- a/font.h +++ b/font.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: font.h 1.1 2000/10/01 15:00:35 kls Exp $ + * $Id: font.h 1.2 2000/11/18 14:51:45 kls Exp $ */ #ifndef __FONT_H @@ -12,6 +12,7 @@ enum eDvbFont { fontOsd, + fontFix, /* TODO as soon as we have the font files... fontTtxSmall, fontTtxLarge, diff --git a/fontfix.c b/fontfix.c new file mode 100644 index 0000000..67eb162 --- /dev/null +++ b/fontfix.c @@ -0,0 +1,6498 @@ +cFont::tPixelData FontFix[][28] = { + { // 32 + 15, 26, + 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 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000300, // ......**....... + 0x00000780, // .....****...... + 0x00000780, // .....****...... + 0x00000780, // .....****...... + 0x00000780, // .....****...... + 0x00000780, // .....****...... + 0x00000780, // .....****...... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000000, // ............... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 34 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00001DC0, // ...***.***..... + 0x00001DC0, // ...***.***..... + 0x00001DC0, // ...***.***..... + 0x00001DC0, // ...***.***..... + 0x00000880, // ....*...*...... + 0x00000880, // ....*...*...... + 0x00000880, // ....*...*...... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 35 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000660, // .....**..**.... + 0x00000660, // .....**..**.... + 0x00000660, // .....**..**.... + 0x00000660, // .....**..**.... + 0x00000660, // .....**..**.... + 0x00000660, // .....**..**.... + 0x00003FF8, // ..***********.. + 0x00003FF8, // ..***********.. + 0x00000CC0, // ....**..**..... + 0x00000CC0, // ....**..**..... + 0x00000CC0, // ....**..**..... + 0x00007FF0, // .***********... + 0x00007FF0, // .***********... + 0x00001980, // ...**..**...... + 0x00001980, // ...**..**...... + 0x00001980, // ...**..**...... + 0x00001980, // ...**..**...... + 0x00001980, // ...**..**...... + 0x00001980, // ...**..**...... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 36 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000F60, // ....****.**.... + 0x00001FE0, // ...********.... + 0x000030E0, // ..**....***.... + 0x00003060, // ..**.....**.... + 0x00003000, // ..**........... + 0x00003800, // ..***.......... + 0x00001F80, // ...******...... + 0x000007E0, // .....******.... + 0x00000070, // .........***... + 0x00000030, // ..........**... + 0x00003030, // ..**......**... + 0x00003870, // ..***....***... + 0x00003FE0, // ..*********.... + 0x000037C0, // ..**.*****..... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 37 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000F00, // ....****....... + 0x00001980, // ...**..**...... + 0x000030C0, // ..**....**..... + 0x000030C0, // ..**....**..... + 0x00001980, // ...**..**...... + 0x00000F00, // ....****....... + 0x00000070, // .........***... + 0x000003C0, // ......****..... + 0x00000E00, // ....***........ + 0x000039E0, // ..***..****.... + 0x00000330, // ......**..**... + 0x00000618, // .....**....**.. + 0x00000618, // .....**....**.. + 0x00000330, // ......**..**... + 0x000001E0, // .......****.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 38 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000780, // .....****...... + 0x00000FC0, // ....******..... + 0x000018C0, // ...**...**..... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00000C00, // ....**......... + 0x00000E00, // ....***........ + 0x00001F30, // ...*****..**... + 0x00001BF0, // ...**.******... + 0x000031E0, // ..**...****.... + 0x000030C0, // ..**....**..... + 0x000031E0, // ..**...****.... + 0x00003FF8, // ..***********.. + 0x00001F38, // ...*****..***.. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 39 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000380, // ......***...... + 0x00000380, // ......***...... + 0x00000700, // .....***....... + 0x00000600, // .....**........ + 0x00000C00, // ....**......... + 0x00000800, // ....*.......... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 40 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000060, // .........**.... + 0x000000E0, // ........***.... + 0x000000C0, // ........**..... + 0x00000180, // .......**...... + 0x00000180, // .......**...... + 0x00000180, // .......**...... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000180, // .......**...... + 0x00000180, // .......**...... + 0x00000180, // .......**...... + 0x000000C0, // ........**..... + 0x000000E0, // ........***.... + 0x00000060, // .........**.... + 0x00000000, // ............... + }, + { // 41 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00001800, // ...**.......... + 0x00001C00, // ...***......... + 0x00000C00, // ....**......... + 0x00000600, // .....**........ + 0x00000600, // .....**........ + 0x00000600, // .....**........ + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000600, // .....**........ + 0x00000600, // .....**........ + 0x00000600, // .....**........ + 0x00000C00, // ....**......... + 0x00001C00, // ...***......... + 0x00001800, // ...**.......... + 0x00000000, // ............... + }, + { // 42 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00003330, // ..**..**..**... + 0x00003FF0, // ..**********... + 0x00000FC0, // ....******..... + 0x00000300, // ......**....... + 0x00000FC0, // ....******..... + 0x00000CC0, // ....**..**..... + 0x00001CE0, // ...***..***.... + 0x00001860, // ...**....**.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 43 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00007FF8, // .************.. + 0x00007FF8, // .************.. + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 44 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000380, // ......***...... + 0x00000380, // ......***...... + 0x00000700, // .....***....... + 0x00000600, // .....**........ + 0x00000C00, // ....**......... + 0x00000800, // ....*.......... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 45 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00007FF8, // .************.. + 0x00007FF8, // .************.. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 46 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000700, // .....***....... + 0x00000700, // .....***....... + 0x00000700, // .....***....... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 47 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000018, // ...........**.. + 0x00000018, // ...........**.. + 0x00000030, // ..........**... + 0x00000030, // ..........**... + 0x00000060, // .........**.... + 0x00000060, // .........**.... + 0x000000C0, // ........**..... + 0x000000C0, // ........**..... + 0x00000180, // .......**...... + 0x00000180, // .......**...... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000600, // .....**........ + 0x00000600, // .....**........ + 0x00000C00, // ....**......... + 0x00000C00, // ....**......... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00003000, // ..**........... + 0x00003000, // ..**........... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 48 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000780, // .....****...... + 0x00001FE0, // ...********.... + 0x00001860, // ...**....**.... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00001860, // ...**....**.... + 0x00001FE0, // ...********.... + 0x00000780, // .....****...... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 49 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000700, // .....***....... + 0x00003F00, // ..******....... + 0x00003F00, // ..******....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 50 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000FC0, // ....******..... + 0x00001FE0, // ...********.... + 0x00003870, // ..***....***... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00000030, // ..........**... + 0x00000070, // .........***... + 0x000000E0, // ........***.... + 0x000001C0, // .......***..... + 0x00000380, // ......***...... + 0x00000700, // .....***....... + 0x00000E00, // ....***........ + 0x00001C00, // ...***......... + 0x00003800, // ..***.......... + 0x00007FF0, // .***********... + 0x00007FF0, // .***********... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 51 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000FC0, // ....******..... + 0x00001FE0, // ...********.... + 0x00003870, // ..***....***... + 0x00003030, // ..**......**... + 0x00000030, // ..........**... + 0x00000070, // .........***... + 0x000000E0, // ........***.... + 0x000007C0, // .....*****..... + 0x000007E0, // .....******.... + 0x00000070, // .........***... + 0x00000030, // ..........**... + 0x00000030, // ..........**... + 0x00006030, // .**.......**... + 0x00007070, // .***.....***... + 0x00003FE0, // ..*********.... + 0x00001FC0, // ...*******..... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 52 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000001C0, // .......***..... + 0x000003C0, // ......****..... + 0x000007C0, // .....*****..... + 0x000006C0, // .....**.**..... + 0x00000CC0, // ....**..**..... + 0x00000CC0, // ....**..**..... + 0x000018C0, // ...**...**..... + 0x000018C0, // ...**...**..... + 0x000030C0, // ..**....**..... + 0x000030C0, // ..**....**..... + 0x00007FF0, // .***********... + 0x00007FF0, // .***********... + 0x000000C0, // ........**..... + 0x000000C0, // ........**..... + 0x000007F0, // .....*******... + 0x000007F0, // .....*******... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 53 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00001FF0, // ...*********... + 0x00001FF0, // ...*********... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00001BC0, // ...**.****..... + 0x00001FF0, // ...*********... + 0x00001C70, // ...***...***... + 0x00000038, // ..........***.. + 0x00000018, // ...........**.. + 0x00000018, // ...........**.. + 0x00000018, // ...........**.. + 0x00003038, // ..**......***.. + 0x00003870, // ..***....***... + 0x00001FF0, // ...*********... + 0x00000FC0, // ....******..... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 54 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000001F0, // .......*****... + 0x000007F0, // .....*******... + 0x00000F00, // ....****....... + 0x00001C00, // ...***......... + 0x00001800, // ...**.......... + 0x00003800, // ..***.......... + 0x000037C0, // ..**.*****..... + 0x00003FE0, // ..*********.... + 0x00003870, // ..***....***... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003830, // ..***.....**... + 0x00001C70, // ...***...***... + 0x00001FE0, // ...********.... + 0x000007C0, // .....*****..... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 55 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00003030, // ..**......**... + 0x00000030, // ..........**... + 0x00000060, // .........**.... + 0x00000060, // .........**.... + 0x00000060, // .........**.... + 0x000000C0, // ........**..... + 0x000000C0, // ........**..... + 0x000000C0, // ........**..... + 0x00000180, // .......**...... + 0x00000180, // .......**...... + 0x00000180, // .......**...... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 56 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000780, // .....****...... + 0x00001FE0, // ...********.... + 0x00003870, // ..***....***... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00001860, // ...**....**.... + 0x00000FC0, // ....******..... + 0x00001FE0, // ...********.... + 0x00003870, // ..***....***... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003870, // ..***....***... + 0x00001FE0, // ...********.... + 0x00000FC0, // ....******..... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 57 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000003C0, // ......****..... + 0x00000FF0, // ....********... + 0x00000C30, // ....**....**... + 0x00001818, // ...**......**.. + 0x00001818, // ...**......**.. + 0x00001818, // ...**......**.. + 0x00001818, // ...**......**.. + 0x00001838, // ...**.....***.. + 0x00001C78, // ...***...****.. + 0x00000FD8, // ....******.**.. + 0x00000798, // .....****..**.. + 0x00000018, // ...........**.. + 0x00000030, // ..........**... + 0x00000070, // .........***... + 0x00001FE0, // ...********.... + 0x00001F80, // ...******...... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 58 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000700, // .....***....... + 0x00000700, // .....***....... + 0x00000700, // .....***....... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000700, // .....***....... + 0x00000700, // .....***....... + 0x00000700, // .....***....... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 59 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000700, // .....***....... + 0x00000700, // .....***....... + 0x00000700, // .....***....... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000700, // .....***....... + 0x00000700, // .....***....... + 0x00000E00, // ....***........ + 0x00000C00, // ....**......... + 0x00001800, // ...**.......... + 0x00001000, // ...*........... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 60 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x0000001C, // ...........***. + 0x00000078, // .........****.. + 0x000001E0, // .......****.... + 0x00000780, // .....****...... + 0x00001E00, // ...****........ + 0x00007800, // .****.......... + 0x00007800, // .****.......... + 0x00001E00, // ...****........ + 0x00000780, // .....****...... + 0x000001E0, // .......****.... + 0x00000078, // .........****.. + 0x0000001C, // ...........***. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 61 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00007FF8, // .************.. + 0x00007FF8, // .************.. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00007FF8, // .************.. + 0x00007FF8, // .************.. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 62 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00007000, // .***........... + 0x00003C00, // ..****......... + 0x00000F00, // ....****....... + 0x000003C0, // ......****..... + 0x000000F0, // ........****... + 0x0000003C, // ..........****. + 0x0000003C, // ..........****. + 0x000000F0, // ........****... + 0x000003C0, // ......****..... + 0x00000F00, // ....****....... + 0x00003C00, // ..****......... + 0x00007000, // .***........... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 63 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000FC0, // ....******..... + 0x00001FE0, // ...********.... + 0x00001870, // ...**....***... + 0x00001830, // ...**.....**... + 0x00001830, // ...**.....**... + 0x00000030, // ..........**... + 0x00000070, // .........***... + 0x000001E0, // .......****.... + 0x00000380, // ......***...... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000000, // ............... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 64 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000700, // .....***....... + 0x00001FC0, // ...*******..... + 0x000018C0, // ...**...**..... + 0x00003060, // ..**.....**.... + 0x00003060, // ..**.....**.... + 0x000031E0, // ..**...****.... + 0x000033E0, // ..**..*****.... + 0x00003760, // ..**.***.**.... + 0x00003660, // ..**.**..**.... + 0x00003660, // ..**.**..**.... + 0x00003760, // ..**.***.**.... + 0x000033F0, // ..**..******... + 0x000031F0, // ..**...*****... + 0x00003000, // ..**........... + 0x00003000, // ..**........... + 0x00001860, // ...**....**.... + 0x00001FE0, // ...********.... + 0x00000780, // .....****...... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 65 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00003F00, // ..******....... + 0x00003F00, // ..******....... + 0x00000780, // .....****...... + 0x00000780, // .....****...... + 0x00000CC0, // ....**..**..... + 0x00000CC0, // ....**..**..... + 0x00001CE0, // ...***..***.... + 0x00001860, // ...**....**.... + 0x00001860, // ...**....**.... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00007038, // .***......***.. + 0x00006018, // .**........**.. + 0x0000FCFC, // ******..******. + 0x0000FCFC, // ******..******. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 66 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00007FE0, // .**********.... + 0x00007FF0, // .***********... + 0x00001838, // ...**.....***.. + 0x00001818, // ...**......**.. + 0x00001818, // ...**......**.. + 0x00001838, // ...**.....***.. + 0x00001FF0, // ...*********... + 0x00001FF8, // ...**********.. + 0x0000181C, // ...**......***. + 0x0000180C, // ...**.......**. + 0x0000180C, // ...**.......**. + 0x0000180C, // ...**.......**. + 0x0000181C, // ...**......***. + 0x00007FF8, // .************.. + 0x00007FF0, // .***********... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 67 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000007D8, // .....*****.**.. + 0x00001FF8, // ...**********.. + 0x00003838, // ..***.....***.. + 0x00003018, // ..**.......**.. + 0x00007018, // .***.......**.. + 0x00006000, // .**............ + 0x00006000, // .**............ + 0x00006000, // .**............ + 0x00006000, // .**............ + 0x00006000, // .**............ + 0x00007000, // .***........... + 0x00003000, // ..**........... + 0x00003818, // ..***......**.. + 0x00001FF8, // ...**********.. + 0x000007E0, // .....******.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 68 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x0000FFC0, // **********..... + 0x0000FFF0, // ************... + 0x00003038, // ..**......***.. + 0x00003018, // ..**.......**.. + 0x0000301C, // ..**.......***. + 0x0000300C, // ..**........**. + 0x0000300C, // ..**........**. + 0x0000300C, // ..**........**. + 0x0000300C, // ..**........**. + 0x0000300C, // ..**........**. + 0x0000300C, // ..**........**. + 0x00003018, // ..**.......**.. + 0x00003038, // ..**......***.. + 0x0000FFF0, // ************... + 0x0000FFE0, // ***********.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 69 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00007FF8, // .************.. + 0x00007FF8, // .************.. + 0x00001818, // ...**......**.. + 0x00001818, // ...**......**.. + 0x000018D8, // ...**...**.**.. + 0x000018C0, // ...**...**..... + 0x00001FC0, // ...*******..... + 0x00001FC0, // ...*******..... + 0x000018C0, // ...**...**..... + 0x000018C0, // ...**...**..... + 0x0000180C, // ...**.......**. + 0x0000180C, // ...**.......**. + 0x0000180C, // ...**.......**. + 0x00007FFC, // .*************. + 0x00007FFC, // .*************. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 70 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00007FFC, // .*************. + 0x00007FFC, // .*************. + 0x0000180C, // ...**.......**. + 0x0000180C, // ...**.......**. + 0x000018CC, // ...**...**..**. + 0x000018C0, // ...**...**..... + 0x00001FC0, // ...*******..... + 0x00001FC0, // ...*******..... + 0x000018C0, // ...**...**..... + 0x000018C0, // ...**...**..... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00007F80, // .********...... + 0x00007F80, // .********...... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 71 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000007EC, // .....******.**. + 0x00001FFC, // ...***********. + 0x0000381C, // ..***......***. + 0x0000300C, // ..**........**. + 0x0000700C, // .***........**. + 0x00006000, // .**............ + 0x00006000, // .**............ + 0x00006000, // .**............ + 0x000060FC, // .**.....******. + 0x000060FC, // .**.....******. + 0x0000700C, // .***........**. + 0x0000300C, // ..**........**. + 0x0000381C, // ..***......***. + 0x00001FF8, // ...**********.. + 0x000007E0, // .....******.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 72 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x0000FCFC, // ******..******. + 0x0000FCFC, // ******..******. + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x0000FCFC, // ******..******. + 0x0000FCFC, // ******..******. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 73 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 74 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000FFC, // ....**********. + 0x00000FFC, // ....**********. + 0x00000060, // .........**.... + 0x00000060, // .........**.... + 0x00000060, // .........**.... + 0x00000060, // .........**.... + 0x00000060, // .........**.... + 0x00000060, // .........**.... + 0x00000060, // .........**.... + 0x00006060, // .**......**.... + 0x00006060, // .**......**.... + 0x00006060, // .**......**.... + 0x000070E0, // .***....***.... + 0x00003FC0, // ..********..... + 0x00001F80, // ...******...... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 75 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x0000FCF8, // ******..*****.. + 0x0000FCF8, // ******..*****.. + 0x000030E0, // ..**....***.... + 0x000031C0, // ..**...***..... + 0x00003380, // ..**..***...... + 0x00003700, // ..**.***....... + 0x00003E00, // ..*****........ + 0x00003F00, // ..******....... + 0x00003B80, // ..***.***...... + 0x000031C0, // ..**...***..... + 0x000030E0, // ..**....***.... + 0x00003060, // ..**.....**.... + 0x00003070, // ..**.....***... + 0x0000FC3C, // ******....****. + 0x0000FC3C, // ******....****. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 76 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00007F80, // .********...... + 0x00007F80, // .********...... + 0x00000C00, // ....**......... + 0x00000C00, // ....**......... + 0x00000C00, // ....**......... + 0x00000C00, // ....**......... + 0x00000C00, // ....**......... + 0x00000C00, // ....**......... + 0x00000C00, // ....**......... + 0x00000C00, // ....**......... + 0x00000C18, // ....**.....**.. + 0x00000C18, // ....**.....**.. + 0x00000C18, // ....**.....**.. + 0x00007FF8, // .************.. + 0x00007FF8, // .************.. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 77 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x0000F03C, // ****......****. + 0x0000F03C, // ****......****. + 0x00007878, // .****....****.. + 0x00007878, // .****....****.. + 0x00006CD8, // .**.**..**.**.. + 0x00006CD8, // .**.**..**.**.. + 0x00006CD8, // .**.**..**.**.. + 0x00006798, // .**..****..**.. + 0x00006318, // .**...**...**.. + 0x00006318, // .**...**...**.. + 0x00006018, // .**........**.. + 0x00006018, // .**........**.. + 0x00006018, // .**........**.. + 0x0000F87C, // *****....*****. + 0x0000F87C, // *****....*****. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 78 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x0000787C, // .****....*****. + 0x0000787C, // .****....*****. + 0x00003C18, // ..****.....**.. + 0x00003C18, // ..****.....**.. + 0x00003618, // ..**.**....**.. + 0x00003618, // ..**.**....**.. + 0x00003318, // ..**..**...**.. + 0x00003318, // ..**..**...**.. + 0x00003198, // ..**...**..**.. + 0x00003198, // ..**...**..**.. + 0x000030D8, // ..**....**.**.. + 0x000030D8, // ..**....**.**.. + 0x00003078, // ..**.....****.. + 0x00007C78, // .*****...****.. + 0x00007C38, // .*****....***.. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 79 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000007C0, // .....*****..... + 0x00001FF0, // ...*********... + 0x00003838, // ..***.....***.. + 0x00003018, // ..**.......**.. + 0x0000701C, // .***.......***. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000701C, // .***.......***. + 0x00003018, // ..**.......**.. + 0x00003838, // ..***.....***.. + 0x00001FF0, // ...*********... + 0x000007C0, // .....*****..... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 80 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00007FE0, // .**********.... + 0x00007FF8, // .************.. + 0x0000181C, // ...**......***. + 0x0000180C, // ...**.......**. + 0x0000180C, // ...**.......**. + 0x0000180C, // ...**.......**. + 0x0000180C, // ...**.......**. + 0x0000181C, // ...**......***. + 0x00001FF8, // ...**********.. + 0x00001FE0, // ...********.... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00007F80, // .********...... + 0x00007F80, // .********...... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 81 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000007C0, // .....*****..... + 0x00001FF0, // ...*********... + 0x00003838, // ..***.....***.. + 0x00003018, // ..**.......**.. + 0x0000701C, // .***.......***. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000701C, // .***.......***. + 0x00003018, // ..**.......**.. + 0x00003838, // ..***.....***.. + 0x00001FF0, // ...*********... + 0x000007C0, // .....*****..... + 0x0000070C, // .....***....**. + 0x00001FFC, // ...***********. + 0x00001CF0, // ...***..****... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 82 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x0000FF80, // *********...... + 0x0000FFE0, // ***********.... + 0x00003070, // ..**.....***... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003070, // ..**.....***... + 0x00003FE0, // ..*********.... + 0x00003F80, // ..*******...... + 0x000031C0, // ..**...***..... + 0x000030E0, // ..**....***.... + 0x00003060, // ..**.....**.... + 0x00003070, // ..**.....***... + 0x0000FC3C, // ******....****. + 0x0000FC3C, // ******....****. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 83 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000FD8, // ....******.**.. + 0x00001FF8, // ...**********.. + 0x00003838, // ..***.....***.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003800, // ..***.......... + 0x00001F00, // ...*****....... + 0x00000FE0, // ....*******.... + 0x000001F0, // .......*****... + 0x00000038, // ..........***.. + 0x00006018, // .**........**.. + 0x00006018, // .**........**.. + 0x00007038, // .***......***.. + 0x00007FF0, // .***********... + 0x00006FE0, // .**.*******.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 84 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00007FF8, // .************.. + 0x00007FF8, // .************.. + 0x00006318, // .**...**...**.. + 0x00006318, // .**...**...**.. + 0x00006318, // .**...**...**.. + 0x00006318, // .**...**...**.. + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00001FE0, // ...********.... + 0x00001FE0, // ...********.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 85 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00007C7C, // .*****...*****. + 0x00007C7C, // .*****...*****. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00001830, // ...**.....**... + 0x00001FF0, // ...*********... + 0x00000FE0, // ....*******.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 86 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x0000F87C, // *****....*****. + 0x0000F87C, // *****....*****. + 0x00006018, // .**........**.. + 0x00006018, // .**........**.. + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00001860, // ...**....**.... + 0x00001860, // ...**....**.... + 0x00001860, // ...**....**.... + 0x00000CC0, // ....**..**..... + 0x00000CC0, // ....**..**..... + 0x00000780, // .....****...... + 0x00000780, // .....****...... + 0x00000780, // .....****...... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 87 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x0000F87C, // *****....*****. + 0x0000F87C, // *****....*****. + 0x00006018, // .**........**.. + 0x00006318, // .**...**...**.. + 0x00006318, // .**...**...**.. + 0x00006798, // .**..****..**.. + 0x00006798, // .**..****..**.. + 0x00006FD8, // .**.******.**.. + 0x00006CD8, // .**.**..**.**.. + 0x00006CD8, // .**.**..**.**.. + 0x00003CF0, // ..****..****... + 0x00003870, // ..***....***... + 0x00003870, // ..***....***... + 0x00003870, // ..***....***... + 0x00003870, // ..***....***... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 88 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x0000FCFC, // ******..******. + 0x0000FCFC, // ******..******. + 0x00007038, // .***......***.. + 0x00003870, // ..***....***... + 0x00001CE0, // ...***..***.... + 0x00000FC0, // ....******..... + 0x00000780, // .....****...... + 0x00000300, // ......**....... + 0x00000780, // .....****...... + 0x00000CC0, // ....**..**..... + 0x00001CE0, // ...***..***.... + 0x00003870, // ..***....***... + 0x00007038, // .***......***.. + 0x0000FCFC, // ******..******. + 0x0000FCFC, // ******..******. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 89 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x0000FCFC, // ******..******. + 0x0000FCFC, // ******..******. + 0x00007038, // .***......***.. + 0x00003870, // ..***....***... + 0x00001860, // ...**....**.... + 0x00000CC0, // ....**..**..... + 0x00000FC0, // ....******..... + 0x00000780, // .....****...... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00001FE0, // ...********.... + 0x00001FE0, // ...********.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 90 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00003FF8, // ..***********.. + 0x00003FF8, // ..***********.. + 0x00003038, // ..**......***.. + 0x00003070, // ..**.....***... + 0x000030E0, // ..**....***.... + 0x000000C0, // ........**..... + 0x000001C0, // .......***..... + 0x00000380, // ......***...... + 0x00000700, // .....***....... + 0x00000600, // .....**........ + 0x00000E18, // ....***....**.. + 0x00001C18, // ...***.....**.. + 0x00003818, // ..***......**.. + 0x00003FF8, // ..***********.. + 0x00003FF8, // ..***********.. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 91 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000003E0, // ......*****.... + 0x000003E0, // ......*****.... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x000003E0, // ......*****.... + 0x000003E0, // ......*****.... + 0x00000000, // ............... + }, + { // 92 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00003000, // ..**........... + 0x00003000, // ..**........... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00000C00, // ....**......... + 0x00000C00, // ....**......... + 0x00000600, // .....**........ + 0x00000600, // .....**........ + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000180, // .......**...... + 0x00000180, // .......**...... + 0x000000C0, // ........**..... + 0x000000C0, // ........**..... + 0x00000060, // .........**.... + 0x00000060, // .........**.... + 0x00000030, // ..........**... + 0x00000030, // ..........**... + 0x00000018, // ...........**.. + 0x00000018, // ...........**.. + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 93 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00001F00, // ...*****....... + 0x00001F00, // ...*****....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00001F00, // ...*****....... + 0x00001F00, // ...*****....... + 0x00000000, // ............... + }, + { // 94 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000780, // .....****...... + 0x00000780, // .....****...... + 0x00000CC0, // ....**..**..... + 0x00000CC0, // ....**..**..... + 0x00001860, // ...**....**.... + 0x00001860, // ...**....**.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 95 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x0000FFFE, // *************** + 0x0000FFFE, // *************** + 0x00000000, // ............... + }, + { // 96 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000700, // .....***....... + 0x00000700, // .....***....... + 0x00000380, // ......***...... + 0x00000180, // .......**...... + 0x000000C0, // ........**..... + 0x00000040, // .........*..... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 97 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00001F80, // ...******...... + 0x00003FC0, // ..********..... + 0x000030E0, // ..**....***.... + 0x00000060, // .........**.... + 0x00000FE0, // ....*******.... + 0x00003FE0, // ..*********.... + 0x00007060, // .***.....**.... + 0x00006060, // .**......**.... + 0x000060E0, // .**.....***.... + 0x00007FF8, // .************.. + 0x00003F78, // ..******.****.. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 98 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00007800, // .****.......... + 0x00007800, // .****.......... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00001BE0, // ...**.*****.... + 0x00001FF8, // ...**********.. + 0x00001E38, // ...****...***.. + 0x00001C1C, // ...***.....***. + 0x0000180C, // ...**.......**. + 0x0000180C, // ...**.......**. + 0x0000180C, // ...**.......**. + 0x00001C1C, // ...***.....***. + 0x00001E38, // ...****...***.. + 0x00007FF8, // .************.. + 0x00007BE0, // .****.*****.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 99 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000FD8, // ....******.**.. + 0x00003FF8, // ..***********.. + 0x00003878, // ..***....****.. + 0x00007038, // .***......***.. + 0x00006018, // .**........**.. + 0x00006000, // .**............ + 0x00006000, // .**............ + 0x00007000, // .***........... + 0x00003838, // ..***.....***.. + 0x00003FF8, // ..***********.. + 0x00000FE0, // ....*******.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 100 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000000F0, // ........****... + 0x000000F0, // ........****... + 0x00000030, // ..........**... + 0x00000030, // ..........**... + 0x00000030, // ..........**... + 0x00000FB0, // ....*****.**... + 0x00003FF0, // ..**********... + 0x000038F0, // ..***...****... + 0x00007070, // .***.....***... + 0x00006030, // .**.......**... + 0x00006030, // .**.......**... + 0x00006030, // .**.......**... + 0x00007070, // .***.....***... + 0x000038F0, // ..***...****... + 0x00003FFC, // ..************. + 0x00000FBC, // ....*****.****. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 101 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000FC0, // ....******..... + 0x00003FF0, // ..**********... + 0x00003870, // ..***....***... + 0x00007038, // .***......***.. + 0x00006018, // .**........**.. + 0x00007FF8, // .************.. + 0x00007FF8, // .************.. + 0x00007000, // .***........... + 0x00003838, // ..***.....***.. + 0x00003FF8, // ..***********.. + 0x00000FE0, // ....*******.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 102 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000001F8, // .......******.. + 0x000003F8, // ......*******.. + 0x00000700, // .....***....... + 0x00000600, // .....**........ + 0x00000600, // .....**........ + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00000600, // .....**........ + 0x00000600, // .....**........ + 0x00000600, // .....**........ + 0x00000600, // .....**........ + 0x00000600, // .....**........ + 0x00000600, // .....**........ + 0x00000600, // .....**........ + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 103 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000FBC, // ....*****.****. + 0x00003FFC, // ..************. + 0x000038F0, // ..***...****... + 0x00007070, // .***.....***... + 0x00006030, // .**.......**... + 0x00006030, // .**.......**... + 0x00006030, // .**.......**... + 0x00007070, // .***.....***... + 0x000038F0, // ..***...****... + 0x00003FF0, // ..**********... + 0x00000FB0, // ....*****.**... + 0x00000030, // ..........**... + 0x00000030, // ..........**... + 0x00000070, // .........***... + 0x00001FE0, // ...********.... + 0x00001FC0, // ...*******..... + }, + { // 104 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x0000F000, // ****........... + 0x0000F000, // ****........... + 0x00003000, // ..**........... + 0x00003000, // ..**........... + 0x00003000, // ..**........... + 0x000037C0, // ..**.*****..... + 0x00003FE0, // ..*********.... + 0x00003C70, // ..****...***... + 0x00003830, // ..***.....**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x0000FCFC, // ******..******. + 0x0000FCFC, // ******..******. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 105 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000700, // .....***....... + 0x00000700, // .....***....... + 0x00000700, // .....***....... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00001F00, // ...*****....... + 0x00001F00, // ...*****....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 106 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000380, // ......***...... + 0x00000380, // ......***...... + 0x00000380, // ......***...... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00003FC0, // ..********..... + 0x00003FC0, // ..********..... + 0x000000C0, // ........**..... + 0x000000C0, // ........**..... + 0x000000C0, // ........**..... + 0x000000C0, // ........**..... + 0x000000C0, // ........**..... + 0x000000C0, // ........**..... + 0x000000C0, // ........**..... + 0x000000C0, // ........**..... + 0x000000C0, // ........**..... + 0x000000C0, // ........**..... + 0x000000C0, // ........**..... + 0x000001C0, // .......***..... + 0x00003F80, // ..*******...... + 0x00003F00, // ..******....... + }, + { // 107 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00007800, // .****.......... + 0x00007800, // .****.......... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x000018F0, // ...**...****... + 0x000018F0, // ...**...****... + 0x000019C0, // ...**..***..... + 0x00001B80, // ...**.***...... + 0x00001F00, // ...*****....... + 0x00001F00, // ...*****....... + 0x00001B80, // ...**.***...... + 0x000019C0, // ...**..***..... + 0x000018E0, // ...**...***.... + 0x000078FC, // .****...******. + 0x000078FC, // .****...******. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 108 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00001F00, // ...*****....... + 0x00001F00, // ...*****....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 109 + 15, 26, + 0x00000000, // ................ + 0x00000000, // ................ + 0x00000000, // ................ + 0x00000000, // ................ + 0x00000000, // ................ + 0x00000000, // ................ + 0x00000000, // ................ + 0x00000000, // ................ + 0x00000000, // ................ + 0x00000000, // ................ + 0x0001DEF0, // ***.****.****... + 0x0001FFF8, // **************.. + 0x00007398, // ..***..***..**.. + 0x00006318, // ..**...**...**.. + 0x00006318, // ..**...**...**.. + 0x00006318, // ..**...**...**.. + 0x00006318, // ..**...**...**.. + 0x00006318, // ..**...**...**.. + 0x00006318, // ..**...**...**.. + 0x0001F3DE, // *****..****.**** + 0x0001F3DE, // *****..****.**** + 0x00000000, // ................ + 0x00000000, // ................ + 0x00000000, // ................ + 0x00000000, // ................ + 0x00000000, // ................ + }, + { // 110 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x0000F3C0, // ****..****..... + 0x0000F7E0, // ****.******.... + 0x00003C70, // ..****...***... + 0x00003830, // ..***.....**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x0000FCFC, // ******..******. + 0x0000FCFC, // ******..******. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 111 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000FC0, // ....******..... + 0x00003FF0, // ..**********... + 0x00003870, // ..***....***... + 0x00007038, // .***......***.. + 0x00006018, // .**........**.. + 0x00006018, // .**........**.. + 0x00006018, // .**........**.. + 0x00007038, // .***......***.. + 0x00003870, // ..***....***... + 0x00003FF0, // ..**********... + 0x00000FC0, // ....******..... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 112 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x0000F7C0, // ****.*****..... + 0x0000FFF0, // ************... + 0x00003C70, // ..****...***... + 0x00003838, // ..***.....***.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003838, // ..***.....***.. + 0x00003C70, // ..****...***... + 0x00003FF0, // ..**********... + 0x000037C0, // ..**.*****..... + 0x00003000, // ..**........... + 0x00003000, // ..**........... + 0x00003000, // ..**........... + 0x0000FE00, // *******........ + 0x0000FE00, // *******........ + }, + { // 113 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000FBC, // ....*****.****. + 0x00003FFC, // ..************. + 0x000038F0, // ..***...****... + 0x00007070, // .***.....***... + 0x00006030, // .**.......**... + 0x00006030, // .**.......**... + 0x00006030, // .**.......**... + 0x00007070, // .***.....***... + 0x000038F0, // ..***...****... + 0x00003FF0, // ..**********... + 0x00000FB0, // ....*****.**... + 0x00000030, // ..........**... + 0x00000030, // ..........**... + 0x00000030, // ..........**... + 0x000001FC, // .......*******. + 0x000001FC, // .......*******. + }, + { // 114 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00003CF0, // ..****..****... + 0x00003FF8, // ..***********.. + 0x00000F18, // ....****...**.. + 0x00000E00, // ....***........ + 0x00000C00, // ....**......... + 0x00000C00, // ....**......... + 0x00000C00, // ....**......... + 0x00000C00, // ....**......... + 0x00000C00, // ....**......... + 0x00007FE0, // .**********.... + 0x00007FE0, // .**********.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 115 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000FB0, // ....*****.**... + 0x00001FF0, // ...*********... + 0x00003870, // ..***....***... + 0x00003830, // ..***.....**... + 0x00001F00, // ...*****....... + 0x000007C0, // .....*****..... + 0x000001F0, // .......*****... + 0x00003038, // ..**......***.. + 0x00003838, // ..***.....***.. + 0x00003FF0, // ..**********... + 0x000037E0, // ..**.******.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 116 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00007FE0, // .**********.... + 0x00007FE0, // .**********.... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00001C70, // ...***...***... + 0x00000FF0, // ....********... + 0x000007C0, // .....*****..... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 117 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x0000F0F0, // ****....****... + 0x0000F0F0, // ****....****... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003870, // ..***....***... + 0x00001FFC, // ...***********. + 0x00000FBC, // ....*****.****. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 118 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x0000FCFC, // ******..******. + 0x0000FCFC, // ******..******. + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00001860, // ...**....**.... + 0x00001860, // ...**....**.... + 0x00000CC0, // ....**..**..... + 0x00000CC0, // ....**..**..... + 0x00000780, // .....****...... + 0x00000780, // .....****...... + 0x00000300, // ......**....... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 119 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x0000F87C, // *****....*****. + 0x0000F87C, // *****....*****. + 0x00006318, // .**...**...**.. + 0x00006318, // .**...**...**.. + 0x00003330, // ..**..**..**... + 0x000037B0, // ..**.****.**... + 0x000037B0, // ..**.****.**... + 0x00003CF0, // ..****..****... + 0x00001CE0, // ...***..***.... + 0x00001860, // ...**....**.... + 0x00001860, // ...**....**.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 120 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00007CF8, // .*****..*****.. + 0x00007CF8, // .*****..*****.. + 0x00001860, // ...**....**.... + 0x00000CC0, // ....**..**..... + 0x00000780, // .....****...... + 0x00000300, // ......**....... + 0x00000780, // .....****...... + 0x00000CC0, // ....**..**..... + 0x00001860, // ...**....**.... + 0x00007CF8, // .*****..*****.. + 0x00007CF8, // .*****..*****.. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 121 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00007CF8, // .*****..*****.. + 0x00007CF8, // .*****..*****.. + 0x00003030, // ..**......**... + 0x00003870, // ..***....***... + 0x00001860, // ...**....**.... + 0x00001CE0, // ...***..***.... + 0x00000CC0, // ....**..**..... + 0x00000DC0, // ....**.***..... + 0x00000780, // .....****...... + 0x00000780, // .....****...... + 0x00000300, // ......**....... + 0x00000700, // .....***....... + 0x00000600, // .....**........ + 0x00000E00, // ....***........ + 0x00007F00, // .*******....... + 0x00007F00, // .*******....... + }, + { // 122 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x000030E0, // ..**....***.... + 0x000031C0, // ..**...***..... + 0x00000380, // ......***...... + 0x00000700, // .....***....... + 0x00000E00, // ....***........ + 0x00001C30, // ...***....**... + 0x00003830, // ..***.....**... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 123 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000000E0, // ........***.... + 0x00000180, // .......**...... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000700, // .....***....... + 0x00000E00, // ....***........ + 0x00000700, // .....***....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000180, // .......**...... + 0x000000E0, // ........***.... + 0x00000000, // ............... + }, + { // 124 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 125 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00001C00, // ...***......... + 0x00000600, // .....**........ + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000380, // ......***...... + 0x000001C0, // .......***..... + 0x00000380, // ......***...... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000600, // .....**........ + 0x00001C00, // ...***......... + 0x00000000, // ............... + }, + { // 126 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00001E18, // ...****....**.. + 0x00003F38, // ..******..***.. + 0x000073F0, // .***..******... + 0x000061E0, // .**....****.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 127 + 0, 26, + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + }, + { // 128 + 0, 26, + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + 0x00000000, // + }, + { // 129 + 0, 26, + 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, // + }, + { // 130 + 0, 26, + 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, // + }, + { // 131 + 0, 26, + 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, // + }, + { // 132 + 0, 26, + 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, // + }, + { // 133 + 0, 26, + 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, // + }, + { // 134 + 0, 26, + 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, // + }, + { // 135 + 0, 26, + 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, // + }, + { // 136 + 0, 26, + 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, // + }, + { // 137 + 0, 26, + 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, // + }, + { // 138 + 0, 26, + 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, // + }, + { // 139 + 0, 26, + 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, // + }, + { // 140 + 0, 26, + 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, // + }, + { // 141 + 0, 26, + 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, // + }, + { // 142 + 0, 26, + 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, // + }, + { // 143 + 0, 26, + 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, // + }, + { // 144 + 0, 26, + 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, // + }, + { // 145 + 0, 26, + 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, // + }, + { // 146 + 0, 26, + 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, // + }, + { // 147 + 0, 26, + 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, // + }, + { // 148 + 0, 26, + 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, // + }, + { // 149 + 0, 26, + 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, // + }, + { // 150 + 0, 26, + 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, // + }, + { // 151 + 0, 26, + 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, // + }, + { // 152 + 0, 26, + 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, // + }, + { // 153 + 0, 26, + 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, // + }, + { // 154 + 0, 26, + 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, // + }, + { // 155 + 0, 26, + 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, // + }, + { // 156 + 0, 26, + 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, // + }, + { // 157 + 0, 26, + 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, // + }, + { // 158 + 0, 26, + 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, // + }, + { // 159 + 0, 26, + 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, // + }, + { // 160 + 15, 26, + 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, // ............... + }, + { // 161 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000600, // .....**........ + 0x00000600, // .....**........ + 0x00000600, // .....**........ + 0x00000000, // ............... + 0x00000600, // .....**........ + 0x00000600, // .....**........ + 0x00000600, // .....**........ + 0x00000600, // .....**........ + 0x00000600, // .....**........ + 0x00000F00, // ....****....... + 0x00000F00, // ....****....... + 0x00000F00, // ....****....... + 0x00000F00, // ....****....... + 0x00000F00, // ....****....... + 0x00000F00, // ....****....... + 0x00000600, // .....**........ + }, + { // 162 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000F60, // ....****.**.... + 0x00001FE0, // ...********.... + 0x000038E0, // ..***...***.... + 0x00003060, // ..**.....**.... + 0x00003000, // ..**........... + 0x00003000, // ..**........... + 0x00003000, // ..**........... + 0x00003860, // ..***....**.... + 0x00001FE0, // ...********.... + 0x00000FC0, // ....******..... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 163 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000007C0, // .....*****..... + 0x00000FE0, // ....*******.... + 0x00001C60, // ...***...**.... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00007F80, // .********...... + 0x00007F80, // .********...... + 0x00000C00, // ....**......... + 0x00000C00, // ....**......... + 0x00001C00, // ...***......... + 0x00003818, // ..***......**.. + 0x00007FF8, // .************.. + 0x00007FF0, // .***********... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 164 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00003030, // ..**......**... + 0x00003FF0, // ..**********... + 0x00001FE0, // ...********.... + 0x00003870, // ..***....***... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003870, // ..***....***... + 0x00001FE0, // ...********.... + 0x00003FF0, // ..**********... + 0x00003030, // ..**......**... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 165 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00007CF8, // .*****..*****.. + 0x00007CF8, // .*****..*****.. + 0x00003870, // ..***....***... + 0x00001860, // ...**....**.... + 0x00001CE0, // ...***..***.... + 0x00000CC0, // ....**..**..... + 0x00000780, // .....****...... + 0x00000780, // .....****...... + 0x00001FE0, // ...********.... + 0x00000300, // ......**....... + 0x00001FE0, // ...********.... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00001FE0, // ...********.... + 0x00001FE0, // ...********.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 166 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 167 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000007F0, // .....*******... + 0x00000FF0, // ....********... + 0x00001C30, // ...***....**... + 0x00001830, // ...**.....**... + 0x00001C00, // ...***......... + 0x00003F00, // ..******....... + 0x000067C0, // .**..*****..... + 0x000061F0, // .**....*****... + 0x00007878, // .****....****.. + 0x00003E18, // ..*****....**.. + 0x00000F98, // ....*****..**.. + 0x000003F8, // ......*******.. + 0x000000F0, // ........****... + 0x00000060, // .........**.... + 0x00003060, // ..**.....**.... + 0x000030E0, // ..**....***.... + 0x00003FC0, // ..********..... + 0x00003F80, // ..*******...... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 168 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000018C0, // ...**...**..... + 0x000018C0, // ...**...**..... + 0x000018C0, // ...**...**..... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 169 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000780, // .....****...... + 0x00001FE0, // ...********.... + 0x00003870, // ..***....***... + 0x00006798, // .**..****..**.. + 0x00006FD8, // .**.******.**.. + 0x0000DCCC, // **.***..**..**. + 0x0000D80C, // **.**.......**. + 0x0000D80C, // **.**.......**. + 0x0000DCCC, // **.***..**..**. + 0x00006FD8, // .**.******.**.. + 0x00006798, // .**..****..**.. + 0x00003870, // ..***....***... + 0x00001FE0, // ...********.... + 0x00000780, // .....****...... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 170 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000780, // .....****...... + 0x00000CC0, // ....**..**..... + 0x000000C0, // ........**..... + 0x00000FC0, // ....******..... + 0x000018C0, // ...**...**..... + 0x000018C0, // ...**...**..... + 0x000019E0, // ...**..****.... + 0x00000F60, // ....****.**.... + 0x00000000, // ............... + 0x00001FE0, // ...********.... + 0x00001FE0, // ...********.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 171 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x0000071C, // .....***...***. + 0x00000E38, // ....***...***.. + 0x00001C70, // ...***...***... + 0x000038E0, // ..***...***.... + 0x000071C0, // .***...***..... + 0x000038E0, // ..***...***.... + 0x00001C70, // ...***...***... + 0x00000E38, // ....***...***.. + 0x0000071C, // .....***...***. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 172 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00007FF8, // .************.. + 0x00007FF8, // .************.. + 0x00000018, // ...........**.. + 0x00000018, // ...........**.. + 0x00000018, // ...........**.. + 0x00000018, // ...........**.. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 173 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00003FF8, // ..***********.. + 0x00003FF8, // ..***********.. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 174 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000780, // .....****...... + 0x00001FE0, // ...********.... + 0x00003870, // ..***....***... + 0x00006F98, // .**.*****..**.. + 0x00006FD8, // .**.******.**.. + 0x0000CCCC, // **..**..**..**. + 0x0000CCCC, // **..**..**..**. + 0x0000CF8C, // **..*****...**. + 0x0000CD8C, // **..**.**...**. + 0x00006CD8, // .**.**..**.**.. + 0x00006CD8, // .**.**..**.**.. + 0x00003870, // ..***....***... + 0x00001FE0, // ...********.... + 0x00000780, // .....****...... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 175 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00001FC0, // ...*******..... + 0x00001FC0, // ...*******..... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 176 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000780, // .....****...... + 0x00000CC0, // ....**..**..... + 0x00001860, // ...**....**.... + 0x00001860, // ...**....**.... + 0x00001860, // ...**....**.... + 0x00000CC0, // ....**..**..... + 0x00000780, // .....****...... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 177 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00007FF8, // .************.. + 0x00007FF8, // .************.. + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00007FF8, // .************.. + 0x00007FF8, // .************.. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 178 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000007C0, // .....*****..... + 0x00000C60, // ....**...**.... + 0x00000C60, // ....**...**.... + 0x000000C0, // ........**..... + 0x00000180, // .......**...... + 0x00000300, // ......**....... + 0x00000600, // .....**........ + 0x00000C60, // ....**...**.... + 0x00000FE0, // ....*******.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 179 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000007C0, // .....*****..... + 0x00000C60, // ....**...**.... + 0x00000C60, // ....**...**.... + 0x000000C0, // ........**..... + 0x000003C0, // ......****..... + 0x00000060, // .........**.... + 0x00000C60, // ....**...**.... + 0x00000C60, // ....**...**.... + 0x000007C0, // .....*****..... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 180 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000001C0, // .......***..... + 0x00000380, // ......***...... + 0x00000700, // .....***....... + 0x00000E00, // ....***........ + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 181 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x0000F0F0, // ****....****... + 0x0000F0F0, // ****....****... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003870, // ..***....***... + 0x00003FFC, // ..************. + 0x00003FBC, // ..*******.****. + 0x00003000, // ..**........... + 0x00003000, // ..**........... + 0x00003000, // ..**........... + 0x00003000, // ..**........... + 0x00003000, // ..**........... + }, + { // 182 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000FF8, // ....*********.. + 0x00003FF8, // ..***********.. + 0x00007360, // .***..**.**.... + 0x00007360, // .***..**.**.... + 0x00007360, // .***..**.**.... + 0x00007360, // .***..**.**.... + 0x00007360, // .***..**.**.... + 0x00003F60, // ..******.**.... + 0x00000F60, // ....****.**.... + 0x00000360, // ......**.**.... + 0x00000360, // ......**.**.... + 0x00000360, // ......**.**.... + 0x00000360, // ......**.**.... + 0x00000360, // ......**.**.... + 0x00000360, // ......**.**.... + 0x00000360, // ......**.**.... + 0x00001F78, // ...*****.****.. + 0x00001F78, // ...*****.****.. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 183 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000700, // .....***....... + 0x00000700, // .....***....... + 0x00000700, // .....***....... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 184 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000780, // .....****...... + 0x00000180, // .......**...... + 0x00000F80, // ....*****...... + 0x00000700, // .....***....... + }, + { // 185 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000300, // ......**....... + 0x00001F00, // ...*****....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00001FE0, // ...********.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 186 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000780, // .....****...... + 0x00000FC0, // ....******..... + 0x00001860, // ...**....**.... + 0x00001860, // ...**....**.... + 0x00001860, // ...**....**.... + 0x00001860, // ...**....**.... + 0x00000FC0, // ....******..... + 0x00000780, // .....****...... + 0x00000000, // ............... + 0x00001FE0, // ...********.... + 0x00001FE0, // ...********.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 187 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000071C0, // .***...***..... + 0x000038E0, // ..***...***.... + 0x00001C70, // ...***...***... + 0x00000E38, // ....***...***.. + 0x0000071C, // .....***...***. + 0x00000E38, // ....***...***.. + 0x00001C70, // ...***...***... + 0x000038E0, // ..***...***.... + 0x000071C0, // .***...***..... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 188 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00003000, // ...**........... + 0x0001F002, // *****..........* + 0x00003006, // ...**.........** + 0x0000300C, // ...**........**. + 0x00003018, // ...**.......**.. + 0x00003030, // ...**......**... + 0x00003060, // ...**.....**.... + 0x000030C8, // ...**....**..*.. + 0x0001FF98, // **********..**.. + 0x00000338, // .......**..***.. + 0x00000658, // ......**..*.**.. + 0x00000C98, // .....**..*..**.. + 0x00001918, // ....**..*...**.. + 0x000031FC, // ...**...*******. + 0x00006018, // ..**........**.. + 0x0000403C, // ..*........****. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 189 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00003000, // ...**........... + 0x0001F002, // *****..........* + 0x00003006, // ...**.........** + 0x0000300C, // ...**........**. + 0x00003018, // ...**.......**.. + 0x00003030, // ...**......**... + 0x00003060, // ...**.....**.... + 0x000030FC, // ...**....******. + 0x0001FFE6, // ************..** + 0x00000346, // .......**.*...** + 0x0000060C, // ......**.....**. + 0x00000C18, // .....**.....**.. + 0x00001830, // ....**.....**... + 0x00003060, // ...**.....**.... + 0x000060C6, // ..**.....**...** + 0x000040FE, // ..*......******* + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 190 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00007C00, // .*****......... + 0x0000C602, // **...**.......* + 0x0000C606, // **...**......** + 0x00000C0C, // ....**......**. + 0x00003C18, // ..****.....**.. + 0x00000630, // .....**...**... + 0x0000C660, // **...**..**.... + 0x0000C6C8, // **...**.**..*.. + 0x00007D98, // .*****.**..**.. + 0x00000338, // ......**..***.. + 0x00000658, // .....**..*.**.. + 0x00000C98, // ....**..*..**.. + 0x00001918, // ...**..*...**.. + 0x000031FC, // ..**...*******. + 0x00006018, // .**........**.. + 0x0000403C, // .*........****. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 191 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000000, // ............... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000700, // .....***....... + 0x00001E00, // ...****........ + 0x00003800, // ..***.......... + 0x00003000, // ..**........... + 0x00003060, // ..**.....**.... + 0x00003060, // ..**.....**.... + 0x00003860, // ..***....**.... + 0x00001FE0, // ...********.... + 0x00000FC0, // ....******..... + 0x00000000, // ............... + }, + { // 192 + 15, 26, + 0x00000000, // ............... + 0x00003800, // ..***.......... + 0x00001C00, // ...***......... + 0x00000E00, // ....***........ + 0x00000700, // .....***....... + 0x00000000, // ............... + 0x00003F00, // ..******....... + 0x00003F00, // ..******....... + 0x00000780, // .....****...... + 0x00000780, // .....****...... + 0x00000CC0, // ....**..**..... + 0x00000CC0, // ....**..**..... + 0x00001CE0, // ...***..***.... + 0x00001860, // ...**....**.... + 0x00001860, // ...**....**.... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00007038, // .***......***.. + 0x00006018, // .**........**.. + 0x0000FCFC, // ******..******. + 0x0000FCFC, // ******..******. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 193 + 15, 26, + 0x00000000, // ............... + 0x000000E0, // ........***.... + 0x000001C0, // .......***..... + 0x00000380, // ......***...... + 0x00000700, // .....***....... + 0x00000000, // ............... + 0x00003F00, // ..******....... + 0x00003F00, // ..******....... + 0x00000780, // .....****...... + 0x00000780, // .....****...... + 0x00000CC0, // ....**..**..... + 0x00000CC0, // ....**..**..... + 0x00001CE0, // ...***..***.... + 0x00001860, // ...**....**.... + 0x00001860, // ...**....**.... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00007038, // .***......***.. + 0x00006018, // .**........**.. + 0x0000FCFC, // ******..******. + 0x0000FCFC, // ******..******. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 194 + 15, 26, + 0x00000600, // .....**........ + 0x00000F00, // ....****....... + 0x00001F80, // ...******...... + 0x000039C0, // ..***..***..... + 0x000070E0, // .***....***.... + 0x00000000, // ............... + 0x00003F00, // ..******....... + 0x00003F00, // ..******....... + 0x00000780, // .....****...... + 0x00000780, // .....****...... + 0x00000CC0, // ....**..**..... + 0x00000CC0, // ....**..**..... + 0x00001CE0, // ...***..***.... + 0x00001860, // ...**....**.... + 0x00001860, // ...**....**.... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00007038, // .***......***.. + 0x00006018, // .**........**.. + 0x0000FCFC, // ******..******. + 0x0000FCFC, // ******..******. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 195 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000E60, // ....***..**.... + 0x00001FC0, // ...*******..... + 0x00003380, // ..**..***...... + 0x00000000, // ............... + 0x00003F00, // ..******....... + 0x00003F00, // ..******....... + 0x00000780, // .....****...... + 0x00000780, // .....****...... + 0x00000CC0, // ....**..**..... + 0x00000CC0, // ....**..**..... + 0x00001CE0, // ...***..***.... + 0x00001860, // ...**....**.... + 0x00001860, // ...**....**.... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00007038, // .***......***.. + 0x00006018, // .**........**.. + 0x0000FCFC, // ******..******. + 0x0000FCFC, // ******..******. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 196 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x000018C0, // ...**...**..... + 0x000018C0, // ...**...**..... + 0x000018C0, // ...**...**..... + 0x00000000, // ............... + 0x00003F00, // ..******....... + 0x00003F00, // ..******....... + 0x00000780, // .....****...... + 0x00000780, // .....****...... + 0x00000CC0, // ....**..**..... + 0x00000CC0, // ....**..**..... + 0x00001CE0, // ...***..***.... + 0x00001860, // ...**....**.... + 0x00001860, // ...**....**.... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00007038, // .***......***.. + 0x00006018, // .**........**.. + 0x0000FCFC, // ******..******. + 0x0000FCFC, // ******..******. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 197 + 15, 26, + 0x00000000, // ............... + 0x00000700, // .....***....... + 0x00000D80, // ....**.**...... + 0x00000880, // ....*...*...... + 0x00000D80, // ....**.**...... + 0x00000700, // .....***....... + 0x00003F00, // ..******....... + 0x00003F00, // ..******....... + 0x00000780, // .....****...... + 0x00000780, // .....****...... + 0x00000CC0, // ....**..**..... + 0x00000CC0, // ....**..**..... + 0x00001CE0, // ...***..***.... + 0x00001860, // ...**....**.... + 0x00001860, // ...**....**.... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00007038, // .***......***.. + 0x00006018, // .**........**.. + 0x0000FCFC, // ******..******. + 0x0000FCFC, // ******..******. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 198 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000FFE, // ....*********** + 0x00000FFE, // ....*********** + 0x00000386, // ......***....** + 0x00000786, // .....****....** + 0x00000780, // .....****...... + 0x00000D98, // ....**.**..**.. + 0x000009F8, // ....*..******.. + 0x000019F8, // ...**..******.. + 0x00001F98, // ...******..**.. + 0x00003F80, // ..*******...... + 0x00003180, // ..**...**...... + 0x00006186, // .**....**....** + 0x00006186, // .**....**....** + 0x0000F7FE, // ****.********** + 0x0000F7FE, // ****.********** + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 199 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000007D8, // .....*****.**.. + 0x00001FF8, // ...**********.. + 0x00003838, // ..***.....***.. + 0x00003018, // ..**.......**.. + 0x00007018, // .***.......**.. + 0x00006000, // .**............ + 0x00006000, // .**............ + 0x00006000, // .**............ + 0x00006000, // .**............ + 0x00006000, // .**............ + 0x00007000, // .***........... + 0x00003008, // ..**........*.. + 0x00003818, // ..***......**.. + 0x00001FF0, // ...*********... + 0x000007E0, // .....******.... + 0x00000300, // ......**....... + 0x00000780, // .....****...... + 0x00000180, // .......**...... + 0x00000F80, // ....*****...... + 0x00000700, // .....***....... + }, + { // 200 + 15, 26, + 0x00000000, // ............... + 0x00001C00, // ...***......... + 0x00000E00, // ....***........ + 0x00000700, // .....***....... + 0x00000380, // ......***...... + 0x00000000, // ............... + 0x00007FF8, // .************.. + 0x00007FF8, // .************.. + 0x00001818, // ...**......**.. + 0x00001818, // ...**......**.. + 0x000018D8, // ...**...**.**.. + 0x000018C0, // ...**...**..... + 0x00001FC0, // ...*******..... + 0x00001FC0, // ...*******..... + 0x000018C0, // ...**...**..... + 0x000018C0, // ...**...**..... + 0x0000180C, // ...**.......**. + 0x0000180C, // ...**.......**. + 0x0000180C, // ...**.......**. + 0x00007FFC, // .*************. + 0x00007FFC, // .*************. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 201 + 15, 26, + 0x00000000, // ............... + 0x00000070, // .........***... + 0x000000E0, // ........***.... + 0x000001C0, // .......***..... + 0x00000380, // ......***...... + 0x00000000, // ............... + 0x00007FF8, // .************.. + 0x00007FF8, // .************.. + 0x00001818, // ...**......**.. + 0x00001818, // ...**......**.. + 0x000018D8, // ...**...**.**.. + 0x000018C0, // ...**...**..... + 0x00001FC0, // ...*******..... + 0x00001FC0, // ...*******..... + 0x000018C0, // ...**...**..... + 0x000018C0, // ...**...**..... + 0x0000180C, // ...**.......**. + 0x0000180C, // ...**.......**. + 0x0000180C, // ...**.......**. + 0x00007FFC, // .*************. + 0x00007FFC, // .*************. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 202 + 15, 26, + 0x00000180, // .......**...... + 0x000003C0, // ......****..... + 0x000007E0, // .....******.... + 0x00000E70, // ....***..***... + 0x00001C38, // ...***....***.. + 0x00000000, // ............... + 0x00007FF8, // .************.. + 0x00007FF8, // .************.. + 0x00001818, // ...**......**.. + 0x00001818, // ...**......**.. + 0x000018D8, // ...**...**.**.. + 0x000018C0, // ...**...**..... + 0x00001FC0, // ...*******..... + 0x00001FC0, // ...*******..... + 0x000018C0, // ...**...**..... + 0x000018C0, // ...**...**..... + 0x0000180C, // ...**.......**. + 0x0000180C, // ...**.......**. + 0x0000180C, // ...**.......**. + 0x00007FFC, // .*************. + 0x00007FFC, // .*************. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 203 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000C60, // ....**...**.... + 0x00000C60, // ....**...**.... + 0x00000C60, // ....**...**.... + 0x00000000, // ............... + 0x00007FF8, // .************.. + 0x00007FF8, // .************.. + 0x00001818, // ...**......**.. + 0x00001818, // ...**......**.. + 0x000018D8, // ...**...**.**.. + 0x000018C0, // ...**...**..... + 0x00001FC0, // ...*******..... + 0x00001FC0, // ...*******..... + 0x000018C0, // ...**...**..... + 0x000018C0, // ...**...**..... + 0x0000180C, // ...**.......**. + 0x0000180C, // ...**.......**. + 0x0000180C, // ...**.......**. + 0x00007FFC, // .*************. + 0x00007FFC, // .*************. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 204 + 15, 26, + 0x00000000, // ............... + 0x00001C00, // ...***......... + 0x00000E00, // ....***........ + 0x00000700, // .....***....... + 0x00000380, // ......***...... + 0x00000000, // ............... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 205 + 15, 26, + 0x00000000, // ............... + 0x000000E0, // ........***.... + 0x000001C0, // .......***..... + 0x00000380, // ......***...... + 0x00000700, // .....***....... + 0x00000000, // ............... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 206 + 15, 26, + 0x00000300, // ......**....... + 0x00000780, // .....****...... + 0x00000FC0, // ....******..... + 0x00001CE0, // ...***..***.... + 0x00003870, // ..***....***... + 0x00000000, // ............... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 207 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000CC0, // ....**..**..... + 0x00000CC0, // ....**..**..... + 0x00000CC0, // ....**..**..... + 0x00000000, // ............... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 208 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x0000FFC0, // **********..... + 0x0000FFF0, // ************... + 0x00003038, // ..**......***.. + 0x00003018, // ..**.......**.. + 0x0000301C, // ..**.......***. + 0x0000300C, // ..**........**. + 0x0000FE0C, // *******.....**. + 0x0000FE0C, // *******.....**. + 0x0000300C, // ..**........**. + 0x0000300C, // ..**........**. + 0x0000300C, // ..**........**. + 0x00003018, // ..**.......**.. + 0x00003038, // ..**......***.. + 0x0000FFF0, // ************... + 0x0000FFE0, // ***********.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 209 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000730, // .....***..**... + 0x00000FE0, // ....*******.... + 0x000019C0, // ...**..***..... + 0x00000000, // ............... + 0x0000787C, // .****....*****. + 0x0000787C, // .****....*****. + 0x00003C18, // ..****.....**.. + 0x00003C18, // ..****.....**.. + 0x00003618, // ..**.**....**.. + 0x00003618, // ..**.**....**.. + 0x00003318, // ..**..**...**.. + 0x00003318, // ..**..**...**.. + 0x00003198, // ..**...**..**.. + 0x00003198, // ..**...**..**.. + 0x000030D8, // ..**....**.**.. + 0x000030D8, // ..**....**.**.. + 0x00003078, // ..**.....****.. + 0x00007C78, // .*****...****.. + 0x00007C38, // .*****....***.. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 210 + 15, 26, + 0x00000000, // ............... + 0x00000E00, // ....***........ + 0x00000700, // .....***....... + 0x00000380, // ......***...... + 0x000001C0, // .......***..... + 0x00000000, // ............... + 0x000007C0, // .....*****..... + 0x00001FF0, // ...*********... + 0x00003838, // ..***.....***.. + 0x00003018, // ..**.......**.. + 0x0000701C, // .***.......***. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000701C, // .***.......***. + 0x00003018, // ..**.......**.. + 0x00003838, // ..***.....***.. + 0x00001FF0, // ...*********... + 0x000007C0, // .....*****..... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 211 + 15, 26, + 0x00000000, // ............... + 0x00000070, // .........***... + 0x000000E0, // ........***.... + 0x000001C0, // .......***..... + 0x00000380, // ......***...... + 0x00000000, // ............... + 0x000007C0, // .....*****..... + 0x00001FF0, // ...*********... + 0x00003838, // ..***.....***.. + 0x00003018, // ..**.......**.. + 0x0000701C, // .***.......***. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000701C, // .***.......***. + 0x00003018, // ..**.......**.. + 0x00003838, // ..***.....***.. + 0x00001FF0, // ...*********... + 0x000007C0, // .....*****..... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 212 + 15, 26, + 0x00000180, // .......**...... + 0x000003C0, // ......****..... + 0x000007E0, // .....******.... + 0x00000E70, // ....***..***... + 0x00001C38, // ...***....***.. + 0x00000000, // ............... + 0x000007C0, // .....*****..... + 0x00001FF0, // ...*********... + 0x00003838, // ..***.....***.. + 0x00003018, // ..**.......**.. + 0x0000701C, // .***.......***. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000701C, // .***.......***. + 0x00003018, // ..**.......**.. + 0x00003838, // ..***.....***.. + 0x00001FF0, // ...*********... + 0x000007C0, // .....*****..... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 213 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000730, // .....***..**... + 0x00000FE0, // ....*******.... + 0x000019C0, // ...**..***..... + 0x00000000, // ............... + 0x000007C0, // .....*****..... + 0x00001FF0, // ...*********... + 0x00003838, // ..***.....***.. + 0x00003018, // ..**.......**.. + 0x0000701C, // .***.......***. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000701C, // .***.......***. + 0x00003018, // ..**.......**.. + 0x00003838, // ..***.....***.. + 0x00001FF0, // ...*********... + 0x000007C0, // .....*****..... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 214 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000C60, // ....**...**.... + 0x00000C60, // ....**...**.... + 0x00000C60, // ....**...**.... + 0x00000000, // ............... + 0x000007C0, // .....*****..... + 0x00001FF0, // ...*********... + 0x00003838, // ..***.....***.. + 0x00003018, // ..**.......**.. + 0x0000701C, // .***.......***. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000600C, // .**.........**. + 0x0000701C, // .***.......***. + 0x00003018, // ..**.......**.. + 0x00003838, // ..***.....***.. + 0x00001FF0, // ...*********... + 0x000007C0, // .....*****..... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 215 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00002010, // ..*........*... + 0x00007038, // .***......***.. + 0x00003870, // ..***....***... + 0x00001CE0, // ...***..***.... + 0x00000FC0, // ....******..... + 0x00000780, // .....****...... + 0x00000780, // .....****...... + 0x00000FC0, // ....******..... + 0x00001CE0, // ...***..***.... + 0x00003870, // ..***....***... + 0x00007038, // .***......***.. + 0x00002010, // ..*........*... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 216 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x0000000C, // ............**. + 0x00000018, // ...........**.. + 0x000007F0, // .....*******... + 0x00001FF0, // ...*********... + 0x00003838, // ..***.....***.. + 0x00003078, // ..**.....****.. + 0x000070DC, // .***....**.***. + 0x0000608C, // .**.....*...**. + 0x0000618C, // .**....**...**. + 0x0000630C, // .**...**....**. + 0x0000620C, // .**...*.....**. + 0x0000660C, // .**..**.....**. + 0x0000741C, // .***.*.....***. + 0x00003C18, // ..****.....**.. + 0x00003838, // ..***.....***.. + 0x00001FF0, // ...*********... + 0x000037C0, // ..**.*****..... + 0x00006000, // .**............ + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 217 + 15, 26, + 0x00000000, // ............... + 0x00001C00, // ...***......... + 0x00000E00, // ....***........ + 0x00000700, // .....***....... + 0x00000380, // ......***...... + 0x00000000, // ............... + 0x00007C7C, // .*****...*****. + 0x00007C7C, // .*****...*****. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00001830, // ...**.....**... + 0x00001FF0, // ...*********... + 0x00000FE0, // ....*******.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 218 + 15, 26, + 0x00000000, // ............... + 0x00000070, // .........***... + 0x000000E0, // ........***.... + 0x000001C0, // .......***..... + 0x00000380, // ......***...... + 0x00000000, // ............... + 0x00007C7C, // .*****...*****. + 0x00007C7C, // .*****...*****. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00001830, // ...**.....**... + 0x00001FF0, // ...*********... + 0x00000FE0, // ....*******.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 219 + 15, 26, + 0x00000180, // .......**...... + 0x000003C0, // ......****..... + 0x000007E0, // .....******.... + 0x00000E70, // ....***..***... + 0x00001C38, // ...***....***.. + 0x00000000, // ............... + 0x00007C7C, // .*****...*****. + 0x00007C7C, // .*****...*****. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00001830, // ...**.....**... + 0x00001FF0, // ...*********... + 0x00000FE0, // ....*******.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 220 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000C60, // ....**...**.... + 0x00000C60, // ....**...**.... + 0x00000C60, // ....**...**.... + 0x00000000, // ............... + 0x00007C7C, // .*****...*****. + 0x00007C7C, // .*****...*****. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00003018, // ..**.......**.. + 0x00001830, // ...**.....**... + 0x00001FF0, // ...*********... + 0x00000FE0, // ....*******.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 221 + 15, 26, + 0x00000000, // ............... + 0x000000E0, // ........***.... + 0x000001C0, // .......***..... + 0x00000380, // ......***...... + 0x00000700, // .....***....... + 0x00000000, // ............... + 0x0000FCFC, // ******..******. + 0x0000FCFC, // ******..******. + 0x00007038, // .***......***.. + 0x00003870, // ..***....***... + 0x00001860, // ...**....**.... + 0x00000CC0, // ....**..**..... + 0x00000FC0, // ....******..... + 0x00000780, // .....****...... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00001FE0, // ...********.... + 0x00001FE0, // ...********.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 222 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00007E00, // .******........ + 0x00007E00, // .******........ + 0x00001800, // ...**.......... + 0x00001FE0, // ...********.... + 0x00001FF8, // ...**********.. + 0x0000181C, // ...**......***. + 0x0000180C, // ...**.......**. + 0x0000180C, // ...**.......**. + 0x0000180C, // ...**.......**. + 0x0000181C, // ...**......***. + 0x00001FF8, // ...**********.. + 0x00001FE0, // ...********.... + 0x00001800, // ...**.......... + 0x00007E00, // .******........ + 0x00007E00, // .******........ + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 223 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000780, // .....****...... + 0x00000FC0, // ....******..... + 0x00001CE0, // ...***..***.... + 0x00001860, // ...**....**.... + 0x00001860, // ...**....**.... + 0x000018E0, // ...**...***.... + 0x00001BC0, // ...**.****..... + 0x00001BE0, // ...**.*****.... + 0x00001870, // ...**....***... + 0x00001838, // ...**.....***.. + 0x00001818, // ...**......**.. + 0x00001818, // ...**......**.. + 0x00001818, // ...**......**.. + 0x000019B8, // ...**..**.***.. + 0x00007DF0, // .*****.*****... + 0x00007CE0, // .*****..***.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 224 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00003800, // ..***.......... + 0x00001C00, // ...***......... + 0x00000E00, // ....***........ + 0x00000700, // .....***....... + 0x00000000, // ............... + 0x00001F80, // ...******...... + 0x00003FC0, // ..********..... + 0x000030E0, // ..**....***.... + 0x00000060, // .........**.... + 0x00000FE0, // ....*******.... + 0x00003FE0, // ..*********.... + 0x00007060, // .***.....**.... + 0x00006060, // .**......**.... + 0x000060E0, // .**.....***.... + 0x00007FF8, // .************.. + 0x00003F78, // ..******.****.. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 225 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000000E0, // ........***.... + 0x000001C0, // .......***..... + 0x00000380, // ......***...... + 0x00000700, // .....***....... + 0x00000000, // ............... + 0x00001F80, // ...******...... + 0x00003FC0, // ..********..... + 0x000030E0, // ..**....***.... + 0x00000060, // .........**.... + 0x00000FE0, // ....*******.... + 0x00003FE0, // ..*********.... + 0x00007060, // .***.....**.... + 0x00006060, // .**......**.... + 0x000060E0, // .**.....***.... + 0x00007FF8, // .************.. + 0x00003F78, // ..******.****.. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 226 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000700, // .....***....... + 0x00000F80, // ....*****...... + 0x00001DC0, // ...***.***..... + 0x000038E0, // ..***...***.... + 0x00000000, // ............... + 0x00001F80, // ...******...... + 0x00003FC0, // ..********..... + 0x000030E0, // ..**....***.... + 0x00000060, // .........**.... + 0x00000FE0, // ....*******.... + 0x00003FE0, // ..*********.... + 0x00007060, // .***.....**.... + 0x00006060, // .**......**.... + 0x000060E0, // .**.....***.... + 0x00007FF8, // .************.. + 0x00003F78, // ..******.****.. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 227 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000E60, // ....***..**.... + 0x00001FC0, // ...*******..... + 0x00003380, // ..**..***...... + 0x00000000, // ............... + 0x00001F80, // ...******...... + 0x00003FC0, // ..********..... + 0x000030E0, // ..**....***.... + 0x00000060, // .........**.... + 0x00000FE0, // ....*******.... + 0x00003FE0, // ..*********.... + 0x00007060, // .***.....**.... + 0x00006060, // .**......**.... + 0x000060E0, // .**.....***.... + 0x00007FF8, // .************.. + 0x00003F78, // ..******.****.. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 228 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000018C0, // ...**...**..... + 0x000018C0, // ...**...**..... + 0x000018C0, // ...**...**..... + 0x00000000, // ............... + 0x00001F80, // ...******...... + 0x00003FC0, // ..********..... + 0x000030E0, // ..**....***.... + 0x00000060, // .........**.... + 0x00000FE0, // ....*******.... + 0x00003FE0, // ..*********.... + 0x00007060, // .***.....**.... + 0x00006060, // .**......**.... + 0x000060E0, // .**.....***.... + 0x00007FF8, // .************.. + 0x00003F78, // ..******.****.. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 229 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000700, // .....***....... + 0x00000D80, // ....**.**...... + 0x00000880, // ....*...*...... + 0x00000D80, // ....**.**...... + 0x00000700, // .....***....... + 0x00001F80, // ...******...... + 0x00003FC0, // ..********..... + 0x000030E0, // ..**....***.... + 0x00000060, // .........**.... + 0x00000FE0, // ....*******.... + 0x00003FE0, // ..*********.... + 0x00007060, // .***.....**.... + 0x00006060, // .**......**.... + 0x000060E0, // .**.....***.... + 0x00007FF8, // .************.. + 0x00003F78, // ..******.****.. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 230 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00003CF0, // ..****..****... + 0x00007FF8, // .************.. + 0x0000679C, // .**..****..***. + 0x0000030C, // ......**....**. + 0x00001F0C, // ...*****....**. + 0x00007FFC, // .*************. + 0x0000E3FC, // ***...********. + 0x0000C300, // **....**....... + 0x0000C78C, // **...****...**. + 0x0000FFFC, // **************. + 0x00007CF0, // .*****..****... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 231 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000FB0, // ....*****.**... + 0x00003FF0, // ..**********... + 0x00003870, // ..***....***... + 0x00007030, // .***......**... + 0x00006030, // .**.......**... + 0x00006000, // .**............ + 0x00006000, // .**............ + 0x00007000, // .***........... + 0x00003830, // ..***.....**... + 0x00003FF0, // ..**********... + 0x00000FE0, // ....*******.... + 0x00000300, // ......**....... + 0x00000780, // .....****...... + 0x00000180, // .......**...... + 0x00000F80, // ....*****...... + 0x00000700, // .....***....... + }, + { // 232 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00001C00, // ...***......... + 0x00000E00, // ....***........ + 0x00000700, // .....***....... + 0x00000380, // ......***...... + 0x00000000, // ............... + 0x00000FC0, // ....******..... + 0x00003FF0, // ..**********... + 0x00003870, // ..***....***... + 0x00007038, // .***......***.. + 0x00006018, // .**........**.. + 0x00007FF8, // .************.. + 0x00007FF8, // .************.. + 0x00007000, // .***........... + 0x00003838, // ..***.....***.. + 0x00003FF8, // ..***********.. + 0x00000FE0, // ....*******.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 233 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000000E0, // ........***.... + 0x000001C0, // .......***..... + 0x00000380, // ......***...... + 0x00000700, // .....***....... + 0x00000000, // ............... + 0x00000FC0, // ....******..... + 0x00003FF0, // ..**********... + 0x00003870, // ..***....***... + 0x00007038, // .***......***.. + 0x00006018, // .**........**.. + 0x00007FF8, // .************.. + 0x00007FF8, // .************.. + 0x00007000, // .***........... + 0x00003838, // ..***.....***.. + 0x00003FF8, // ..***********.. + 0x00000FE0, // ....*******.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 234 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000380, // ......***...... + 0x000007C0, // .....*****..... + 0x00000EE0, // ....***.***.... + 0x00001C70, // ...***...***... + 0x00000000, // ............... + 0x00000FC0, // ....******..... + 0x00003FF0, // ..**********... + 0x00003870, // ..***....***... + 0x00007038, // .***......***.. + 0x00006018, // .**........**.. + 0x00007FF8, // .************.. + 0x00007FF8, // .************.. + 0x00007000, // .***........... + 0x00003838, // ..***.....***.. + 0x00003FF8, // ..***********.. + 0x00000FE0, // ....*******.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 235 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000018C0, // ...**...**..... + 0x000018C0, // ...**...**..... + 0x000018C0, // ...**...**..... + 0x00000000, // ............... + 0x00000FC0, // ....******..... + 0x00003FF0, // ..**********... + 0x00003870, // ..***....***... + 0x00007038, // .***......***.. + 0x00006018, // .**........**.. + 0x00007FF8, // .************.. + 0x00007FF8, // .************.. + 0x00007000, // .***........... + 0x00003838, // ..***.....***.. + 0x00003FF8, // ..***********.. + 0x00000FE0, // ....*******.... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 236 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00003800, // ..***.......... + 0x00001C00, // ...***......... + 0x00000E00, // ....***........ + 0x00000700, // .....***....... + 0x00000000, // ............... + 0x00001F00, // ...*****....... + 0x00001F00, // ...*****....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 237 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000000E0, // ........***.... + 0x000001C0, // .......***..... + 0x00000380, // ......***...... + 0x00000700, // .....***....... + 0x00000000, // ............... + 0x00001F00, // ...*****....... + 0x00001F00, // ...*****....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 238 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000700, // .....***....... + 0x00000F80, // ....*****...... + 0x00001DC0, // ...***.***..... + 0x000038E0, // ..***...***.... + 0x00000000, // ............... + 0x00001F00, // ...*****....... + 0x00001F00, // ...*****....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 239 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000018C0, // ...**...**..... + 0x000018C0, // ...**...**..... + 0x000018C0, // ...**...**..... + 0x00000000, // ............... + 0x00001F00, // ...*****....... + 0x00001F00, // ...*****....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00000300, // ......**....... + 0x00003FF0, // ..**********... + 0x00003FF0, // ..**********... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 240 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x0000F000, // ****........... + 0x0000FC70, // ******...***... + 0x00000FF0, // ....********... + 0x00001F80, // ...******...... + 0x00007DC0, // .*****.***..... + 0x000070E0, // .***....***.... + 0x00000FF0, // ....********... + 0x00003FF0, // ..**********... + 0x00003878, // ..***....****.. + 0x00007038, // .***......***.. + 0x00006018, // .**........**.. + 0x00006018, // .**........**.. + 0x00006018, // .**........**.. + 0x00007038, // .***......***.. + 0x00003870, // ..***....***... + 0x00003FF0, // ..**********... + 0x00000FC0, // ....******..... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 241 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000E60, // ....***..**.... + 0x00001FC0, // ...*******..... + 0x00003380, // ..**..***...... + 0x00000000, // ............... + 0x0000F3C0, // ****..****..... + 0x0000F7E0, // ****.******.... + 0x00003C70, // ..****...***... + 0x00003830, // ..***.....**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x0000FCFC, // ******..******. + 0x0000FCFC, // ******..******. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 242 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00001C00, // ...***......... + 0x00000E00, // ....***........ + 0x00000700, // .....***....... + 0x00000380, // ......***...... + 0x00000000, // ............... + 0x00000FC0, // ....******..... + 0x00003FF0, // ..**********... + 0x00003870, // ..***....***... + 0x00007038, // .***......***.. + 0x00006018, // .**........**.. + 0x00006018, // .**........**.. + 0x00006018, // .**........**.. + 0x00007038, // .***......***.. + 0x00003870, // ..***....***... + 0x00003FF0, // ..**********... + 0x00000FC0, // ....******..... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 243 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000000E0, // ........***.... + 0x000001C0, // .......***..... + 0x00000380, // ......***...... + 0x00000700, // .....***....... + 0x00000000, // ............... + 0x00000FC0, // ....******..... + 0x00003FF0, // ..**********... + 0x00003870, // ..***....***... + 0x00007038, // .***......***.. + 0x00006018, // .**........**.. + 0x00006018, // .**........**.. + 0x00006018, // .**........**.. + 0x00007038, // .***......***.. + 0x00003870, // ..***....***... + 0x00003FF0, // ..**********... + 0x00000FC0, // ....******..... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 244 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000700, // .....***....... + 0x00000F80, // ....*****...... + 0x00001DC0, // ...***.***..... + 0x000038E0, // ..***...***.... + 0x00000000, // ............... + 0x00000FC0, // ....******..... + 0x00003FF0, // ..**********... + 0x00003870, // ..***....***... + 0x00007038, // .***......***.. + 0x00006018, // .**........**.. + 0x00006018, // .**........**.. + 0x00006018, // .**........**.. + 0x00007038, // .***......***.. + 0x00003870, // ..***....***... + 0x00003FF0, // ..**********... + 0x00000FC0, // ....******..... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 245 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000E60, // ....***..**.... + 0x00001FC0, // ...*******..... + 0x00003380, // ..**..***...... + 0x00000000, // ............... + 0x00000FC0, // ....******..... + 0x00003FF0, // ..**********... + 0x00003870, // ..***....***... + 0x00007038, // .***......***.. + 0x00006018, // .**........**.. + 0x00006018, // .**........**.. + 0x00006018, // .**........**.. + 0x00007038, // .***......***.. + 0x00003870, // ..***....***... + 0x00003FF0, // ..**********... + 0x00000FC0, // ....******..... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 246 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000018C0, // ...**...**..... + 0x000018C0, // ...**...**..... + 0x000018C0, // ...**...**..... + 0x00000000, // ............... + 0x00000FC0, // ....******..... + 0x00003FF0, // ..**********... + 0x00003870, // ..***....***... + 0x00007038, // .***......***.. + 0x00006018, // .**........**.. + 0x00006018, // .**........**.. + 0x00006018, // .**........**.. + 0x00007038, // .***......***.. + 0x00003870, // ..***....***... + 0x00003FF0, // ..**********... + 0x00000FC0, // ....******..... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 247 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000700, // .....***....... + 0x00000700, // .....***....... + 0x00000700, // .....***....... + 0x00000000, // ............... + 0x00000000, // ............... + 0x0000FFF8, // *************.. + 0x0000FFF8, // *************.. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000700, // .....***....... + 0x00000700, // .....***....... + 0x00000700, // .....***....... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 248 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x0000000C, // ............**. + 0x00000FD8, // ....******.**.. + 0x00003FF0, // ..**********... + 0x00003870, // ..***....***... + 0x000070D8, // .***....**.**.. + 0x00006198, // .**....**..**.. + 0x00006318, // .**...**...**.. + 0x00006618, // .**..**....**.. + 0x00006C38, // .**.**....***.. + 0x00003870, // ..***....***... + 0x00003FF0, // ..**********... + 0x00003FC0, // ..********..... + 0x00006000, // .**............ + 0x0000C000, // **............. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 249 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00003800, // ..***.......... + 0x00001C00, // ...***......... + 0x00000E00, // ....***........ + 0x00000700, // .....***....... + 0x00000000, // ............... + 0x0000F0F0, // ****....****... + 0x0000F0F0, // ****....****... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003870, // ..***....***... + 0x00001FFC, // ...***********. + 0x00000FBC, // ....*****.****. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 250 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000001C0, // .......***..... + 0x00000380, // ......***...... + 0x00000700, // .....***....... + 0x00000E00, // ....***........ + 0x00000000, // ............... + 0x0000F0F0, // ****....****... + 0x0000F0F0, // ****....****... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003870, // ..***....***... + 0x00001FFC, // ...***********. + 0x00000FBC, // ....*****.****. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 251 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000700, // .....***....... + 0x00000F80, // ....*****...... + 0x00001DC0, // ...***.***..... + 0x000038E0, // ..***...***.... + 0x00000000, // ............... + 0x0000F0F0, // ****....****... + 0x0000F0F0, // ****....****... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003870, // ..***....***... + 0x00001FFC, // ...***********. + 0x00000FBC, // ....*****.****. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 252 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000018C0, // ...**...**..... + 0x000018C0, // ...**...**..... + 0x000018C0, // ...**...**..... + 0x00000000, // ............... + 0x0000F0F0, // ****....****... + 0x0000F0F0, // ****....****... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003030, // ..**......**... + 0x00003870, // ..***....***... + 0x00001FFC, // ...***********. + 0x00000FBC, // ....*****.****. + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + }, + { // 253 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000070, // .........***... + 0x000000E0, // ........***.... + 0x000001C0, // .......***..... + 0x00000380, // ......***...... + 0x00000000, // ............... + 0x00007CF8, // .*****..*****.. + 0x00007CF8, // .*****..*****.. + 0x00003030, // ..**......**... + 0x00003870, // ..***....***... + 0x00001860, // ...**....**.... + 0x00001CE0, // ...***..***.... + 0x00000CC0, // ....**..**..... + 0x00000DC0, // ....**.***..... + 0x00000780, // .....****...... + 0x00000780, // .....****...... + 0x00000300, // ......**....... + 0x00000700, // .....***....... + 0x00000600, // .....**........ + 0x00000E00, // ....***........ + 0x00007F00, // .*******....... + 0x00007F00, // .*******....... + }, + { // 254 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00007800, // .****.......... + 0x00007800, // .****.......... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00001BE0, // ...**.*****.... + 0x00001FF8, // ...**********.. + 0x00001E38, // ...****...***.. + 0x00001C1C, // ...***.....***. + 0x0000180C, // ...**.......**. + 0x0000180C, // ...**.......**. + 0x0000180C, // ...**.......**. + 0x00001C1C, // ...***.....***. + 0x00001E38, // ...****...***.. + 0x00001FF8, // ...**********.. + 0x00001BE0, // ...**.*****.... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00001800, // ...**.......... + 0x00007F00, // .*******....... + 0x00007F00, // .*******....... + }, + { // 255 + 15, 26, + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x00000000, // ............... + 0x000018C0, // ...**...**..... + 0x000018C0, // ...**...**..... + 0x000018C0, // ...**...**..... + 0x00000000, // ............... + 0x00007CF8, // .*****..*****.. + 0x00007CF8, // .*****..*****.. + 0x00003030, // ..**......**... + 0x00003870, // ..***....***... + 0x00001860, // ...**....**.... + 0x00001CE0, // ...***..***.... + 0x00000CC0, // ....**..**..... + 0x00000DC0, // ....**.***..... + 0x00000780, // .....****...... + 0x00000780, // .....****...... + 0x00000300, // ......**....... + 0x00000700, // .....***....... + 0x00000600, // .....**........ + 0x00000E00, // ....***........ + 0x00007F00, // .*******....... + 0x00007F00, // .*******....... + }, + }; diff --git a/i18n.c b/i18n.c new file mode 100644 index 0000000..7b93062 --- /dev/null +++ b/i18n.c @@ -0,0 +1,478 @@ +/* + * i18n.c: Internationalization + * + * See the main source file 'vdr.c' for copyright information and + * how to reach the author. + * + * $Id: i18n.c 1.6 2000/11/19 12:12:53 kls Exp $ + * + * Slovenian translations provided by Miha Setina + * + */ + +/* + * How to add a new language: + * + * 1. Announce your translation action on the Linux-DVB mailing + * list to avoid duplicate work. + * 2. Increase the value of 'NumLanguages'. + * 3. Insert a new line in every member of the 'Phrases[]' array, + * containing the translated text for the new language. + * For example, assuming you want to add the Italian language, + * + * { "English", + * "Deutsch", + * }, + * + * would become + * + * { "English", + * "Deutsch", + * "Italiano", + * }, + * + * and so on. Insert your language so that all the entries + * following 'English' will be sorted alphabetically, and write + * the name of your language in your language (not in English, + * which means that it should be 'Italiano', not 'Italian'). + * Note that only the characters defined in 'fontosd.c' will + * be available! + * 4. Compile VDR and test the new language by switching to it + * in the "Setup" menu. + * 5. Send the modified 'i18n.c' file to to have + * it included in the next version of VDR. + */ + +#include "i18n.h" +#include +#include "config.h" +#include "tools.h" + +const int NumLanguages = 3; + +typedef const char *tPhrase[NumLanguages]; + +const tPhrase Phrases[] = { + // The name of the language (this MUST be the first phrase!): + { "English", + "Deutsch", + "Slovenski", + }, + // Menu titles: + { "Main", + "Hauptmenü", + "Glavni meni", + }, + { "Schedule", + "Programm", + "Urnik", + }, + { "Channels", + "Kanäle", + "Kanali", + }, + { "Timers", + "Timer", + "Termini", + }, + { "Recordings", + "Aufzeichnungen", + "Posnetki", + }, + { "Setup", + "Einstellungen", + "Nastavitve", + }, + { "Commands", + "Befehle", + "Ukazi", + }, + { "Edit Channel", + "Kanal Editieren", + "Uredi kanal", + }, + { "Edit Timer", + "Timer Editieren", + "Uredi termin", + }, + { "Event", + "Sendung", + "Oddaja", + }, + { "Summary", + "Inhalt", + "Vsebina", + }, + { "Schedule - %s", + "Programm - %s", + "Urnik - %s", + }, + { "What's on now?", + "Was läuft jetzt?", + "Kaj je na sporedu?", + }, + { "What's on next?", + "Was läuft als nächstes?", + "Kaj sledi?", + }, + // Button texts (must not be more than 10 characters!): + { "Edit", + "Editieren", + "Uredi", + }, + { "New", + "Neu", + "Novo", + }, + { "Delete", + "Löschen", + "Odstrani", + }, + { "Mark", + "Markieren", + "Oznaci", + }, + { "Record", + "Aufnehmen", + "Posnemi", + }, + { "Play", + "Wiedergabe", + "Predavajaj", + }, + { "Resume", + "Weiter", + "Nadaljuj", + }, + { "Summary", + "Inhalt", + "Vsebina", + }, + { "Switch", + "Umschalten", + "Preklopi", + }, + { "Now", + "Jetzt", + "Sedaj", + }, + { "Next", + "Nächste", + "Naslednji", + }, + { "Schedule", + "Programm", + "Urnik", + }, + // Confirmations: + { "Delete Channel?", + "Kanal löschen?", + "Odstrani kanal?", + }, + { "Delete Timer?", + "Timer löschen?", + "Odstani termin?", + }, + { "Delete Recording?", + "Aufzeichnung löschen?", + "Odstrani posnetek?", + }, + { "Stop Recording?", + "Aufzeichnung beenden?", + "Koncaj snemanje?", + }, + // Channel parameters: + { "Name", + "Name", + "Naziv", + }, + { "Frequency", + "Frequenz", + "Frekvenca", + }, + { "Polarization", + "Polarisation", + "Polarizacija", + }, + { "Diseqc", + "Diseqc", + "Diseqc", + }, + { "Srate", + "Srate", + "Srate", + }, + { "Vpid", + "Vpid", + "Vpid", + }, + { "Apid", + "Apid", + "Apid", + }, + { "CA", + "CA", + "CA", + }, + { "Pnr", + "Pnr", + "Pnr", + }, + // Timer parameters: + { "Active", + "Aktiv", + "Aktivno", + }, + { "Channel", + "Kanal", + "Kanal", + }, + { "Day", + "Tag", + "Dan", + }, + { "Start", + "Anfang", + "Zacetek", + }, + { "Stop", + "Ende", + "Konec", + }, + { "Priority", + "Priorität", + "Prioriteta", + }, + { "Lifetime", + "Lebensdauer", + "Veljavnost", + }, + { "File", + "Datei", + "Datoteka", + }, + // Error messages: + { "Channel is being used by a timer!", + "Kanal wird von einem Timer benutzt!", + "Urnik zaseda kanal!", + }, + { "Can't switch channel!", + "Kanal kann nicht umgeschaltet werden!", + "Ne morem preklopiti kanala!", + }, + { "Timer is recording!", + "Timer zeichnet gerade auf!", + "Snemanje po urniku!", + }, + { "Error while deleting recording!", + "Fehler beim Löschen der Aufzeichnung!", + "Napaka pri odstranjevanju posnetka!", + }, + { "*** Invalid Channel ***", + "*** Ungültiger Kanal ***", + "*** Neznan kanal ***", + }, + { "No free DVB device to record!", + "Keine freie DVB-Karte zum Aufnehmen!", + "Ni proste DVB naprave za snemanje!", + }, + { "Channel locked (recording)!", + "Kanal blockiert (zeichnet auf)!", + "Zaklenjen kanal (snemanje)!", + }, + // Setup parameters: + { "OSD-Language", + "OSD-Sprache", + "OSD-jezik", + }, + { "PrimaryDVB", + "Primäres Interface", + "Primarna naprava", + }, + { "ShowInfoOnChSwitch", + "Info zeigen", + "Pokazi naziv kanala", + }, + { "MenuScrollPage", + "Seitenweise scrollen", + "Drsni meni", + }, + { "MarkInstantRecord", + "Direktaufz. markieren", + "Oznaci direktno snemanje", + }, + { "LnbFrequLo", + "Untere LNB-Frequenz", + "Spodnja LNB-frek.", + }, + { "LnbFrequHi", + "Obere LNB-Frequenz", + "Zgornja LNB-frek.", + }, + { "SetSystemTime", + "Systemzeit stellen", + "Sistemski cas", + }, + { "MarginStart", + "Zeitpuffer bei Anfang", + "Premor pred zacetkom", + }, + { "MarginStop", + "Zeitpuffer bei Ende", + "Premor za koncem", + }, + { "EPGScanTimeout", + "Zeit bis EPG Scan", + "Cas do EPG pregleda", + }, + // The days of the week: + { "MTWTFSS", + "MDMDFSS", + "PTSCPSN", + }, + // Learning keys: + { "Learning Remote Control Keys", + "Fernbedienungs-Codes lernen", + "Ucim se kod upravljalca", + }, + { "Phase 1: Detecting RC code type", + "Phase 1: FB Code feststellen", + "Faza 1: Sprejemanje IR kode", + }, + { "Press any key on the RC unit", + "Eine Taste auf der FB drücken", + "Pritisnite tipko na upravljalcu", + }, + { "RC code detected!", + "FB Code erkannt!", + "IR koda sprejeta!", + }, + { "Do not press any key...", + "Keine Taste drücken...", + "Ne pritiskajte tipk...", + }, + { "Phase 2: Learning specific key codes", + "Phase 2: Einzelne Tastencodes lernen", + "Faza 2: Ucenje posebnih kod", + }, + { "Press key for '%s'", + "Taste für '%s' drücken", + "Pritisnite tipko za '%s'", + }, + { "Press 'Up' to confirm", + "'Auf' drücken zum Bestätigen", + "Pritisnite tipko 'Gor' za potrditev", + }, + { "Press 'Down' to continue", + "'Ab' drücken zum Weitermachen", + "Pritisnite tipko 'Dol' za nadaljevanje", + }, + { "(press 'Up' to go back)", + "('Auf' drücken um zurückzugehen)", + "(pritisnite 'Gor' za nazaj)", + }, + { "(press 'Down' to end key definition)", + "('Ab' drücken zum Beenden", + "(pritisnite 'Dol' za konec)", + }, + { "Phase 3: Saving key codes", + "Phase 3: Codes abspeichern", + "Faza 3: Shranjujem kodo", + }, + { "Press 'Up' to save, 'Down' to cancel", + "'Auf' speichert, 'Ab' bricht ab", + "'Gor' za potrditev, 'Dol' za prekinitev", + }, + // Key names: + { "Up", + "Auf", + "Gor", + }, + { "Down", + "Ab", + "Dol", + }, + { "Menu", + "Menü", + "Meni", + }, + { "Ok", + "Ok", + "Ok", + }, + { "Back", + "Zurück", + "Nazaj", + }, + { "Left", + "Links", + "Levo", + }, + { "Right", + "Rechts", + "Desno", + }, + { "Red", + "Rot", + "Rdeca", + }, + { "Green", + "Grün", + "Zelena", + }, + { "Yellow", + "Gelb", + "Rumena", + }, + { "Blue", + "Blau", + "Modra", + }, + // Miscellaneous: + { "yes", + "ja", + "da", + }, + { "no", + "nein", + "ne", + }, + { "Stop replaying", + "Wiedergabe beenden", + "Prekini ponavljanje", + }, + { "Stop recording ", // note the trailing blank! + "Aufzeichnung beenden ", + "Prekini shranjevanje ", + }, + { "Switching primary DVB...", + "Primäres Interface wird umgeschaltet...", + "Preklapljanje primarne naprave...", + }, + { "Up/Dn for new location - OK to move", + "Auf/Ab für neue Position - dann OK", + "Gor/Dol za novo poz. - Ok za premik", + }, + { NULL } + }; + +const char *tr(const char *s) +{ + if (Setup.OSDLanguage) { + for (const tPhrase *p = Phrases; **p; p++) { + if (strcmp(s, **p) == 0) { + const char *t = (*p)[Setup.OSDLanguage]; + if (t && *t) + return t; + } + } + esyslog(LOG_ERR, "no translation found for '%s' in language %d (%s)\n", s, Setup.OSDLanguage, Phrases[0][Setup.OSDLanguage]); + } + return s; +} + +const char * const * Languages(void) +{ + return &Phrases[0][0]; +} + diff --git a/i18n.h b/i18n.h new file mode 100644 index 0000000..c94241a --- /dev/null +++ b/i18n.h @@ -0,0 +1,19 @@ +/* + * i18n.h: Internationalization + * + * See the main source file 'vdr.c' for copyright information and + * how to reach the author. + * + * $Id: i18n.h 1.1 2000/11/11 09:27:25 kls Exp $ + */ + +#ifndef __I18N_H +#define __I18N_H + +extern const int NumLanguages; + +const char *tr(const char *s); + +const char * const * Languages(void); + +#endif //__I18N_H diff --git a/interface.c b/interface.c index 810270f..e5cc1d2 100644 --- a/interface.c +++ b/interface.c @@ -4,12 +4,13 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: interface.c 1.28 2000/11/01 15:27:52 kls Exp $ + * $Id: interface.c 1.32 2000/11/18 15:28:50 kls Exp $ */ #include "interface.h" #include #include +#include "i18n.h" cInterface *Interface = NULL; @@ -57,8 +58,7 @@ void cInterface::Close(void) unsigned int cInterface::GetCh(bool Wait, bool *Repeat, bool *Release) { - if (open) - cDvbApi::PrimaryDvbApi->Flush(); + Flush(); if (!rcIo->InputAvailable()) cFile::AnyFileReady(-1, Wait ? 1000 : 0); unsigned int Command; @@ -67,6 +67,7 @@ unsigned int cInterface::GetCh(bool Wait, bool *Repeat, bool *Release) eKeys cInterface::GetKey(bool Wait) { + Flush(); if (SVDRP) SVDRP->Process(); eKeys Key = keyFromWait; @@ -89,8 +90,7 @@ void cInterface::PutKey(eKeys Key) eKeys cInterface::Wait(int Seconds, bool KeepChar) { - if (open) - cDvbApi::PrimaryDvbApi->Flush(); + Flush(); eKeys Key = kNone; time_t timeout = time(NULL) + Seconds; for (;;) { @@ -136,6 +136,11 @@ void cInterface::SetCols(int *c) } } +eDvbFont cInterface::SetFont(eDvbFont Font) +{ + return cDvbApi::PrimaryDvbApi->SetFont(Font); +} + char *cInterface::WrapText(const char *Text, int Width, int *Height) { // Wraps the Text to make it fit into the area defined by the given Width @@ -238,11 +243,24 @@ void cInterface::WriteText(int x, int y, const char *s, eDvbColor FgColor, eDvbC void cInterface::Title(const char *s) { - int x = (Width() - strlen(s)) / 2; - if (x < 0) - x = 0; ClearEol(0, 0, clrCyan); - Write(x, 0, s, clrBlack, clrCyan); + const char *t = strchr(s, '\t'); + if (t) { + char buffer[Width() + 1]; + unsigned int n = t - s; + if (n >= sizeof(buffer)) + n = sizeof(buffer) - 1; + strn0cpy(buffer, s, n); + Write(1, 0, buffer, clrBlack, clrCyan); + t++; + Write(-(cDvbApi::PrimaryDvbApi->WidthInCells(t) + 1), 0, t, clrBlack, clrCyan); + } + else { + int x = (Width() - strlen(s)) / 2; + if (x < 0) + x = 0; + Write(x, 0, s, clrBlack, clrCyan); + } } void cInterface::Status(const char *s, eDvbColor FgColor, eDvbColor BgColor) @@ -308,10 +326,10 @@ void cInterface::QueryKeys(void) { Keys.Clear(); Clear(); - WriteText(1, 1, "Learning Remote Control Keys"); - WriteText(1, 3, "Phase 1: Detecting RC code type"); - WriteText(1, 5, "Press any key on the RC unit"); - cDvbApi::PrimaryDvbApi->Flush(); + WriteText(1, 1, tr("Learning Remote Control Keys")); + WriteText(1, 3, tr("Phase 1: Detecting RC code type")); + WriteText(1, 5, tr("Press any key on the RC unit")); + Flush(); #ifndef REMOTE_KBD unsigned char Code = 0; unsigned short Address; @@ -325,22 +343,22 @@ void cInterface::QueryKeys(void) if (rcIo->DetectCode(&Code, &Address)) { Keys.code = Code; Keys.address = Address; - WriteText(1, 5, "RC code detected!"); - WriteText(1, 6, "Do not press any key..."); - cDvbApi::PrimaryDvbApi->Flush(); + WriteText(1, 5, tr("RC code detected!")); + WriteText(1, 6, tr("Do not press any key...")); + Flush(); rcIo->Flush(3000); ClearEol(0, 5); ClearEol(0, 6); - cDvbApi::PrimaryDvbApi->Flush(); + Flush(); break; } #endif } - WriteText(1, 3, "Phase 2: Learning specific key codes"); + WriteText(1, 3, tr("Phase 2: Learning specific key codes")); tKey *k = Keys.keys; while (k->type != kNone) { char *Prompt; - asprintf(&Prompt, "Press key for '%s'", k->name); + asprintf(&Prompt, tr("Press key for '%s'"), tr(k->name)); WriteText(1, 5, Prompt); delete Prompt; for (;;) { @@ -352,8 +370,8 @@ void cInterface::QueryKeys(void) break; } case kDown: if (k > Keys.keys + 1) { - WriteText(1, 5, "Press 'Up' to confirm"); - WriteText(1, 6, "Press 'Down' to continue"); + WriteText(1, 5, tr("Press 'Up' to confirm")); + WriteText(1, 6, tr("Press 'Down' to continue")); ClearEol(0, 7); ClearEol(0, 8); for (;;) { @@ -378,11 +396,11 @@ void cInterface::QueryKeys(void) } } if (k > Keys.keys) - WriteText(1, 7, "(press 'Up' to go back)"); + WriteText(1, 7, tr("(press 'Up' to go back)")); else ClearEol(0, 7); if (k > Keys.keys + 1) - WriteText(1, 8, "(press 'Down' to end key definition)"); + WriteText(1, 8, tr("(press 'Down' to end key definition)")); else ClearEol(0, 8); } @@ -396,9 +414,9 @@ void cInterface::LearnKeys(void) Clear(); QueryKeys(); Clear(); - WriteText(1, 1, "Learning Remote Control Keys"); - WriteText(1, 3, "Phase 3: Saving key codes"); - WriteText(1, 5, "Press 'Up' to save, 'Down' to cancel"); + WriteText(1, 1, tr("Learning Remote Control Keys")); + WriteText(1, 3, tr("Phase 3: Saving key codes")); + WriteText(1, 5, tr("Press 'Up' to save, 'Down' to cancel")); for (;;) { eKeys key = GetKey(); if (key == kUp) { diff --git a/interface.h b/interface.h index 5dd8ee3..cd46fba 100644 --- a/interface.h +++ b/interface.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: interface.h 1.19 2000/11/01 15:27:23 kls Exp $ + * $Id: interface.h 1.20 2000/11/18 15:27:59 kls Exp $ */ #ifndef __INTERFACE_H @@ -43,6 +43,7 @@ public: void Fill(int x, int y, int w, int h, eDvbColor color = clrBackground); void Flush(void); void SetCols(int *c); + eDvbFont SetFont(eDvbFont Font); char *WrapText(const char *Text, int Width, int *Height); void Write(int x, int y, const char *s, eDvbColor FgColor = clrWhite, eDvbColor BgColor = clrBackground); void WriteText(int x, int y, const char *s, eDvbColor FgColor = clrWhite, eDvbColor BgColor = clrBackground); diff --git a/menu.c b/menu.c index c3611cc..3cf8328 100644 --- a/menu.c +++ b/menu.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.c 1.40 2000/11/01 16:14:48 kls Exp $ + * $Id: menu.c 1.52 2000/11/18 16:30:13 kls Exp $ */ #include "menu.h" @@ -14,6 +14,7 @@ #include #include "config.h" #include "eit.h" +#include "i18n.h" #define MENUTIMEOUT 120 // seconds @@ -131,7 +132,7 @@ cMenuEditBoolItem::cMenuEditBoolItem(const char *Name, int *Value) void cMenuEditBoolItem::Set(void) { char buf[16]; - snprintf(buf, sizeof(buf), "%s", *value ? "yes" : "no"); + snprintf(buf, sizeof(buf), "%s", *value ? tr("yes") : tr("no")); SetValue(buf); } @@ -493,6 +494,29 @@ eOSState cMenuEditStrItem::ProcessKey(eKeys Key) return osContinue; } +// --- cMenuEditStraItem ----------------------------------------------------- + +class cMenuEditStraItem : public cMenuEditIntItem { +private: + const char * const *strings; +protected: + virtual void Set(void); +public: + cMenuEditStraItem(const char *Name, int *Value, int NumStrings, const char * const *Strings); + }; + +cMenuEditStraItem::cMenuEditStraItem(const char *Name, int *Value, int NumStrings, const char * const *Strings) +:cMenuEditIntItem(Name, Value, 0, NumStrings - 1) +{ + strings = Strings; + Set(); +} + +void cMenuEditStraItem::Set(void) +{ + SetValue(strings[*value]); +} + // --- cMenuEditChannel ------------------------------------------------------ class cMenuEditChannel : public cOsdMenu { @@ -505,20 +529,20 @@ public: }; cMenuEditChannel::cMenuEditChannel(int Index) -:cOsdMenu("Edit Channel", 14) +:cOsdMenu(tr("Edit Channel"), 14) { channel = Channels.Get(Index); if (channel) { data = *channel; - Add(new cMenuEditStrItem( "Name", data.name, sizeof(data.name), FileNameChars)); - Add(new cMenuEditIntItem( "Frequency", &data.frequency, 10000, 13000)); //TODO exact limits??? - Add(new cMenuEditChrItem( "Polarization", &data.polarization, "hv")); - Add(new cMenuEditIntItem( "Diseqc", &data.diseqc, 0, 10)); //TODO exact limits??? - Add(new cMenuEditIntItem( "Srate", &data.srate, 22000, 27500)); //TODO exact limits - toggle??? - Add(new cMenuEditIntItem( "Vpid", &data.vpid, 0, 10000)); //TODO exact limits??? - Add(new cMenuEditIntItem( "Apid", &data.apid, 0, 10000)); //TODO exact limits??? - Add(new cMenuEditIntItem( "CA", &data.ca, 0, cDvbApi::NumDvbApis)); - Add(new cMenuEditIntItem( "Pnr", &data.pnr, 0)); + Add(new cMenuEditStrItem( tr("Name"), data.name, sizeof(data.name), FileNameChars)); + Add(new cMenuEditIntItem( tr("Frequency"), &data.frequency, 10000, 13000)); //TODO exact limits??? + Add(new cMenuEditChrItem( tr("Polarization"), &data.polarization, "hv")); + Add(new cMenuEditIntItem( tr("Diseqc"), &data.diseqc, 0, 10)); //TODO exact limits??? + Add(new cMenuEditIntItem( tr("Srate"), &data.srate, 22000, 27500)); //TODO exact limits - toggle??? + Add(new cMenuEditIntItem( tr("Vpid"), &data.vpid, 0, 10000)); //TODO exact limits??? + Add(new cMenuEditIntItem( tr("Apid"), &data.apid, 0, 10000)); //TODO exact limits??? + Add(new cMenuEditIntItem( tr("CA"), &data.ca, 0, cDvbApi::NumDvbApis)); + Add(new cMenuEditIntItem( tr("Pnr"), &data.pnr, 0)); } } @@ -589,18 +613,18 @@ public: }; cMenuChannels::cMenuChannels(void) -:cOsdMenu("Channels", 4) +:cOsdMenu(tr("Channels"), 4) { //TODO int i = 0; cChannel *channel; - int curr = ((channel = Channels.GetByNumber(CurrentChannel)) != NULL) ? channel->Index() : -1; + int curr = ((channel = Channels.GetByNumber(cDvbApi::CurrentChannel())) != NULL) ? channel->Index() : -1; while ((channel = Channels.Get(i)) != NULL) { Add(new cMenuChannelItem(i, channel), i == curr); i++; } - SetHelp("Edit", "New", "Delete", "Mark"); + SetHelp(tr("Edit"), tr("New"), tr("Delete"), tr("Mark")); } eOSState cMenuChannels::Switch(void) @@ -641,11 +665,11 @@ eOSState cMenuChannels::Del(void) // Check if there is a timer using this channel: for (cTimer *ti = Timers.First(); ti; ti = (cTimer *)ti->Next()) { if (ti->channel == DeletedChannel) { - Interface->Error("Channel is being used by a timer!"); + Interface->Error(tr("Channel is being used by a timer!")); return osContinue; } } - if (Interface->Confirm("Delete Channel?")) { + if (Interface->Confirm(tr("Delete Channel?"))) { // Move and renumber the channels: Channels.Del(channel); Channels.ReNumber(); @@ -733,8 +757,9 @@ private: char *text; int x, y, w, h, lines, offset; eDvbColor fgColor, bgColor; + eDvbFont font; public: - cMenuTextItem(const char *Text, int X, int Y, int W, int H = -1, eDvbColor FgColor = clrWhite, eDvbColor BgColor = clrBackground); + cMenuTextItem(const char *Text, int X, int Y, int W, int H = -1, eDvbColor FgColor = clrWhite, eDvbColor BgColor = clrBackground, eDvbFont Font = fontOsd); ~cMenuTextItem(); int Height(void) { return h; } void Clear(void); @@ -746,7 +771,7 @@ public: virtual eOSState ProcessKey(eKeys Key); }; -cMenuTextItem::cMenuTextItem(const char *Text, int X, int Y, int W, int H, eDvbColor FgColor, eDvbColor BgColor) +cMenuTextItem::cMenuTextItem(const char *Text, int X, int Y, int W, int H, eDvbColor FgColor, eDvbColor BgColor, eDvbFont Font) { x = X; y = Y; @@ -754,8 +779,11 @@ cMenuTextItem::cMenuTextItem(const char *Text, int X, int Y, int W, int H, eDvbC h = H; fgColor = FgColor; bgColor = BgColor; + font = Font; offset = 0; + eDvbFont oldFont = Interface->SetFont(font); text = Interface->WrapText(Text, w - 1, &lines); + Interface->SetFont(oldFont); if (h < 0) h = lines; } @@ -774,6 +802,7 @@ void cMenuTextItem::Display(int Offset, eDvbColor FgColor, eDvbColor BgColor) { int l = 0; char *t = text; + eDvbFont oldFont = Interface->SetFont(font); while (*t) { char *n = strchr(t, '\n'); if (l >= offset) { @@ -791,6 +820,7 @@ void cMenuTextItem::Display(int Offset, eDvbColor FgColor, eDvbColor BgColor) if (++l >= h + offset) break; } + Interface->SetFont(oldFont); // scroll indicators use inverted color scheme! if (CanScrollUp()) Interface->Write(x + w - 1, y, "^", bgColor, fgColor); if (CanScrollDown()) Interface->Write(x + w - 1, y + h - 1, "v", bgColor, fgColor); @@ -826,26 +856,30 @@ eOSState cMenuTextItem::ProcessKey(eKeys Key) return osContinue; } -// --- cMenuSummary ---------------------------------------------------------- +// --- cMenuText ------------------------------------------------------------- -class cMenuSummary : public cOsdMenu { +class cMenuText : public cOsdMenu { public: - cMenuSummary(const char *Text); + cMenuText(const char *Title, const char *Text, eDvbFont Font = fontOsd); virtual eOSState ProcessKey(eKeys Key); }; -cMenuSummary::cMenuSummary(const char *Text) -:cOsdMenu("Summary") +cMenuText::cMenuText(const char *Title, const char *Text, eDvbFont Font) +:cOsdMenu(Title) { - Add(new cMenuTextItem(Text, 1, 2, MenuColumns - 2, MAXOSDITEMS)); + Add(new cMenuTextItem(Text, 1, 2, MenuColumns - 2, MAXOSDITEMS, clrWhite, clrBackground, Font)); } -eOSState cMenuSummary::ProcessKey(eKeys Key) +eOSState cMenuText::ProcessKey(eKeys Key) { eOSState state = cOsdMenu::ProcessKey(Key); - if (state == osUnknown) - state = osContinue; + if (state == osUnknown) { + switch (Key) { + case kOk: return osBack; + default: state = osContinue; + } + } return state; } @@ -861,22 +895,22 @@ public: }; cMenuEditTimer::cMenuEditTimer(int Index, bool New) -:cOsdMenu("Edit Timer", 10) +:cOsdMenu(tr("Edit Timer"), 12) { timer = Timers.Get(Index); if (timer) { data = *timer; if (New) data.active = 1; - Add(new cMenuEditBoolItem("Active", &data.active)); - Add(new cMenuEditChanItem("Channel", &data.channel)); - Add(new cMenuEditDayItem( "Day", &data.day)); - Add(new cMenuEditTimeItem("Start", &data.start)); - Add(new cMenuEditTimeItem("Stop", &data.stop)); + Add(new cMenuEditBoolItem(tr("Active"), &data.active)); + Add(new cMenuEditChanItem(tr("Channel"), &data.channel)); + Add(new cMenuEditDayItem( tr("Day"), &data.day)); + Add(new cMenuEditTimeItem(tr("Start"), &data.start)); + Add(new cMenuEditTimeItem(tr("Stop"), &data.stop)); //TODO VPS??? - Add(new cMenuEditIntItem( "Priority", &data.priority, 0, 99)); - Add(new cMenuEditIntItem( "Lifetime", &data.lifetime, 0, 99)); - Add(new cMenuEditStrItem( "File", data.file, sizeof(data.file), FileNameChars)); + Add(new cMenuEditIntItem( tr("Priority"), &data.priority, 0, 99)); + Add(new cMenuEditIntItem( tr("Lifetime"), &data.lifetime, 0, 99)); + Add(new cMenuEditStrItem( tr("File"), data.file, sizeof(data.file), FileNameChars)); } } @@ -885,16 +919,21 @@ eOSState cMenuEditTimer::ProcessKey(eKeys Key) eOSState state = cOsdMenu::ProcessKey(Key); if (state == osUnknown) { - if (Key == kOk) { - if (!*data.file) - strcpy(data.file, Channels.GetChannelNameByNumber(data.channel)); - if (timer && memcmp(timer, &data, sizeof(data)) != 0) { - *timer = data; - Timers.Save(); - isyslog(LOG_INFO, "timer %d modified (%s)", timer->Index() + 1, timer->active ? "active" : "inactive"); - } - state = osBack; - } + switch (Key) { + case kOk: if (!*data.file) + strcpy(data.file, Channels.GetChannelNameByNumber(data.channel)); + if (timer && memcmp(timer, &data, sizeof(data)) != 0) { + *timer = data; + Timers.Save(); + isyslog(LOG_INFO, "timer %d modified (%s)", timer->Index() + 1, timer->active ? "active" : "inactive"); + } + return osBack; + case kRed: + case kGreen: + case kYellow: + case kBlue: return osContinue; + default: break; + } } return state; } @@ -948,7 +987,7 @@ public: }; cMenuTimers::cMenuTimers(void) -:cOsdMenu("Timer", 2, 4, 10, 6, 6) +:cOsdMenu(tr("Timers"), 2, 4, 10, 6, 6) { int i = 0; cTimer *timer; @@ -957,7 +996,7 @@ cMenuTimers::cMenuTimers(void) Add(new cMenuTimerItem(i, timer)); i++; } - SetHelp("Edit", "New", "Delete", "Mark"); + SetHelp(tr("Edit"), tr("New"), tr("Delete"), tr("Mark")); } eOSState cMenuTimers::Activate(bool On) @@ -1000,7 +1039,7 @@ eOSState cMenuTimers::Del(void) cTimer *ti = Timers.Get(Index); if (ti) { if (!ti->recording) { - if (Interface->Confirm("Delete Timer?")) { + if (Interface->Confirm(tr("Delete Timer?"))) { Timers.Del(Timers.Get(Index)); cOsdMenu::Del(Index); Timers.Save(); @@ -1009,7 +1048,7 @@ eOSState cMenuTimers::Del(void) } } else - Interface->Error("Timer is recording!"); + Interface->Error(tr("Timer is recording!")); } return osContinue; } @@ -1029,7 +1068,7 @@ eOSState cMenuTimers::Summary(void) return osContinue; cTimer *ti = Timers.Get(Current()); if (ti && ti->summary && *ti->summary) - return AddSubMenu(new cMenuSummary(ti->summary)); + return AddSubMenu(new cMenuText(tr("Summary"), ti->summary)); return Edit(); // convenience for people not using the Summary feature ;-) } @@ -1064,29 +1103,42 @@ public: }; cMenuEvent::cMenuEvent(const cEventInfo *EventInfo, bool CanSwitch) -:cOsdMenu("Event") +:cOsdMenu(tr("Event")) { eventInfo = EventInfo; if (eventInfo) { cChannel *channel = Channels.GetByServiceID(eventInfo->GetServiceID()); if (channel) { - const char *p; char *buffer; - asprintf(&buffer, "%-17.*s %.*s %s - %s", 17, channel->name, 5, eventInfo->GetDate(), eventInfo->GetTimeString(), eventInfo->GetEndTimeString()); + asprintf(&buffer, "%-17.*s\t%.*s %s - %s", 17, channel->name, 5, eventInfo->GetDate(), eventInfo->GetTimeString(), eventInfo->GetEndTimeString()); SetTitle(buffer, false); int Line = 2; cMenuTextItem *item; - if (!isempty(p = eventInfo->GetTitle())) { - Add(item = new cMenuTextItem(p, 1, Line, MenuColumns - 2, -1, clrCyan)); + const char *Title = eventInfo->GetTitle(); + const char *Subtitle = eventInfo->GetSubtitle(); + const char *ExtendedDescription = eventInfo->GetExtendedDescription(); + // Some channels send a 'Subtitle' that should actually be the 'ExtendedDescription' + // (their 'ExtendedDescription' is then empty). In order to handle this correctly + // we silently shift that text to where it belongs. + // The German TV station 'VOX' is notorious for this - why can't they do it correctly + // like all the others? Well, at least like those who actually send the full range + // of information (like, e.g., 'Sat.1'). Some stations (like 'RTL') don't even + // bother sending anything but the 'Title'... + if (isempty(ExtendedDescription) && !isempty(Subtitle) && strlen(Subtitle) > 2 * MenuColumns) { + ExtendedDescription = Subtitle; + Subtitle = NULL; + } + if (!isempty(Title)) { + Add(item = new cMenuTextItem(Title, 1, Line, MenuColumns - 2, -1, clrCyan)); Line += item->Height() + 1; } - if (!isempty(p = eventInfo->GetSubtitle())) { - Add(item = new cMenuTextItem(p, 1, Line, MenuColumns - 2, -1, clrYellow)); + if (!isempty(Subtitle)) { + Add(item = new cMenuTextItem(Subtitle, 1, Line, MenuColumns - 2, -1, clrYellow)); Line += item->Height() + 1; } - if (!isempty(p = eventInfo->GetExtendedDescription())) - Add(new cMenuTextItem(p, 1, Line, MenuColumns - 2, Height() - Line - 2, clrCyan), true); - SetHelp("Record", NULL, NULL, CanSwitch ? "Switch" : NULL); + if (!isempty(ExtendedDescription)) + Add(new cMenuTextItem(ExtendedDescription, 1, Line, MenuColumns - 2, Height() - Line - 2, clrCyan), true); + SetHelp(tr("Record"), NULL, NULL, CanSwitch ? tr("Switch") : NULL); } } } @@ -1097,6 +1149,8 @@ eOSState cMenuEvent::ProcessKey(eKeys Key) if (state == osUnknown) { switch (Key) { + case kGreen: + case kYellow: return osContinue; case kOk: return osBack; default: break; } @@ -1127,18 +1181,22 @@ class cMenuWhatsOn : public cOsdMenu { private: eOSState Record(void); eOSState Switch(void); + static const cEventInfo *scheduleEventInfo; public: cMenuWhatsOn(const cSchedules *Schedules, bool Now); + static const cEventInfo *ScheduleEventInfo(void); virtual eOSState ProcessKey(eKeys Key); }; +const cEventInfo *cMenuWhatsOn::scheduleEventInfo = NULL; + static int CompareEventChannel(const void *p1, const void *p2) { return (int)( (*(const cEventInfo **)p1)->GetChannelNumber() - (*(const cEventInfo **)p2)->GetChannelNumber()); } cMenuWhatsOn::cMenuWhatsOn(const cSchedules *Schedules, bool Now) -:cOsdMenu(Now ? "What's on now?" : "What's on next?", 4, 7, 6) +:cOsdMenu(Now ? tr("What's on now?") : tr("What's on next?"), 4, 7, 6) { const cSchedule *Schedule = Schedules->First(); const cEventInfo **pArray = NULL; @@ -1164,7 +1222,14 @@ cMenuWhatsOn::cMenuWhatsOn(const cSchedules *Schedules, bool Now) Add(new cMenuWhatsOnItem(pArray[a])); delete pArray; - SetHelp("Record", Now ? "Next" : "Now", "Schedule", "Switch"); + SetHelp(tr("Record"), Now ? tr("Next") : tr("Now"), tr("Schedule"), tr("Switch")); +} + +const cEventInfo *cMenuWhatsOn::ScheduleEventInfo(void) +{ + const cEventInfo *ei = scheduleEventInfo; + scheduleEventInfo = NULL; + return ei; } eOSState cMenuWhatsOn::Switch(void) @@ -1175,7 +1240,7 @@ eOSState cMenuWhatsOn::Switch(void) if (channel && channel->Switch()) return osEnd; } - Interface->Error("Can't switch channel!"); + Interface->Error(tr("Can't switch channel!")); return osContinue; } @@ -1184,9 +1249,16 @@ eOSState cMenuWhatsOn::Record(void) cMenuWhatsOnItem *item = (cMenuWhatsOnItem *)Get(Current()); if (item) { cTimer *timer = new cTimer(item->eventInfo); - Timers.Add(timer); - Timers.Save(); - isyslog(LOG_INFO, "timer %d added", timer->Index() + 1); + cTimer *t = Timers.GetTimer(timer); + if (!t) { + Timers.Add(timer); + Timers.Save(); + isyslog(LOG_INFO, "timer %d added", timer->Index() + 1); + } + else { + delete timer; + timer = t; + } return AddSubMenu(new cMenuEditTimer(timer->Index(), true)); } return osContinue; @@ -1199,7 +1271,12 @@ eOSState cMenuWhatsOn::ProcessKey(eKeys Key) if (state == osUnknown) { switch (Key) { case kRed: return Record(); - case kYellow: return osBack; + case kYellow: { + cMenuWhatsOnItem *mi = (cMenuWhatsOnItem *)Get(Current()); + if (mi) + scheduleEventInfo = mi->eventInfo; + } + return osBack; case kBlue: return Switch(); case kOk: if (Count()) return AddSubMenu(new cMenuEvent(((cMenuWhatsOnItem *)Get(Current()))->eventInfo, true)); @@ -1234,7 +1311,7 @@ private: const cSchedules *schedules; bool now, next; eOSState Record(void); - void PrepareSchedule(void); + void PrepareSchedule(cChannel *Channel); void PrepareWhatsOnNext(bool On); public: cMenuSchedule(void); @@ -1242,17 +1319,15 @@ public: }; cMenuSchedule::cMenuSchedule(void) -:cOsdMenu("Schedule", 6, 6) +:cOsdMenu("", 6, 6) { now = next = false; - cChannel *channel = Channels.GetByNumber(CurrentChannel); + cChannel *channel = Channels.GetByNumber(cDvbApi::CurrentChannel()); if (channel) { - char *buffer = NULL; - asprintf(&buffer, "Schedule - %s", channel->name); - SetTitle(buffer, false); + schedules = cDvbApi::PrimaryDvbApi->Schedules(&threadLock); + PrepareSchedule(channel); + SetHelp(tr("Record"), tr("Now"), tr("Next")); } - PrepareSchedule(); - SetHelp("Record", "Now", "Next"); } static int CompareEventTime(const void *p1, const void *p2) @@ -1260,11 +1335,14 @@ static int CompareEventTime(const void *p1, const void *p2) return (int)((*(cEventInfo **)p1)->GetTime() - (*(cEventInfo **)p2)->GetTime()); } -void cMenuSchedule::PrepareSchedule(void) +void cMenuSchedule::PrepareSchedule(cChannel *Channel) { - schedules = cDvbApi::PrimaryDvbApi->Schedules(&threadLock); + Clear(); + char *buffer = NULL; + asprintf(&buffer, tr("Schedule - %s"), Channel->name); + SetTitle(buffer, false); if (schedules) { - const cSchedule *Schedule = schedules->GetSchedule(); + const cSchedule *Schedule = Channel->pnr ? schedules->GetSchedule(Channel->pnr) : schedules->GetSchedule(); int num = Schedule->NumEvents(); const cEventInfo **pArray = (const cEventInfo **)malloc(num * sizeof(cEventInfo *)); if (pArray) { @@ -1290,9 +1368,16 @@ eOSState cMenuSchedule::Record(void) cMenuScheduleItem *item = (cMenuScheduleItem *)Get(Current()); if (item) { cTimer *timer = new cTimer(item->eventInfo); - Timers.Add(timer); - Timers.Save(); - isyslog(LOG_INFO, "timer %d added", timer->Index() + 1); + cTimer *t = Timers.GetTimer(timer); + if (!t) { + Timers.Add(timer); + Timers.Save(); + isyslog(LOG_INFO, "timer %d added", timer->Index() + 1); + } + else { + delete timer; + timer = t; + } return AddSubMenu(new cMenuEditTimer(timer->Index(), true)); } return osContinue; @@ -1319,8 +1404,17 @@ eOSState cMenuSchedule::ProcessKey(eKeys Key) default: break; } } - else if (!HasSubMenu()) + else if (!HasSubMenu()) { now = next = false; + const cEventInfo *ei = cMenuWhatsOn::ScheduleEventInfo(); + if (ei) { + cChannel *channel = Channels.GetByServiceID(ei->GetServiceID()); + if (channel) { + PrepareSchedule(channel); + Display(); + } + } + } return state; } @@ -1347,7 +1441,7 @@ void cMenuRecordingItem::Set(void) // --- cMenuRecordings ------------------------------------------------------- cMenuRecordings::cMenuRecordings(void) -:cOsdMenu("Recordings", 6, 6) +:cOsdMenu(tr("Recordings"), 6, 6) { if (Recordings.Load()) { const char *lastReplayed = cReplayControl::LastReplayed(); @@ -1357,7 +1451,7 @@ cMenuRecordings::cMenuRecordings(void) recording = Recordings.Next(recording); } } - SetHelp("Play", NULL, "Delete", "Summary"); + SetHelp(tr("Play"), NULL, tr("Delete"), tr("Summary")); Display(); } @@ -1377,18 +1471,18 @@ eOSState cMenuRecordings::Del(void) if (ri) { //XXX what if this recording's file is currently in use??? //XXX if (!ti->recording) { - if (Interface->Confirm("Delete Recording?")) { + if (Interface->Confirm(tr("Delete Recording?"))) { if (ri->recording->Delete()) { cReplayControl::ClearLastReplayed(ri->recording->FileName()); cOsdMenu::Del(Current()); Display(); } else - Interface->Error("Error while deleting recording!"); + Interface->Error(tr("Error while deleting recording!")); } //XXX } //XXX else -//XXX Interface->Error("Timer is recording!"); +//XXX Interface->Error(tr("Timer is recording!")); } return osContinue; } @@ -1399,7 +1493,7 @@ eOSState cMenuRecordings::Summary(void) return osContinue; cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current()); if (ri && ri->recording->Summary() && *ri->recording->Summary()) - return AddSubMenu(new cMenuSummary(ri->recording->Summary())); + return AddSubMenu(new cMenuText(tr("Summary"), ri->recording->Summary())); return osContinue; } @@ -1425,24 +1519,36 @@ eOSState cMenuRecordings::ProcessKey(eKeys Key) class cMenuSetup : public cOsdMenu { private: cSetup data; + int osdLanguage; + void Set(void); public: cMenuSetup(void); virtual eOSState ProcessKey(eKeys Key); }; cMenuSetup::cMenuSetup(void) -:cOsdMenu("Setup", 20) +:cOsdMenu("", 25) { data = Setup; - Add(new cMenuEditIntItem( "PrimaryDVB", &data.PrimaryDVB, 1, cDvbApi::NumDvbApis)); - Add(new cMenuEditBoolItem("ShowInfoOnChSwitch", &data.ShowInfoOnChSwitch)); - Add(new cMenuEditBoolItem("MenuScrollPage", &data.MenuScrollPage)); - Add(new cMenuEditBoolItem("MarkInstantRecord", &data.MarkInstantRecord)); - Add(new cMenuEditIntItem( "LnbFrequLo", &data.LnbFrequLo)); - Add(new cMenuEditIntItem( "LnbFrequHi", &data.LnbFrequHi)); - Add(new cMenuEditIntItem( "SetSystemTime", &data.SetSystemTime)); - Add(new cMenuEditIntItem( "MarginStart", &data.MarginStart)); - Add(new cMenuEditIntItem( "MarginStop", &data.MarginStop)); + osdLanguage = Setup.OSDLanguage; + Set(); +} + +void cMenuSetup::Set(void) +{ + Clear(); + SetTitle(tr("Setup")); + Add(new cMenuEditStraItem(tr("OSD-Language"), &data.OSDLanguage, NumLanguages, Languages())); + Add(new cMenuEditIntItem( tr("PrimaryDVB"), &data.PrimaryDVB, 1, cDvbApi::NumDvbApis)); + Add(new cMenuEditBoolItem(tr("ShowInfoOnChSwitch"), &data.ShowInfoOnChSwitch)); + Add(new cMenuEditBoolItem(tr("MenuScrollPage"), &data.MenuScrollPage)); + Add(new cMenuEditBoolItem(tr("MarkInstantRecord"), &data.MarkInstantRecord)); + Add(new cMenuEditIntItem( tr("LnbFrequLo"), &data.LnbFrequLo)); + Add(new cMenuEditIntItem( tr("LnbFrequHi"), &data.LnbFrequHi)); + Add(new cMenuEditBoolItem(tr("SetSystemTime"), &data.SetSystemTime)); + Add(new cMenuEditIntItem( tr("MarginStart"), &data.MarginStart)); + Add(new cMenuEditIntItem( tr("MarginStop"), &data.MarginStop)); + Add(new cMenuEditIntItem( tr("EPGScanTimeout"), &data.EPGScanTimeout)); } eOSState cMenuSetup::ProcessKey(eKeys Key) @@ -1451,7 +1557,7 @@ eOSState cMenuSetup::ProcessKey(eKeys Key) if (state == osUnknown) { switch (Key) { - case kOk: state = (Setup.PrimaryDVB != data.PrimaryDVB) ? osSwitchDvb : osBack; + case kOk: state = (Setup.PrimaryDVB != data.PrimaryDVB) ? osSwitchDvb : osEnd; cDvbApi::PrimaryDvbApi->SetUseTSTime(data.SetSystemTime); Setup = data; Setup.Save(); @@ -1459,23 +1565,79 @@ eOSState cMenuSetup::ProcessKey(eKeys Key) default: break; } } + if (data.OSDLanguage != osdLanguage) { + int OriginalOSDLanguage = Setup.OSDLanguage; + Setup.OSDLanguage = data.OSDLanguage; + Set(); + Display(); + osdLanguage = data.OSDLanguage; + Setup.OSDLanguage = OriginalOSDLanguage; + } + return state; +} + +// --- cMenuCommands --------------------------------------------------------- + +class cMenuCommands : public cOsdMenu { +private: + eOSState Execute(void); +public: + cMenuCommands(void); + virtual eOSState ProcessKey(eKeys Key); + }; + +cMenuCommands::cMenuCommands(void) +:cOsdMenu(tr("Commands")) +{ + int i = 0; + cCommand *command; + + while ((command = Commands.Get(i)) != NULL) { + Add(new cOsdItem(command->Title())); + i++; + } +} + +eOSState cMenuCommands::Execute(void) +{ + cCommand *command = Commands.Get(Current()); + if (command) { + const char *Result = command->Execute(); + if (Result) + return AddSubMenu(new cMenuText(command->Title(), Result, fontFix)); + } + return osContinue; +} + +eOSState cMenuCommands::ProcessKey(eKeys Key) +{ + eOSState state = cOsdMenu::ProcessKey(Key); + + if (state == osUnknown) { + switch (Key) { + case kOk: return Execute(); + default: break; + } + } return state; } // --- cMenuMain ------------------------------------------------------------- -#define STOP_RECORDING "Stop recording " +#define STOP_RECORDING tr("Stop recording ") cMenuMain::cMenuMain(bool Replaying) -:cOsdMenu("Main") -{ - Add(new cOsdItem("Schedule", osSchedule)); - Add(new cOsdItem("Channels", osChannels)); - Add(new cOsdItem("Timer", osTimer)); - Add(new cOsdItem("Recordings", osRecordings)); - Add(new cOsdItem("Setup", osSetup)); +:cOsdMenu(tr("Main")) +{ + Add(new cOsdItem(tr("Schedule"), osSchedule)); + Add(new cOsdItem(tr("Channels"), osChannels)); + Add(new cOsdItem(tr("Timers"), osTimers)); + Add(new cOsdItem(tr("Recordings"), osRecordings)); + Add(new cOsdItem(tr("Setup"), osSetup)); + if (Commands.Count()) + Add(new cOsdItem(tr("Commands"), osCommands)); if (Replaying) - Add(new cOsdItem("Stop replaying", osStopReplay)); + Add(new cOsdItem(tr("Stop replaying"), osStopReplay)); const char *s = NULL; while ((s = cRecordControls::GetInstantId(s)) != NULL) { char *buffer = NULL; @@ -1483,7 +1645,7 @@ cMenuMain::cMenuMain(bool Replaying) Add(new cOsdItem(buffer, osStopRecord)); delete buffer; } - SetHelp("Record", NULL, NULL, cReplayControl::LastReplayed() ? "Resume" : NULL); + SetHelp(tr("Record"), NULL, NULL, cReplayControl::LastReplayed() ? tr("Resume") : NULL); Display(); lastActivity = time(NULL); } @@ -1495,10 +1657,11 @@ eOSState cMenuMain::ProcessKey(eKeys Key) switch (state) { case osSchedule: return AddSubMenu(new cMenuSchedule); case osChannels: return AddSubMenu(new cMenuChannels); - case osTimer: return AddSubMenu(new cMenuTimers); + case osTimers: return AddSubMenu(new cMenuTimers); case osRecordings: return AddSubMenu(new cMenuRecordings); case osSetup: return AddSubMenu(new cMenuSetup); - case osStopRecord: if (Interface->Confirm("Stop Recording?")) { + case osCommands: return AddSubMenu(new cMenuCommands); + case osStopRecord: if (Interface->Confirm(tr("Stop Recording?"))) { cOsdItem *item = Get(Current()); if (item) { cRecordControls::Stop(item->Text() + strlen(STOP_RECORDING)); @@ -1547,7 +1710,7 @@ cDisplayChannel::cDisplayChannel(int Number, bool Switched, bool Group) cDisplayChannel::cDisplayChannel(eKeys FirstKey) :cOsdBase(true) { - oldNumber = CurrentChannel; + oldNumber = cDvbApi::CurrentChannel(); number = 0; lastTime = time_ms(); Interface->Open(MenuColumns, 5); @@ -1571,7 +1734,7 @@ void cDisplayChannel::DisplayChannel(const cChannel *Channel) if (Channel && Channel->number) snprintf(buffer, BufSize, "%d %s", Channel->number, Channel->name); else - snprintf(buffer, BufSize, "%s", Channel ? Channel->name : "*** Invalid Channel ***"); + snprintf(buffer, BufSize, "%s", Channel ? Channel->name : tr("*** Invalid Channel ***")); Interface->Fill(0, 0, MenuColumns, 1, clrBackground); Interface->Write(0, 0, buffer); time_t t = time(NULL); @@ -1697,12 +1860,12 @@ cRecordControl::cRecordControl(cDvbApi *DvbApi, cTimer *Timer) timer = new cTimer(true); Timers.Add(timer); Timers.Save(); - asprintf(&instantId, cDvbApi::NumDvbApis > 1 ? "%s on %d" : "%s", Channels.GetChannelNameByNumber(timer->channel), dvbApi->Index() + 1); + asprintf(&instantId, cDvbApi::NumDvbApis > 1 ? "%s - %d" : "%s", Channels.GetChannelNameByNumber(timer->channel), dvbApi->Index() + 1); } timer->SetRecording(true); Channels.SwitchTo(timer->channel, dvbApi); cRecording Recording(timer); - if (dvbApi->StartRecord(Recording.FileName())) + if (dvbApi->StartRecord(Recording.FileName(), Channels.GetByNumber(timer->channel)->ca, timer->priority)) Recording.WriteSummary(); Interface->DisplayRecording(dvbApi->Index(), true); } @@ -1744,12 +1907,13 @@ cRecordControl *cRecordControls::RecordControls[MAXDVBAPI] = { NULL }; bool cRecordControls::Start(cTimer *Timer) { - int ch = Timer ? Timer->channel : CurrentChannel; + int ch = Timer ? Timer->channel : cDvbApi::CurrentChannel(); cChannel *channel = Channels.GetByNumber(ch); if (channel) { - cDvbApi *dvbApi = cDvbApi::GetDvbApi(channel->ca); + cDvbApi *dvbApi = cDvbApi::GetDvbApi(channel->ca, Timer ? Timer->priority : DEFAULTPRIORITY); if (dvbApi) { + Stop(dvbApi); for (int i = 0; i < MAXDVBAPI; i++) { if (!RecordControls[i]) { RecordControls[i] = new cRecordControl(dvbApi, Timer); @@ -1776,6 +1940,18 @@ void cRecordControls::Stop(const char *InstantId) } } +void cRecordControls::Stop(cDvbApi *DvbApi) +{ + for (int i = 0; i < MAXDVBAPI; i++) { + if (RecordControls[i]) { + if (RecordControls[i]->Uses(DvbApi)) { + isyslog(LOG_INFO, "stopping recording on DVB device %d due to higher priority", DvbApi->Index() + 1); + RecordControls[i]->Stop(); + } + } + } +} + const char *cRecordControls::GetInstantId(const char *LastInstantId) { for (int i = 0; i < MAXDVBAPI; i++) { diff --git a/menu.h b/menu.h index d979069..8153f5d 100644 --- a/menu.h +++ b/menu.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: menu.h 1.13 2000/11/01 14:03:09 kls Exp $ + * $Id: menu.h 1.14 2000/11/12 12:33:00 kls Exp $ */ #ifndef _MENU_H @@ -59,6 +59,7 @@ public: cRecordControl(cDvbApi *DvbApi, cTimer *Timer = NULL); virtual ~cRecordControl(); bool Process(void); + bool Uses(cDvbApi *DvbApi) { return DvbApi == dvbApi; } void Stop(bool KeepInstant = false); bool IsInstant(void) { return instantId; } const char *InstantId(void) { return instantId; } @@ -70,6 +71,7 @@ private: public: static bool Start(cTimer *Timer = NULL); static void Stop(const char *InstantId); + static void Stop(cDvbApi *DvbApi); static const char *GetInstantId(const char *LastInstantId); static void Process(void); }; diff --git a/osd.c b/osd.c index f345827..bc9c948 100644 --- a/osd.c +++ b/osd.c @@ -4,12 +4,13 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: osd.c 1.11 2000/11/01 11:21:51 kls Exp $ + * $Id: osd.c 1.13 2000/11/12 15:29:25 kls Exp $ */ #include "osd.h" #include #include +#include "i18n.h" // --- cOsdItem -------------------------------------------------------------- @@ -188,6 +189,13 @@ void cOsdMenu::DisplayCurrent(bool Current) item->Display(current - first, Current ? clrBlack : clrWhite, Current ? clrCyan : clrBackground); } +void cOsdMenu::Clear(void) +{ + first = 0; + current = marked = -1; + cList::Clear(); +} + bool cOsdMenu::SpecialItem(int idx) { cOsdItem *item = Get(idx); @@ -248,7 +256,7 @@ void cOsdMenu::Mark(void) { if (Count() && marked < 0) { marked = current; - SetStatus("Up/Dn for new location - OK to move"); + SetStatus(tr("Up/Dn for new location - OK to move")); } } diff --git a/osd.h b/osd.h index 473e87d..0d8085d 100644 --- a/osd.h +++ b/osd.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: osd.h 1.14 2000/11/01 14:29:07 kls Exp $ + * $Id: osd.h 1.17 2000/11/12 15:27:34 kls Exp $ */ #ifndef __OSD_H @@ -21,9 +21,10 @@ enum eOSState { osUnknown, osContinue, osSchedule, osChannels, - osTimer, + osTimers, osRecordings, osSetup, + osCommands, osRecord, osReplay, osStopRecord, @@ -77,6 +78,7 @@ private: const char *status; protected: bool visible; + virtual void Clear(void); bool SpecialItem(int idx); void RefreshCurrent(void); void DisplayCurrent(bool Current); diff --git a/recording.c b/recording.c index 3ddf8d3..f45be96 100644 --- a/recording.c +++ b/recording.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: recording.c 1.20 2000/11/01 16:00:36 kls Exp $ + * $Id: recording.c 1.21 2000/11/18 16:22:29 kls Exp $ */ #define _GNU_SOURCE @@ -32,6 +32,7 @@ #define MINDISKSPACE 1024 // MB #define DISKCHECKDELTA 300 // seconds between checks for free disk space +#define REMOVELATENCY 10 // seconds to wait until next check after removing a file void AssertFreeDiskSpace(void) { @@ -51,8 +52,10 @@ void AssertFreeDiskSpace(void) r0 = r; r = Recordings.Next(r); } - if (r0 && r0->Remove()) + if (r0 && r0->Remove()) { + LastFreeDiskCheck += REMOVELATENCY; return; + } } // No "deleted" files to remove, so let's see if we can delete a recording: if (Recordings.Load(false)) { diff --git a/remote.c b/remote.c index f60d768..349a445 100644 --- a/remote.c +++ b/remote.c @@ -6,7 +6,7 @@ * * Ported to LIRC by Carsten Koch 2000-06-16. * - * $Id: remote.c 1.18 2000/10/08 16:49:41 kls Exp $ + * $Id: remote.c 1.19 2000/11/11 11:22:22 kls Exp $ */ #include "remote.h" @@ -73,7 +73,7 @@ bool cRcIoKBD::GetCommand(unsigned int *Command, bool *Repeat, bool *Release) { if (Command) { *Command = getch(); - return *Command > 0; + return int(*Command) > 0; } return false; } diff --git a/svdrp.c b/svdrp.c index cf91caf..66ae8e9 100644 --- a/svdrp.c +++ b/svdrp.c @@ -10,7 +10,7 @@ * and interact with the Video Disk Recorder - or write a full featured * graphical interface that sits on top of an SVDRP connection. * - * $Id: svdrp.c 1.11 2000/10/08 12:21:14 kls Exp $ + * $Id: svdrp.c 1.12 2000/11/05 13:44:42 kls Exp $ */ #define _GNU_SOURCE @@ -302,13 +302,13 @@ void cSVDRP::CmdCHAN(const char *Option) n = o; } else if (strcmp(Option, "-") == 0) { - n = CurrentChannel; - if (CurrentChannel > 1) + n = cDvbApi::CurrentChannel(); + if (n > 1) n--; } else if (strcmp(Option, "+") == 0) { - n = CurrentChannel; - if (CurrentChannel < Channels.MaxNumber()) + n = cDvbApi::CurrentChannel(); + if (n < Channels.MaxNumber()) n++; } else { @@ -342,11 +342,11 @@ void cSVDRP::CmdCHAN(const char *Option) return; } } - cChannel *channel = Channels.GetByNumber(CurrentChannel); + cChannel *channel = Channels.GetByNumber(cDvbApi::CurrentChannel()); if (channel) - Reply(250, "%d %s", CurrentChannel, channel->name); + Reply(250, "%d %s", channel->number, channel->name); else - Reply(550, "Unable to find channel \"%d\"", CurrentChannel); + Reply(550, "Unable to find channel \"%d\"", cDvbApi::CurrentChannel()); } void cSVDRP::CmdDELC(const char *Option) diff --git a/thread.c b/thread.c index b124581..67b5ab9 100644 --- a/thread.c +++ b/thread.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: thread.c 1.3 2000/10/28 15:26:02 kls Exp $ + * $Id: thread.c 1.4 2000/11/14 18:38:25 kls Exp $ */ #include "thread.h" @@ -24,7 +24,6 @@ cThread::cThread(void) signal(SIGIO, SignalHandler); signalHandlerInstalled = true; } - pthread_mutex_init(&mutex, NULL); running = false; parentPid = lockingPid = 0; locked = 0; @@ -32,7 +31,6 @@ cThread::cThread(void) cThread::~cThread() { - pthread_mutex_destroy(&mutex); } void cThread::SignalHandler(int signum) @@ -64,7 +62,7 @@ void cThread::Stop(void) bool cThread::Lock(void) { if (!lockingPid || lockingPid != getpid()) { - pthread_mutex_lock(&mutex); + Mutex.Lock(); lockingPid = getpid(); } locked++; @@ -75,7 +73,7 @@ void cThread::Unlock(void) { if (!--locked) { lockingPid = 0; - pthread_mutex_unlock(&mutex); + Mutex.Unlock(); } } diff --git a/thread.h b/thread.h index b47f6d7..c85c51e 100644 --- a/thread.h +++ b/thread.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: thread.h 1.2 2000/10/28 15:08:09 kls Exp $ + * $Id: thread.h 1.3 2000/11/14 18:38:11 kls Exp $ */ #ifndef __THREAD_H @@ -13,11 +13,21 @@ #include #include +class cMutex { +private: + pthread_mutex_t mutex; +public: + cMutex(void) { pthread_mutex_init(&mutex, NULL); } + ~cMutex() { pthread_mutex_destroy(&mutex); } + void Lock(void) { pthread_mutex_lock(&mutex); } + void Unlock(void) { pthread_mutex_unlock(&mutex); } + }; + class cThread { friend class cThreadLock; private: pthread_t thread; - pthread_mutex_t mutex; + cMutex Mutex; pid_t parentPid, lockingPid; int locked; bool running; diff --git a/timers.conf b/timers.conf index 8f6bcf2..05946a5 100644 --- a/timers.conf +++ b/timers.conf @@ -1,15 +1,14 @@ -1:15:M------:2128:2205:99:7:Neues: +1:15:M------:2128:2205:80:7:Neues: 1:3:-T-----:2013:2125:99:99:SevenDays: 1:10:-T-----:2058:2202:99:10:Quarks: -1:26:-T-----:2250:0005:99:99:UFO: -1:14:--W----:1920:2020:99:99:Rettungsflieger: +1:25:-T-----:2305:0020:99:99:UFO: +1:14:--W----:1920:2020:70:99:Rettungsflieger: 0:2:--W----:2110:2325:99:99:BulleVonToelz: -1:3:---T---:2210:2315:99:10:IngoAppelt: +1:3:---T---:2210:2315:50:20:IngoAppelt: 1:2:----F--:2013:2125:99:99:Farscape: -1:1:----F--:2215:2325:99:99:7Tage7Koepfe: -1:11:-----S-:2058:2135:99:99:Computer: -1:2:-----S-:2250:0005:99:30:Wochenshow: +1:1:----F--:2215:2325:50:20:7Tage7Koepfe: +0:11:-----S-:2058:2135:99:99:Computer: +0:2:-----S-:2220:2340:99:30:Wochenshow: 1:11:------S:2013:2035:99:10:Centauri: 1:15:MTWTF--:1828:1901:10:5:nano: 1:1:MTWTF--:1553:1710:99:99:Hammerman: -1:3:3:0220:0350:99:99:Seven Days - Das Tor zur Zeit:Die Rache des Alien||Als das Zeitsprung-Team die Leiche eines bei Roswell gefundenen Aliens obduziert, entdecken sie einen Chip in seiner Wirbelsäule. Dr. Ballard, der ähnliche Rückenprobleme wie der Alien hat, lässt sich den Chip einsetzen. Tatsächlich regeneriert Ballard vollständig. Doch dann ändert sich sein Verhalten: Er wird dem Alien immer ähnlicher. Schließlich gelingt es ihm, mit einer Superwaffe Millionen Menschen zu töten - einschließlich des Zeitsprung-Teams. Nur Parker überlebt. diff --git a/tools.c b/tools.c index 4acea0b..6d86f16 100644 --- a/tools.c +++ b/tools.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: tools.c 1.22 2000/10/29 11:21:55 kls Exp $ + * $Id: tools.c 1.23 2000/11/11 15:17:12 kls Exp $ */ #define _GNU_SOURCE @@ -92,6 +92,18 @@ char *skipspace(const char *s) return (char *)s; } +char *stripspace(char *s) +{ + if (s && *s) { + for (char *p = s + strlen(s) - 1; p >= s; p--) { + if (!isspace(*p)) + break; + *p = 0; + } + } + return s; +} + bool isempty(const char *s) { return !(s && *skipspace(s)); diff --git a/tools.h b/tools.h index b5bdd27..f83e7da 100644 --- a/tools.h +++ b/tools.h @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: tools.h 1.18 2000/10/29 11:19:20 kls Exp $ + * $Id: tools.h 1.20 2000/11/12 15:27:06 kls Exp $ */ #ifndef __TOOLS_H @@ -41,6 +41,7 @@ char *readline(FILE *f); char *strn0cpy(char *dest, const char *src, size_t n); char *strreplace(char *s, char c1, char c2); char *skipspace(const char *s); +char *stripspace(char *s); bool isempty(const char *s); int time_ms(void); void delay_ms(int ms); @@ -95,7 +96,7 @@ public: void Del(cListObject *Object); virtual void Move(int From, int To); void Move(cListObject *From, cListObject *To); - void Clear(void); + virtual void Clear(void); cListObject *Get(int Index) const; int Count(void) const; }; diff --git a/vdr.c b/vdr.c index b1321ae..8a84200 100644 --- a/vdr.c +++ b/vdr.c @@ -22,7 +22,7 @@ * * The project's page is at http://www.cadsoft.de/people/kls/vdr * - * $Id: vdr.c 1.41 2000/11/01 14:31:32 kls Exp $ + * $Id: vdr.c 1.46 2000/11/18 13:46:56 kls Exp $ */ #include @@ -31,6 +31,7 @@ #include #include "config.h" #include "dvbapi.h" +#include "i18n.h" #include "interface.h" #include "menu.h" #include "recording.h" @@ -156,11 +157,6 @@ int main(int argc, char *argv[]) } isyslog(LOG_INFO, "VDR version %s started", VDRVERSION); - // DVB interfaces: - - if (!cDvbApi::Init()) - abort(); - // Configuration data: if (!ConfigDirectory) @@ -169,15 +165,23 @@ int main(int argc, char *argv[]) Setup.Load(AddDirectory(ConfigDirectory, "setup.conf")); Channels.Load(AddDirectory(ConfigDirectory, "channels.conf")); Timers.Load(AddDirectory(ConfigDirectory, "timers.conf")); + Commands.Load(AddDirectory(ConfigDirectory, "commands.conf")); #ifdef REMOTE_LIRC Keys.SetDummyValues(); #else bool KeysLoaded = Keys.Load(AddDirectory(ConfigDirectory, KEYS_CONF)); #endif + // DVB interfaces: + + if (!cDvbApi::Init()) + abort(); + cDvbApi::SetPrimaryDvbApi(Setup.PrimaryDVB); - Channels.SwitchTo(CurrentChannel); + Channels.SwitchTo(1); + + cEITScanner EITScanner; // User interface: @@ -199,15 +203,15 @@ int main(int argc, char *argv[]) cOsdBase *Menu = NULL; cReplayControl *ReplayControl = NULL; int LastChannel = -1; - int PreviousChannel = CurrentChannel; + int PreviousChannel = cDvbApi::CurrentChannel(); while (!Interrupted) { // Channel display: - if (CurrentChannel != LastChannel) { + if (!EITScanner.Active() && cDvbApi::CurrentChannel() != LastChannel) { if (!Menu) - Menu = new cDisplayChannel(CurrentChannel, LastChannel > 0); + Menu = new cDisplayChannel(cDvbApi::CurrentChannel(), LastChannel > 0); PreviousChannel = LastChannel; - LastChannel = CurrentChannel; + LastChannel = cDvbApi::CurrentChannel(); } // Timers and Recordings: if (!Menu) { @@ -222,6 +226,8 @@ int main(int argc, char *argv[]) // User Input: cOsdBase **Interact = Menu ? &Menu : (cOsdBase **)&ReplayControl; eKeys key = Interface->GetKey(!*Interact || !(*Interact)->NeedsFastResponse()); + if (NORMALKEY(key) != kNone) + EITScanner.Activity(); if (*Interact) { switch ((*Interact)->ProcessKey(key)) { case osMenu: DELETENULL(Menu); @@ -229,7 +235,7 @@ int main(int argc, char *argv[]) break; case osRecord: DELETENULL(Menu); if (!cRecordControls::Start()) - Interface->Error("No free DVB device to record!"); + Interface->Error(tr("No free DVB device to record!")); break; case osRecordings: DELETENULL(Menu); @@ -246,7 +252,7 @@ int main(int argc, char *argv[]) break; case osSwitchDvb: DELETENULL(*Interact); - Interface->Info("Switching primary DVB..."); + Interface->Info(tr("Switching primary DVB...")); cDvbApi::SetPrimaryDvbApi(Setup.PrimaryDVB); break; case osBack: @@ -259,7 +265,7 @@ int main(int argc, char *argv[]) switch (key) { // Toggle channels: case k0: - if (PreviousChannel != CurrentChannel) + if (PreviousChannel != cDvbApi::CurrentChannel()) Channels.SwitchTo(PreviousChannel); break; // Direct Channel Select: @@ -287,7 +293,7 @@ int main(int argc, char *argv[]) case kUp: case kDown|k_Repeat: case kDown: if (!Interface->Recording()) { - int n = CurrentChannel + (NORMALKEY(key) == kUp ? 1 : -1); + int n = cDvbApi::CurrentChannel() + (NORMALKEY(key) == kUp ? 1 : -1); cChannel *channel = Channels.GetByNumber(n); if (channel) channel->Switch(); @@ -300,6 +306,8 @@ int main(int argc, char *argv[]) default: break; } } + if (!Menu) + EITScanner.Process(); } isyslog(LOG_INFO, "caught signal %d", Interrupted); delete Menu; -- cgit v1.2.3