diff options
-rw-r--r-- | BUGS | 4 | ||||
-rw-r--r-- | CONTRIBUTORS | 3 | ||||
-rw-r--r-- | FORMATS | 31 | ||||
-rw-r--r-- | HISTORY | 46 | ||||
-rw-r--r-- | MANUAL | 43 | ||||
-rw-r--r-- | Makefile | 28 | ||||
-rw-r--r-- | README | 11 | ||||
-rw-r--r-- | channels.conf | 66 | ||||
-rw-r--r-- | config.c | 97 | ||||
-rw-r--r-- | config.h | 30 | ||||
-rw-r--r-- | dvbapi.c | 210 | ||||
-rw-r--r-- | dvbapi.h | 68 | ||||
-rw-r--r-- | dvbosd.c | 19 | ||||
-rw-r--r-- | dvbosd.h | 6 | ||||
-rw-r--r-- | eit.c | 40 | ||||
-rw-r--r-- | eit.h | 7 | ||||
-rw-r--r-- | font.c | 16 | ||||
-rw-r--r-- | font.h | 3 | ||||
-rw-r--r-- | fontfix.c | 6498 | ||||
-rw-r--r-- | i18n.c | 478 | ||||
-rw-r--r-- | i18n.h | 19 | ||||
-rw-r--r-- | interface.c | 70 | ||||
-rw-r--r-- | interface.h | 3 | ||||
-rw-r--r-- | menu.c | 414 | ||||
-rw-r--r-- | menu.h | 4 | ||||
-rw-r--r-- | osd.c | 12 | ||||
-rw-r--r-- | osd.h | 6 | ||||
-rw-r--r-- | recording.c | 7 | ||||
-rw-r--r-- | remote.c | 4 | ||||
-rw-r--r-- | svdrp.c | 16 | ||||
-rw-r--r-- | thread.c | 8 | ||||
-rw-r--r-- | thread.h | 14 | ||||
-rw-r--r-- | timers.conf | 15 | ||||
-rw-r--r-- | tools.c | 14 | ||||
-rw-r--r-- | tools.h | 5 | ||||
-rw-r--r-- | vdr.c | 38 |
36 files changed, 8044 insertions, 309 deletions
@@ -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 <bastian@nocopy.de> Matthias Schniedermeyer <ms@citd.de> for implementing the 'MarkInstantRecord' setup option. + +Miha Setina <mihasetina@softhome.net> + for translating the OSD texts to the Slovenian language. @@ -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"; }' + @@ -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. @@ -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'). + @@ -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 @@ -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 @@ -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 <ctype.h> #include <stdlib.h> #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; @@ -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 T> class cConfig : public cList<T> { private: char *fileName; @@ -217,12 +233,14 @@ public: cTimer *GetTimer(cTimer *Timer); }; -extern int CurrentChannel; +class cCommands : public cConfig<cCommand> {}; + 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); @@ -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); + } + } +} + @@ -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 @@ -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) { @@ -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); @@ -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 <fstream.h> #include <iomanip.h> #include <iostream.h> -#include <minmax.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -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"); @@ -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; @@ -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... } } @@ -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, // .*******....... + }, + }; @@ -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 <mihasetina@softhome.net> + * + */ + +/* + * 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 <kls@cadsoft.de> to have + * it included in the next version of VDR. + */ + +#include "i18n.h" +#include <stdio.h> +#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]; +} + @@ -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 <ctype.h> #include <unistd.h> +#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); @@ -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 <string.h> #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++) { @@ -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); }; @@ -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 <assert.h> #include <string.h> +#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<cOsdItem>::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")); } } @@ -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)) { @@ -6,7 +6,7 @@ * * Ported to LIRC by Carsten Koch <Carsten.Koch@icem.de> 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; } @@ -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) @@ -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(); } } @@ -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 <pthread.h> #include <sys/types.h> +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. @@ -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)); @@ -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; }; @@ -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 <getopt.h> @@ -31,6 +31,7 @@ #include <unistd.h> #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; |