summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--BUGS4
-rw-r--r--CONTRIBUTORS3
-rw-r--r--FORMATS31
-rw-r--r--HISTORY46
-rw-r--r--MANUAL43
-rw-r--r--Makefile28
-rw-r--r--README11
-rw-r--r--channels.conf66
-rw-r--r--config.c97
-rw-r--r--config.h30
-rw-r--r--dvbapi.c210
-rw-r--r--dvbapi.h68
-rw-r--r--dvbosd.c19
-rw-r--r--dvbosd.h6
-rw-r--r--eit.c40
-rw-r--r--eit.h7
-rw-r--r--font.c16
-rw-r--r--font.h3
-rw-r--r--fontfix.c6498
-rw-r--r--i18n.c478
-rw-r--r--i18n.h19
-rw-r--r--interface.c70
-rw-r--r--interface.h3
-rw-r--r--menu.c414
-rw-r--r--menu.h4
-rw-r--r--osd.c12
-rw-r--r--osd.h6
-rw-r--r--recording.c7
-rw-r--r--remote.c4
-rw-r--r--svdrp.c16
-rw-r--r--thread.c8
-rw-r--r--thread.h14
-rw-r--r--timers.conf15
-rw-r--r--tools.c14
-rw-r--r--tools.h5
-rw-r--r--vdr.c38
36 files changed, 8044 insertions, 309 deletions
diff --git a/BUGS b/BUGS
index d24d370..506316a 100644
--- a/BUGS
+++ b/BUGS
@@ -4,5 +4,5 @@ Video Disk Recorder - Known Bugs
* Sometimes the picture "jumps" as if a frame is skipped.
Presumably this is a problem in the card driver or firmware?
-* The first picture captured with the GRAB command in SVDRP
- is empty. Also, these pictures appear to be too dark.
+* The pictures captured with the GRAB command in SVDRP
+ appear to be too dark.
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index db47d8b..279706d 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -40,3 +40,6 @@ Bastian Guse <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.
diff --git a/FORMATS b/FORMATS
index 331fe3d..3eee494 100644
--- a/FORMATS
+++ b/FORMATS
@@ -47,8 +47,11 @@ Video Disk Recorder File Formats
----F-- = Friday
-----S- = Saturday
------S = Sunday
- (any combination is possible, for example MTWTF--) or the "day of month" (1..31)
- - Star time (first two digits for the hour, second two digits for the minutes)
+ (any combination is possible, for example MTWTF--, and the days may be
+ indicated by any characters except '-', so for example ABC---- would set
+ a timer that records on monday, tuesday and wednesday) or the "day of month"
+ (1..31)
+ - Start time (first two digits for the hour, second two digits for the minutes)
- End time (first two digits for the hour, second two digits for the minutes)
- Priority (from 00 to 99, 00 = lowest prioity, 99 = highest priority)
- Guaranteed lifetime of recording (in days)
@@ -63,3 +66,27 @@ Video Disk Recorder File Formats
See the MANUAL file for a description of the available options.
+* commands.conf
+
+ This file contains the definitions of commands that can be executed from
+ the "Main" menus "Commands" option.
+
+ Each line contains one command definition in the following format:
+
+ title : command
+
+ where 'title' is the string the will be displayed in the "Commands" menu,
+ and 'command' is the actual command string that will be executed when this
+ option is selected. The delimiting ':' may be surrounded by any number of
+ white space characters.
+
+ In order to avoid error messages to stderr, every command should have
+ stderr redirected to stdout. Everything the command prints to stdout will
+ be displayed in a result window, with 'title' as its title.
+
+ Examples:
+
+ Check for new mail: /usr/local/bin/checkmail 2>&1
+ CPU status : /usr/loval/bin/cpustatus 2>&1
+ Disk space : df -h | grep '/video' | awk '{ print 100 - $5 "% free"; }'
+
diff --git a/HISTORY b/HISTORY
index 189fd7b..485f24a 100644
--- a/HISTORY
+++ b/HISTORY
@@ -265,3 +265,49 @@ Video Disk Recorder Revision History
- Problematic characters in recording names (which can come from timers that
are programmed via the "Schedules" menu) are now replaced by suitable
substitutes.
+
+2000-11-19: Version 0.68
+
+- Date and time in the title of an event info page are now always right adjusted.
+- The 'current channel' is now handled device specific (in case there is more
+ than one DVB card).
+- The 'SetSystemTime' option in the "Setup" menu is now shown as "yes/no".
+- Implemented "internationalization" (see 'i18n.c' for information on how to
+ add new languages). Thanks to Miha Setina for translating the OSD texts to
+ the Slovenian language.
+- Fixed learning keys on the PC keyboard (display oscillated).
+- Fixed a timing problem with OSD refresh and SVDRP.
+- Avoiding multiple definitions of the same timer in the "Schedule" menu (this
+ could happen when pressing the "Red" button while editing the timer).
+- There can now be a configuration file named 'commands.conf' that defines
+ commands that can be executed through the "Main" menu's "Commands" option
+ (see FORMATS for details on how to define these commands).
+- Added a 'fixed' font for use with the output of system commands.
+- The 'Priority' parameter of the timers is now also used to interrupt a low
+ priority timer recording if a higher priority timer wants to record.
+- A timer recording on a DVB card with a CAM module will now be interrupted
+ by a timer that needs to use this specific DVB card to record an encrypted
+ channel, if the timer currently occupying this DVB card doesn't need the
+ CAM module (and thus can continue recording on a different DVB card).
+- The "Yellow" button in the "What's on now/next?" menus now displays the
+ schedule of the current channel from that menu.
+- All DVB cards in a multi-card system now write their EIT information into the
+ same data structure.
+- If there is more than one DVB card in the system, the non-primary cards are
+ now used to periodically scan through the channels in order to keep the
+ EPG info up-to-date. Scanning kicks in after 60 seconds of user inactivity
+ (timeout in order to keep user interactions instantaneously) and each channel
+ that has the 'pnr' parameter defined in 'channels.conf' is switched to for
+ 20 seconds. If there is only one DVB card in the system, that card will start
+ scanning after 5 hours (configurable through the "Setup" menu) of user inactivity
+ and will switch back to the channel it originally displayed at the first sign of
+ user activity. Any scanning will only occur if that particular card is not
+ currently recording or replaying.
+- Now shifting the 'Subtitle' info into the 'ExtendedDescription' on stations
+ that don't send the EIT information correctly (like, e.g., 'VOX').
+- Implemented a 10 seconds latency when removing files.
+- Fixed unwanted reaction on the "Green" and "Yellow" button in the "Event" display.
+- Implemented 'Transfer Mode' to display video data from the DVB card that actually
+ can receive a certain channel on the primary interface. This is currently in
+ an early state and may still cause some problems, but it appears to work nice
+ already.
diff --git a/MANUAL b/MANUAL
index ffcc10b..46466bf 100644
--- a/MANUAL
+++ b/MANUAL
@@ -74,8 +74,8 @@ Video Disk Recorder User's Manual
programmes that will start next on all channels.
Inside the "What's on now/next?" menus the "Green" button toggles between
- the "Now" and "Next" display, and the "Yellow" button gets you back to the
- "Schedule" menu of the current channel.
+ the "Now" and "Next" display, and the "Yellow" button takes you to the
+ "Schedule" menu of the current channel in the list.
The "Red" button allows you to instantly program a timer to record the
selected programme. You will get into the "Edit Timer" menu in which
@@ -203,7 +203,9 @@ Video Disk Recorder User's Manual
to free space for a new recording. If the disk is full and a new
recording needs more space, an existing recording with the lowest
Priority (and which has exceeded its guaranteed Lifetime) will be
- removed.
+ removed. If all available DVB cards are currently occupied, a
+ timer with a higher priority will interrupt the timer with the
+ lowest priority in order to start recording.
Lifetime: The number of days (0..99) a recording made through this timer is
guaranteed to remain on disk before it is automatically removed
to free up space for a new recording. Note that setting this
@@ -228,6 +230,10 @@ Video Disk Recorder User's Manual
displayed as "no" and "yes" in the "Setup" menu, while in the setup file they
are stored as '0' and '1', respectively):
+ OSDLanguage = 0 Defines the language used to display the OSD texts.
+ 0 = Englisch
+ 1 = Deutsch
+
PrimaryDVB = 1 Defines the primary DVB interface (i.e. the one that
will display the menus and will react on input through
the remote control). Valid values range from '1' to the
@@ -266,6 +272,37 @@ Video Disk Recorder User's Manual
1 = system time wil be set
Note that this works only if VDR is running under a user
id that has permisson to set the system time.
+
MarginStart = 2 Defines how many minutes before the official start time
MarginStop = 10 of a broadcast VDR shall start recording, and how long
after the official end time it shall stop recording.
+
+ EPGScanTimeout = 5 The time (in hours) of user inactivity after which the
+ DVB card in a single card system starts scanning channels
+ to keep the EPG up-to-date.
+ A value of '0' turns off scanning on a single card system.
+
+* Executing system commands
+
+ The "Main" menu option "Commands" allows you to execute any system commands
+ defined in the configuration file 'commands.conf' (see FORMATS for details).
+ The "Commands" option will only be present in the "Main" menu if a valid
+ 'commands.conf' file containing at least one command definition has been
+ found at program start.
+
+ This feature can be used to do virtually anything, like checking for new
+ mail, displaying the CPU temperature - you name it! All you need to do is
+ enter the necessary command definition into 'commands.conf' and implement
+ the actual command that will be called. Such a command can typically be a
+ shell script or a Perl program. Anything that command writes to stdout will
+ be displayed on a result screen after executing the command. This screen will
+ use a 'fixed' font so that you can generate formatted output. In order to
+ avoid error messages going to stderr, command definitions should redirect
+ stderr to stdout (see FORMATS).
+
+ WARNING: THE COMMANDS DEFINED IN 'commands.conf' WILL BE EXECUTED UNDER THE
+ ======= SAME USER ID THAT VDR IS RUNNING WITH. BE VERY CAREFUL WHEN
+ DEFINING THESE COMMANDS AND MAKE SURE THEY DON'T HARM YOUR SYSTEM,
+ ESPECIALLY IF YOU ARE RUNNING VDR UNDER A HIGH PRIVILEGED USER ID
+ (LIKE 'root').
+
diff --git a/Makefile b/Makefile
index 9db79f3..739d394 100644
--- a/Makefile
+++ b/Makefile
@@ -4,15 +4,16 @@
# See the main source file 'vdr.c' for copyright information and
# how to reach the author.
#
-# $Id: Makefile 1.14 2000/10/28 16:24:16 kls Exp $
+# $Id: Makefile 1.16 2000/11/18 14:58:10 kls Exp $
DVBDIR = ../DVB
INCLUDES = -I$(DVBDIR)/driver
-OBJS = config.o dvbapi.o dvbosd.o eit.o font.o interface.o menu.o osd.o\
+OBJS = config.o dvbapi.o dvbosd.o eit.o font.o i18n.o interface.o menu.o osd.o\
recording.o remote.o svdrp.o thread.o tools.o vdr.o videodir.o
OSDFONT = -adobe-helvetica-medium-r-normal--23-*-100-100-p-*-iso8859-1
+FIXFONT = -adobe-courier-bold-r-normal--25-*-100-100-m-*-iso8859-1
ifndef REMOTE
REMOTE = KBD
@@ -25,8 +26,8 @@ DEFINES += -DDEBUG_OSD
endif
all: vdr
-font: genfontfile fontosd.c
- @echo "font file created."
+font: genfontfile fontfix.c fontosd.c
+ @echo "font files created."
# Implicit rules:
@@ -35,20 +36,21 @@ font: genfontfile fontosd.c
# Dependencies:
-config.o : config.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h remote.h svdrp.h thread.h tools.h
+config.o : config.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h interface.h remote.h svdrp.h thread.h tools.h
dvbapi.o : dvbapi.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h remote.h svdrp.h thread.h tools.h videodir.h
dvbosd.o : dvbosd.c dvbosd.h font.h tools.h
eit.o : eit.c eit.h thread.h tools.h
-font.o : font.c font.h fontosd.c tools.h
-interface.o: interface.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h remote.h svdrp.h thread.h tools.h
-menu.o : menu.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h menu.h osd.h recording.h remote.h svdrp.h thread.h tools.h
-osd.o : osd.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h osd.h remote.h svdrp.h thread.h tools.h
+font.o : font.c font.h fontfix.c fontosd.c tools.h
+i18n.o : i18n.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h thread.h tools.h
+interface.o: interface.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h interface.h remote.h svdrp.h thread.h tools.h
+menu.o : menu.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h interface.h menu.h osd.h recording.h remote.h svdrp.h thread.h tools.h
+osd.o : osd.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h interface.h osd.h remote.h svdrp.h thread.h tools.h
recording.o: recording.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h recording.h remote.h svdrp.h thread.h tools.h videodir.h
remote.o : remote.c config.h dvbapi.h dvbosd.h eit.h font.h remote.h thread.h tools.h
svdrp.o : svdrp.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h remote.h svdrp.h thread.h tools.h
thread.o : thread.c thread.h
tools.o : tools.c tools.h
-vdr.o : vdr.c config.h dvbapi.h dvbosd.h eit.h font.h interface.h menu.h osd.h recording.h remote.h svdrp.h thread.h tools.h videodir.h
+vdr.o : vdr.c config.h dvbapi.h dvbosd.h eit.h font.h i18n.h interface.h menu.h osd.h recording.h remote.h svdrp.h thread.h tools.h videodir.h
videodir.o : videodir.c tools.h videodir.h
# The main program:
@@ -56,8 +58,10 @@ videodir.o : videodir.c tools.h videodir.h
vdr: $(OBJS)
g++ -g -O2 $(OBJS) -lncurses -ljpeg -lpthread -o vdr
-# The font file:
+# The font files:
+fontfix.c:
+ genfontfile "cFont::tPixelData FontFix" $(FIXFONT) > $@
fontosd.c:
genfontfile "cFont::tPixelData FontOsd" $(OSDFONT) > $@
@@ -73,4 +77,4 @@ genfontfile: genfontfile.o
clean:
-rm -f $(OBJS) vdr genfontfile genfontfile.o
CLEAN: clean
- -rm -f fontosd.c
+ -rm -f fontfix.c fontosd.c
diff --git a/README b/README
index cfc10a7..b1e071e 100644
--- a/README
+++ b/README
@@ -1,9 +1,8 @@
-On Screen Menu for the Video Disk Recorder
-------------------------------------------
+Video Disk Recorder ('VDR')
+---------------------------
-These files contain the source code of an on screen
-menu for a video disk recorder based on the DVB driver
-of the LinuxTV project (http://linuxtv.org).
+These files contain the source code of the "Video Disk Recorder",
+which is based on the DVB driver of the LinuxTV project (http://linuxtv.org).
For details about the "Video Disk Recorder" project please
refer to http://www.cadsoft.de/people/kls/vdr.
@@ -13,6 +12,8 @@ Web pages, which can be used within this program.
Please see the INSTALL file for details on how to install
this program on your computer.
+The MANUAL file describes how to operate the VDR.
+
The author can be contacted at kls@cadsoft.de.
Yet another "set-top-box"?
diff --git a/channels.conf b/channels.conf
index c61669c..ce30919 100644
--- a/channels.conf
+++ b/channels.conf
@@ -6,7 +6,6 @@ ARD:11837:h:1:27500:101:102:0:28106
BR3:11837:h:1:27500:201:202:0:28107
Hessen-3:11837:h:1:27500:301:302:0:28108
N3:12110:h:1:27500:2401:2402:0:28224
-:Group 1
SR3:11837:h:1:27500:501:502:0:28110
WDR:11837:h:1:27500:601:602:0:28111
BR-alpha:11837:h:1:27500:701:702:0:28112
@@ -16,25 +15,24 @@ ZDF:11954:h:1:27500:110:120:0:28006
3sat:11954:h:1:27500:210:220:0:28007
KiKa:11954:h:1:27500:310:320:0:28008
arte:11836:h:1:27500:401:402:0:28109
-:Group 2
-Eurosport:11954:h:1:27500:410:420:0:28009
ORF Sat:11954:h:1:27500:506:507:0:28010
ZDF.info:11954:h:1:27500:610:620:0:28011
-:Group 3
-CNN:12168:v:1:27500:165:100:0:0
+CNN:12168:v:1:27500:165:100:0:28512
Super RTL:12188:h:1:27500:165:120:0:12040
VOX:12188:h:1:27500:167:136:0:12060
DW TV:12363:v:1:27500:305:306:0:8905
Kabel 1:12480:v:1:27500:511:512:0:899
-TM3:12480:v:1:27500:767:768:0:0
-DSF:12480:v:1:27500:1023:1024:0:0
-HOT:12480:v:1:27500:1279:1280:0:0
-BloombergTV:12552:v:1:22000:162:99:0:0
+tm3:12480:v:1:27500:767:768:0:897
+DSF:12480:v:1:27500:1023:1024:0:900
+HOT:12480:v:1:27500:1279:1280:0:40
+Bloomberg TV Germany:12551:v:1:22000:162:99:0:12160
+BLOOMBERG TV:11817:v:1:27500:163:92:0:8004
+Bloomberg:12168:v:1:27500:167:112:0:12721
Sky News:12552:v:1:22000:305:306:0:3995
-KinderNet:12574:h:1:22000:163:92:0:0
-Alice:12610:v:1:22000:162:96:0:0
-n-tv:12670:v:1:22000:162:96:0:0
-Grand Tourisme:12670:v:1:22000:289:290:0:0
+KinderNet:12574:h:1:22000:163:92:0:5020
+Alice:12610:v:1:22000:162:96:0:12200
+n-tv:12669:v:1:22000:162:96:0:12730
+Grand Tourisme:12670:v:1:22000:289:290:0:17300
TW1:12692:h:1:22000:166:167:0:13013
Eurosport:11954:h:1:27500:410:420:0:28009
EinsExtra:12110:H:1:27500:101:102:0:28201
@@ -43,10 +41,12 @@ EinsMuXx:12110:H:1:27500:301:302:0:28203
ZDF Theaterkanal:11954:H:1:27500:1110:1120:0:28016
ZDF.doku:11954:H:1:27500:660:670:0:28014
MDR:12110:h:1:27500:401:402:0:28204
+NICK-PARAMOUNT:12246:v:1:27500:167:108:0:29312
ORB:12110:h:1:27500:501:502:0:28205
B1:12110:h:1:27500:601:602:0:28206
ARD Online-Kanal:12722:h:1:22000:8191:701:0:0
-Premiere World Promo:11798:h:1:27500:255:256:0:0
+:Premiere World
+Premiere World Promo:11798:h:1:27500:255:256:0:8
Premiere:11798:h:1:27500:511:512:2:10
Star Kino:11798:h:1:27500:767:768:2:9
Cine Action:11798:h:1:27500:1023:1024:2:20
@@ -54,9 +54,31 @@ Cine Comedy:11798:h:1:27500:1279:1280:2:29
Sci Fantasy:11798:h:1:27500:1535:1536:2:41
Romantic Movies:11798:h:1:27500:1791:1792:2:11
Studio Universal:11798:h:1:27500:2047:2048:2:21
-TV Niepokalanow:11876:h:1:27500:305:321:0:0
-Mosaico:11934:v:1:27500:165:100:0:0
-Andalucia TV:11934:v:1:27500:166:104:0:0
+13th Street:11797:h:1:27500:2303:2304:2:43
+Junior:12031:h:1:27500:255:256:2:19
+K-Toon:12032:h:1:27500:511:512:2:12
+Disney Channel:12031:h:1:27500:767:768:2:15
+Fox Kids:11798:h:1:27500:255:256:2:0
+Sunset:12031:h:1:27500:1023:1024:2:16
+Comedy:12031:h:1:27500:1279:1280:2:28
+Planet:12031:h:1:27500:2047:2048:2:13
+Discovery Channel:12031:h:1:27500:1791:1792:2:14
+Krimi&Co:12031:h:1:27500:1535:1536:2:23
+Filmpalast:12090:v:1:27500:255:256:2:36
+Heimatkanal:11758:h:1:27500:2815:2816:2:517
+Goldstar:11758:h:1:27500:3839:3840:2:518
+Classica:12090:v:1:27500:767:768:2:34
+Seasons:12090:v:1:27500:511:512:2:33
+Blue Channel:11758:h:1:27500:2559:2560:2:516
+Feed (F1 Boxengasse):11720:h:1:27500:2559:2560:2:242
+Feed (F1 Data):11720:h:1:27500:3071:3072:2:244
+Feed (F1 Multi):11720:h:1:27500:2815:2816:2:243
+Feed (F1 On Board):11720:h:1:27500:2303:2304:2:241
+Feed (F1 Verfolger):11720:h:1:27500:2047:2048:2:240
+:
+TV Niepokalanow:11876:h:1:27500:305:321:0:20601
+Mosaico:11934:v:1:27500:165:100:0:29010
+Andalucia TV:11934:v:1:27500:166:104:0:29011
TVC Internacional:11934:v:1:27500:167:108:0:0
Nasza TV:11992:h:1:27500:165:98:0:0
WishLine test:12012:v:1:27500:163:90:0:0
@@ -96,7 +118,7 @@ ESC 1:12363:v:1:27500:163:104:0:0
TV5 Europe:12363:v:1:27500:164:112:0:0
TV7 Tunisia:12363:v:1:27500:166:128:0:0
ARTE:12363:v:1:27500:167:137:0:0
-RAI Uno:12363:v:1:27500:289:290:0:0
+RAI Uno:12363:v:1:27500:289:290:0:8904
RTP International:12363:v:1:27500:300:301:0:0
Fashion TV:12402:v:1:27500:163:92:0:0
VideoService:12422:h:1:27500:255:256:0:0
@@ -116,6 +138,10 @@ Astra Vision 1:12552:v:1:22000:168:150:0:0
RTL Tele Letzebuerg:12552:v:1:22000:168:144:0:0
Astra Mosaic:12552:v:1:22000:175:176:0:0
MHP test:12604:h:1:22000:5632:8191:0:0
-Bloomberg TV Germany:12552:v:1:22000:162:99:0:12160
-Video Italia:12610:v:1:22000:121:122:0:0
+VERONICA:12574:h:1:22000:161:84:0:5010
+VH1 Classic:12699:v:1:22000:3071:3072:0:28647
+VH-1 Germany:12699:v:1:22000:3081:3082:0:28648
+Via 1 - Sch�ner Reisen:12148:h:1:27500:511:512:0:44
+Video Italia:12610:v:1:22000:121:122:0:12220
AC 3 promo:12670:v:1:22000:308:256:0:0
+ORF/ZDF:12699:h:1:22000:506:507:0:13012
diff --git a/config.c b/config.c
index 5b485f6..8964e5a 100644
--- a/config.c
+++ b/config.c
@@ -4,13 +4,14 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: config.c 1.29 2000/11/01 18:22:43 kls Exp $
+ * $Id: config.c 1.34 2000/11/18 13:26:36 kls Exp $
*/
#include "config.h"
#include <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;
diff --git a/config.h b/config.h
index f9bd579..db3f1ed 100644
--- a/config.h
+++ b/config.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: config.h 1.29 2000/11/01 13:42:29 kls Exp $
+ * $Id: config.h 1.34 2000/11/18 13:25:53 kls Exp $
*/
#ifndef __CONFIG_H
@@ -18,7 +18,7 @@
#include "eit.h"
#include "tools.h"
-#define VDRVERSION "0.67"
+#define VDRVERSION "0.68"
#define MaxBuffer 10000
@@ -92,9 +92,12 @@ public:
const char *ToText(void);
bool Parse(const char *s);
bool Save(FILE *f);
- bool Switch(cDvbApi *DvbApi = NULL);
+ bool Switch(cDvbApi *DvbApi = NULL, bool Log = true);
};
+#define DEFAULTPRIORITY 99
+#define DEFAULTLIFETIME 99
+
class cTimer : public cListObject {
private:
time_t startTime, stopTime;
@@ -115,7 +118,7 @@ public:
char *summary;
cTimer(bool Instant = false);
cTimer(const cEventInfo *EventInfo);
- ~cTimer();
+ virtual ~cTimer();
cTimer& operator= (const cTimer &Timer);
const char *ToText(void);
bool Parse(const char *s);
@@ -132,6 +135,19 @@ public:
static const char *PrintDay(int d);
};
+class cCommand : public cListObject {
+private:
+ char *title;
+ char *command;
+ static char *result;
+public:
+ cCommand(void);
+ virtual ~cCommand();
+ bool Parse(const char *s);
+ const char *Title(void) { return title; }
+ const char *Execute(void);
+ };
+
template<class 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);
diff --git a/dvbapi.c b/dvbapi.c
index cc246d2..5e4f2e6 100644
--- a/dvbapi.c
+++ b/dvbapi.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbapi.c 1.34 2000/11/01 09:19:27 kls Exp $
+ * $Id: dvbapi.c 1.40 2000/11/19 16:46:37 kls Exp $
*/
#include "dvbapi.h"
@@ -372,7 +372,9 @@ private:
int *inFile, *outFile;
protected:
int Free(void) { return ((tail >= head) ? size + head - tail : head - tail) - 1; }
+public:
int Available(void) { return (tail >= head) ? tail - head : size - head + tail; }
+protected:
int Readable(void) { return (tail >= head) ? size - tail - (head ? 0 : 1) : head - tail - 1; } // keep a 1 byte gap!
int Writeable(void) { return (tail >= head) ? tail - head : size - head; }
int Byte(int Offset);
@@ -1079,6 +1081,63 @@ int cReplayBuffer::Write(int Max)
return Written;
}
+// --- cTransferBuffer -------------------------------------------------------
+
+class cTransferBuffer : public cThread {
+private:
+ bool active;
+ int fromDevice, toDevice;
+protected:
+ virtual void Action(void);
+public:
+ cTransferBuffer(int FromDevice, int ToDevice);
+ virtual ~cTransferBuffer();
+ };
+
+cTransferBuffer::cTransferBuffer(int FromDevice, int ToDevice)
+{
+ fromDevice = FromDevice;
+ toDevice = ToDevice;
+ active = true;
+ Start();
+}
+
+cTransferBuffer::~cTransferBuffer()
+{
+ {
+ LOCK_THREAD;
+ active = false;
+ }
+ for (time_t t0 = time(NULL); time(NULL) - t0 < 3; ) {
+ LOCK_THREAD;
+ if (active)
+ break;
+ }
+}
+
+void cTransferBuffer::Action(void)
+{
+ dsyslog(LOG_INFO, "data transfer thread started (pid=%d)", getpid());
+ //XXX hack to make the video device go into 'replaying' mode:
+ char *dummy = "AV"; // must be "AV" to make the driver go into AV_PES mode!
+ write(toDevice, dummy, strlen(dummy));
+ {
+ cRingBuffer Buffer(&fromDevice, &toDevice, VIDEOBUFSIZE, 0, 0);
+ while (active && Buffer.Available() < 100000) { // need to give the read buffer a head start
+ Buffer.Read(); // initializes fromDevice for reading
+ usleep(1); // this keeps the CPU load low
+ }
+ for (; active;) {
+ if (Buffer.Read() < 0 || Buffer.Write() < 0)
+ break;
+ usleep(1); // this keeps the CPU load low
+ }
+ }
+ dsyslog(LOG_INFO, "data transfer thread stopped (pid=%d)", getpid());
+ LOCK_THREAD;
+ active = true;
+}
+
// --- cDvbApi ---------------------------------------------------------------
int cDvbApi::NumDvbApis = 0;
@@ -1091,6 +1150,10 @@ cDvbApi::cDvbApi(const char *VideoFileName, const char *VbiFileName)
pidRecord = pidReplay = 0;
fromRecord = toRecord = -1;
fromReplay = toReplay = -1;
+ ca = 0;
+ priority = -1;
+ transferBuffer = NULL;
+ transferringFromDvbApi = NULL;
videoDev = open(VideoFileName, O_RDWR | O_NONBLOCK);
if (videoDev >= 0) {
siProcessor = new cSIProcessor(VbiFileName);
@@ -1130,6 +1193,7 @@ cDvbApi::cDvbApi(const char *VideoFileName, const char *VbiFileName)
#endif
lastProgress = lastTotal = -1;
replayTitle = NULL;
+ currentChannel = 1;
}
cDvbApi::~cDvbApi()
@@ -1139,7 +1203,9 @@ cDvbApi::~cDvbApi()
Close();
Stop();
StopRecord();
+ StopTransfer();
OvlO(false); //Overlay off!
+ //XXX the following call sometimes causes a segfault - driver problem?
close(videoDev);
}
#if defined(DEBUG_OSD) || defined(REMOTE_KBD)
@@ -1160,22 +1226,25 @@ bool cDvbApi::SetPrimaryDvbApi(int n)
return false;
}
-cDvbApi *cDvbApi::GetDvbApi(int Ca)
+cDvbApi *cDvbApi::GetDvbApi(int Ca, int Priority)
{
cDvbApi *d = NULL;
- Ca--;
+ int index = Ca - 1;
for (int i = MAXDVBAPI; --i >= 0; ) {
- if (dvbApi[i] && !dvbApi[i]->Recording()) {
- if (i == Ca)
- return dvbApi[i];
- if (Ca < 0) {
+ if (dvbApi[i]) {
+ if (i == index) { // means we need exactly _this_ device
d = dvbApi[i];
- if (d != PrimaryDvbApi)
+ break;
+ }
+ else if (Ca == 0) { // means any device would be acceptable
+ if (!d || !dvbApi[i]->Recording() || (d->Recording() && d->Priority() > dvbApi[i]->Priority()))
+ d = dvbApi[i];
+ if (d && d != PrimaryDvbApi && !d->Recording()) // avoids the PrimaryDvbApi if possible
break;
}
}
}
- return d;
+ return (d && (!d->Recording() || d->Priority() < Priority || (!d->Ca() && Ca))) ? d : NULL;
}
int cDvbApi::Index(void)
@@ -1616,6 +1685,24 @@ int cDvbApi::Width(unsigned char c)
#endif
}
+int cDvbApi::WidthInCells(const char *s)
+{
+#ifdef DEBUG_OSD
+ return strlen(s);
+#else
+ return (osd->Width(s) + charWidth - 1) / charWidth;
+#endif
+}
+
+eDvbFont cDvbApi::SetFont(eDvbFont Font)
+{
+#ifdef DEBUG_OSD
+ return Font;
+#else
+ return osd->SetFont(Font);
+#endif
+}
+
void cDvbApi::Text(int x, int y, const char *s, eDvbColor colorFg, eDvbColor colorBg)
{
if (x < 0) x = cols + x;
@@ -1689,9 +1776,15 @@ bool cDvbApi::ShowProgress(bool Initial)
return false;
}
-bool cDvbApi::SetChannel(int FrequencyMHz, char Polarization, int Diseqc, int Srate, int Vpid, int Apid, int Ca, int Pnr)
+bool cDvbApi::SetChannel(int ChannelNumber, int FrequencyMHz, char Polarization, int Diseqc, int Srate, int Vpid, int Apid, int Ca, int Pnr)
{
if (videoDev >= 0) {
+ StopTransfer();
+ if (transferringFromDvbApi) {
+ transferringFromDvbApi->StopTransfer();
+ transferringFromDvbApi = NULL;
+ }
+ SetReplayMode(VID_PLAY_RESET);
struct frontend front;
ioctl(videoDev, VIDIOCGFRONTEND, &front);
unsigned int freq = FrequencyMHz;
@@ -1712,8 +1805,20 @@ bool cDvbApi::SetChannel(int FrequencyMHz, char Polarization, int Diseqc, int Sr
front.AFC = 1;
ioctl(videoDev, VIDIOCSFRONTEND, &front);
if (front.sync & 0x1F == 0x1F) {
- if (siProcessor)
+ if (this == PrimaryDvbApi && siProcessor)
siProcessor->SetCurrentServiceID(Pnr);
+ currentChannel = ChannelNumber;
+ // If this DVB card can't receive this channel, let's see if we can
+ // use the card that actually can receive it and transfer data from there:
+ if (Ca && Ca != Index() + 1) {
+ cDvbApi *CaDvbApi = GetDvbApi(Ca, 0);
+ if (CaDvbApi) {
+ if (!CaDvbApi->Recording()) {
+ if (CaDvbApi->SetChannel(ChannelNumber, FrequencyMHz, Polarization, Diseqc, Srate, Vpid, Apid, Ca, Pnr))
+ transferringFromDvbApi = CaDvbApi->StartTransfer(videoDev);
+ }
+ }
+ }
return true;
}
esyslog(LOG_ERR, "ERROR: channel not sync'ed (front.sync=%X)!", front.sync);
@@ -1721,6 +1826,27 @@ bool cDvbApi::SetChannel(int FrequencyMHz, char Polarization, int Diseqc, int Sr
return false;
}
+bool cDvbApi::Transferring(void)
+{
+ return transferBuffer;
+}
+
+cDvbApi *cDvbApi::StartTransfer(int TransferToVideoDev)
+{
+ StopTransfer();
+ transferBuffer = new cTransferBuffer(videoDev, TransferToVideoDev);
+ return this;
+}
+
+void cDvbApi::StopTransfer(void)
+{
+ if (transferBuffer) {
+ delete transferBuffer;
+ transferBuffer = NULL;
+ SetReplayMode(VID_PLAY_RESET);
+ }
+}
+
bool cDvbApi::Recording(void)
{
if (pidRecord && !CheckProcess(pidRecord))
@@ -1735,7 +1861,7 @@ bool cDvbApi::Replaying(void)
return pidReplay;
}
-bool cDvbApi::StartRecord(const char *FileName)
+bool cDvbApi::StartRecord(const char *FileName, int Ca, int Priority)
{
if (Recording()) {
esyslog(LOG_ERR, "ERROR: StartRecord() called while recording - ignored!");
@@ -1743,6 +1869,8 @@ bool cDvbApi::StartRecord(const char *FileName)
}
if (videoDev >= 0) {
+ StopTransfer();
+
Stop(); // TODO: remove this if the driver is able to do record and replay at the same time
// Check FileName:
@@ -1832,6 +1960,9 @@ bool cDvbApi::StartRecord(const char *FileName)
fromRecord = fromRecordPipe[0];
toRecord = toRecordPipe[1];
+
+ ca = Ca;
+ priority = Priority;
return true;
}
return false;
@@ -1846,6 +1977,8 @@ void cDvbApi::StopRecord(void)
toRecord = fromRecord = -1;
KillProcess(pidRecord);
pidRecord = 0;
+ ca = 0;
+ priority = -1;
SetReplayMode(VID_PLAY_RESET); //XXX
}
}
@@ -1865,6 +1998,7 @@ bool cDvbApi::StartReplay(const char *FileName, const char *Title)
esyslog(LOG_ERR, "ERROR: StartReplay() called while recording - ignored!");
return false;
}
+ StopTransfer();
Stop();
if (videoDev >= 0) {
@@ -2086,3 +2220,55 @@ bool cDvbApi::GetIndex(int *Current, int *Total)
return false;
}
+// --- cEITScanner -----------------------------------------------------------
+
+cEITScanner::cEITScanner(void)
+{
+ lastScan = lastActivity = time(NULL);
+ currentChannel = 0;
+ lastChannel = 1;
+}
+
+void cEITScanner::Activity(void)
+{
+ if (currentChannel) {
+ Channels.SwitchTo(currentChannel);
+ currentChannel = 0;
+ }
+ lastActivity = time(NULL);
+}
+
+void cEITScanner::Process(void)
+{
+ if (Channels.MaxNumber() > 1) {
+ time_t now = time(NULL);
+ if (now - lastScan > ScanTimeout && now - lastActivity > ActivityTimeout) {
+ for (int i = 0; i < cDvbApi::NumDvbApis; i++) {
+ cDvbApi *DvbApi = cDvbApi::GetDvbApi(i, 0);
+ if (DvbApi) {
+ if (DvbApi != cDvbApi::PrimaryDvbApi || (cDvbApi::NumDvbApis == 1 && Setup.EPGScanTimeout && now - lastActivity > Setup.EPGScanTimeout * 3600)) {
+ if (!(DvbApi->Recording() || DvbApi->Replaying() || DvbApi->Transferring())) {
+ int oldCh = lastChannel;
+ int ch = oldCh + 1;
+ while (ch != oldCh) {
+ if (ch > Channels.MaxNumber())
+ ch = 1;
+ cChannel *Channel = Channels.GetByNumber(ch);
+ if (Channel && Channel->pnr) {
+ if (DvbApi == cDvbApi::PrimaryDvbApi && !currentChannel)
+ currentChannel = DvbApi->Channel();
+ Channel->Switch(DvbApi, false);
+ lastChannel = ch;
+ break;
+ }
+ ch++;
+ }
+ }
+ }
+ }
+ }
+ lastScan = time(NULL);
+ }
+ }
+}
+
diff --git a/dvbapi.h b/dvbapi.h
index 16a2b7a..f6640ff 100644
--- a/dvbapi.h
+++ b/dvbapi.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbapi.h 1.20 2000/11/01 09:18:50 kls Exp $
+ * $Id: dvbapi.h 1.26 2000/11/19 14:09:41 kls Exp $
*/
#ifndef __DVBAPI_H
@@ -42,10 +42,11 @@ public:
bool Save(int Index);
};
+class cTransferBuffer;
+
class cDvbApi {
private:
int videoDev;
- cSIProcessor *siProcessor;
cDvbApi(const char *VideoFileName, const char *VbiFileName);
public:
~cDvbApi();
@@ -59,11 +60,15 @@ public:
static bool SetPrimaryDvbApi(int n);
// Sets the primary DVB device to 'n' (which must be in the range
// 1...NumDvbApis) and returns true if this was possible.
- static cDvbApi *GetDvbApi(int Ca = 0);
+ static cDvbApi *GetDvbApi(int Ca, int Priority);
// Selects a free DVB device, starting with the highest device number
// (but avoiding, if possible, the PrimaryDvbApi).
- // If Ca is not 0, the device with the given number will be returned
- // if it is not currently recording.
+ // If Ca is not 0, the device with the given number will be returned.
+ // If all DVB devices are currently recording, the one recording the
+ // lowest priority timer (if any) that is lower than the given Priority
+ // will be returned.
+ // The caller must check whether the returned DVB device is actually
+ // recording and stop recording if necessary.
int Index(void);
// Returns the index of this DvbApi.
static bool Init(void);
@@ -75,6 +80,9 @@ public:
// EIT facilities
+private:
+ cSIProcessor *siProcessor;
+public:
const cSchedules *Schedules(cThreadLock *ThreadLock) const;
// Caller must provide a cThreadLock which has to survive the entire
// time the returned cSchedules is accessed. Once the cSchedules is no
@@ -124,6 +132,8 @@ public:
void ClrEol(int x, int y, eDvbColor color = clrBackground);
int CellWidth(void);
int Width(unsigned char c);
+ int WidthInCells(const char *s);
+ eDvbFont SetFont(eDvbFont Font);
void Text(int x, int y, const char *s, eDvbColor colorFg = clrWhite, eDvbColor colorBg = clrBackground);
void Flush(void);
@@ -137,7 +147,26 @@ public:
// Channel facilities
- bool SetChannel(int FrequencyMHz, char Polarization, int Diseqc, int Srate, int Vpid, int Apid, int Ca, int Pnr);
+private:
+ int currentChannel;
+public:
+ bool SetChannel(int ChannelNumber, int FrequencyMHz, char Polarization, int Diseqc, int Srate, int Vpid, int Apid, int Ca, int Pnr);
+ static int CurrentChannel(void) { return PrimaryDvbApi ? PrimaryDvbApi->currentChannel : 0; }
+ int Channel(void) { return currentChannel; }
+
+ // Transfer facilities
+
+private:
+ cTransferBuffer *transferBuffer;
+ cDvbApi *transferringFromDvbApi;
+public:
+ bool Transferring(void);
+ // Returns true if we are currently transferring video data.
+private:
+ cDvbApi *StartTransfer(int TransferToVideoDev);
+ // Starts transferring video data from this DVB device to TransferToVideoDev.
+ void StopTransfer(void);
+ // Stops transferring video data (in case a transfer is currently active).
// Record/Replay facilities
@@ -153,14 +182,23 @@ private:
pid_t pidRecord, pidReplay;
int fromRecord, toRecord;
int fromReplay, toReplay;
+ int ca;
+ int priority;
void SetReplayMode(int Mode);
+protected:
+ int Ca(void) { return ca; }
+ // Returns the ca of the current recording session (0..MAXDVBAPI).
+ int Priority(void) { return priority; }
+ // Returns the priority of the current recording session (0..99),
+ // or -1 if no recording is currently active.
public:
bool Recording(void);
// Returns true if we are currently recording.
bool Replaying(void);
// Returns true if we are currently replaying.
- bool StartRecord(const char *FileName);
- // Starts recording the current channel into the given file.
+ bool StartRecord(const char *FileName, int Ca, int Priority);
+ // Starts recording the current channel into the given file, with
+ // the given ca and priority.
// In order to be able to record longer movies,
// a numerical suffix will be appended to the file name. The inital
// value of that suffix will be larger than any existing file under
@@ -194,4 +232,18 @@ public:
bool GetIndex(int *Current, int *Total = NULL);
};
+class cEITScanner {
+private:
+ enum { ActivityTimeout = 60,
+ ScanTimeout = 20
+ };
+ time_t lastScan, lastActivity;
+ int currentChannel, lastChannel;
+public:
+ cEITScanner(void);
+ bool Active(void) { return currentChannel; }
+ void Activity(void);
+ void Process(void);
+ };
+
#endif //__DVBAPI_H
diff --git a/dvbosd.c b/dvbosd.c
index c0150e2..457175d 100644
--- a/dvbosd.c
+++ b/dvbosd.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbosd.c 1.4 2000/11/01 09:13:32 kls Exp $
+ * $Id: dvbosd.c 1.6 2000/11/18 15:36:51 kls Exp $
*/
#include "dvbosd.h"
@@ -21,6 +21,7 @@ cBitmap::cBitmap(int Width, int Height)
width = Width;
height = Height;
bitmap = NULL;
+ fontType = fontOsd;
font = NULL;
if (width > 0 && height > 0) {
bitmap = new char[width * height];
@@ -42,10 +43,15 @@ cBitmap::~cBitmap()
delete bitmap;
}
-void cBitmap::SetFont(eDvbFont Font)
+eDvbFont cBitmap::SetFont(eDvbFont Font)
{
- delete font;
- font = new cFont(Font);
+ eDvbFont oldFont = fontType;
+ if (fontType != Font || !font) {
+ delete font;
+ font = new cFont(Font);
+ fontType = Font;
+ }
+ return oldFont;
}
bool cBitmap::Dirty(void)
@@ -81,6 +87,11 @@ int cBitmap::Width(unsigned char c)
return font ? font->Width(c) : -1;
}
+int cBitmap::Width(const char *s)
+{
+ return font ? font->Width(s) : -1;
+}
+
void cBitmap::Text(int x, int y, const char *s, eDvbColor ColorFg, eDvbColor ColorBg)
{
if (bitmap) {
diff --git a/dvbosd.h b/dvbosd.h
index 149dc6c..e2a424a 100644
--- a/dvbosd.h
+++ b/dvbosd.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: dvbosd.h 1.2 2000/11/01 09:13:44 kls Exp $
+ * $Id: dvbosd.h 1.4 2000/11/18 15:25:25 kls Exp $
*/
#ifndef __DVBOSD_H
@@ -45,6 +45,7 @@ enum eDvbColor {
class cBitmap {
private:
cFont *font;
+ eDvbFont fontType;
protected:
int width, height;
char *bitmap;
@@ -53,10 +54,11 @@ protected:
public:
cBitmap(int Width, int Height);
virtual ~cBitmap();
- void SetFont(eDvbFont Font);
+ eDvbFont SetFont(eDvbFont Font);
bool Dirty(void);
void SetPixel(int x, int y, eDvbColor Color);
int Width(unsigned char c);
+ int Width(const char *s);
void Text(int x, int y, const char *s, eDvbColor ColorFg = clrWhite, eDvbColor ColorBg = clrBackground);
void Fill(int x1, int y1, int x2, int y2, eDvbColor Color);
void Clear(void);
diff --git a/eit.c b/eit.c
index 65856e6..7985528 100644
--- a/eit.c
+++ b/eit.c
@@ -13,7 +13,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
- * $Id: eit.c 1.7 2000/11/02 17:06:19 kls Exp $
+ * $Id: eit.c 1.9 2000/11/18 13:42:28 kls Exp $
***************************************************************************/
#include "eit.h"
@@ -24,7 +24,6 @@
#include <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");
diff --git a/eit.h b/eit.h
index fec498b..d5c4ebd 100644
--- a/eit.h
+++ b/eit.h
@@ -13,7 +13,7 @@
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
- * $Id: eit.h 1.2 2000/10/29 10:21:56 kls Exp $
+ * $Id: eit.h 1.3 2000/11/17 16:14:27 kls Exp $
***************************************************************************/
#ifndef __EIT_H
@@ -120,7 +120,10 @@ typedef struct sip_filter {
class cSIProcessor : public cThread {
private:
- cSchedules *schedules;
+ static int numSIProcessors;
+ static cSchedules *schedules;
+ static cMutex schedulesMutex;
+ bool masterSIProcessor;
bool useTStime;
SIP_FILTER *filters;
int fsvbi;
diff --git a/font.c b/font.c
index 3ef4083..22c92be 100644
--- a/font.c
+++ b/font.c
@@ -4,21 +4,27 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: font.c 1.1 2000/10/01 15:01:49 kls Exp $
+ * $Id: font.c 1.2 2000/11/18 15:16:08 kls Exp $
*/
#include "font.h"
#include "tools.h"
+#include "fontfix.c"
#include "fontosd.c"
-cFont::cFont(eDvbFont Font)//XXX
+cFont::cFont(eDvbFont Font)
{
+
+#define FONTINDEX(Name)\
+ case font##Name: for (int i = 0; i < NUMCHARS; i++)\
+ data[i] = (tCharData *)&Font##Name[i < 32 ? 0 : i - 32];\
+ break;
+
switch (Font) {
default:
- case fontOsd: for (int i = 0; i < NUMCHARS; i++)
- data[i] = (tCharData *)&FontOsd[i < 32 ? 0 : i - 32];
- break;
+ FONTINDEX(Osd);
+ FONTINDEX(Fix);
// TODO others...
}
}
diff --git a/font.h b/font.h
index f31c6b5..414eaa8 100644
--- a/font.h
+++ b/font.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: font.h 1.1 2000/10/01 15:00:35 kls Exp $
+ * $Id: font.h 1.2 2000/11/18 14:51:45 kls Exp $
*/
#ifndef __FONT_H
@@ -12,6 +12,7 @@
enum eDvbFont {
fontOsd,
+ fontFix,
/* TODO as soon as we have the font files...
fontTtxSmall,
fontTtxLarge,
diff --git a/fontfix.c b/fontfix.c
new file mode 100644
index 0000000..67eb162
--- /dev/null
+++ b/fontfix.c
@@ -0,0 +1,6498 @@
+cFont::tPixelData FontFix[][28] = {
+ { // 32
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 33
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000300, // ......**.......
+ 0x00000780, // .....****......
+ 0x00000780, // .....****......
+ 0x00000780, // .....****......
+ 0x00000780, // .....****......
+ 0x00000780, // .....****......
+ 0x00000780, // .....****......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000000, // ...............
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 34
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00001DC0, // ...***.***.....
+ 0x00001DC0, // ...***.***.....
+ 0x00001DC0, // ...***.***.....
+ 0x00001DC0, // ...***.***.....
+ 0x00000880, // ....*...*......
+ 0x00000880, // ....*...*......
+ 0x00000880, // ....*...*......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 35
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000660, // .....**..**....
+ 0x00000660, // .....**..**....
+ 0x00000660, // .....**..**....
+ 0x00000660, // .....**..**....
+ 0x00000660, // .....**..**....
+ 0x00000660, // .....**..**....
+ 0x00003FF8, // ..***********..
+ 0x00003FF8, // ..***********..
+ 0x00000CC0, // ....**..**.....
+ 0x00000CC0, // ....**..**.....
+ 0x00000CC0, // ....**..**.....
+ 0x00007FF0, // .***********...
+ 0x00007FF0, // .***********...
+ 0x00001980, // ...**..**......
+ 0x00001980, // ...**..**......
+ 0x00001980, // ...**..**......
+ 0x00001980, // ...**..**......
+ 0x00001980, // ...**..**......
+ 0x00001980, // ...**..**......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 36
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000F60, // ....****.**....
+ 0x00001FE0, // ...********....
+ 0x000030E0, // ..**....***....
+ 0x00003060, // ..**.....**....
+ 0x00003000, // ..**...........
+ 0x00003800, // ..***..........
+ 0x00001F80, // ...******......
+ 0x000007E0, // .....******....
+ 0x00000070, // .........***...
+ 0x00000030, // ..........**...
+ 0x00003030, // ..**......**...
+ 0x00003870, // ..***....***...
+ 0x00003FE0, // ..*********....
+ 0x000037C0, // ..**.*****.....
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 37
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000F00, // ....****.......
+ 0x00001980, // ...**..**......
+ 0x000030C0, // ..**....**.....
+ 0x000030C0, // ..**....**.....
+ 0x00001980, // ...**..**......
+ 0x00000F00, // ....****.......
+ 0x00000070, // .........***...
+ 0x000003C0, // ......****.....
+ 0x00000E00, // ....***........
+ 0x000039E0, // ..***..****....
+ 0x00000330, // ......**..**...
+ 0x00000618, // .....**....**..
+ 0x00000618, // .....**....**..
+ 0x00000330, // ......**..**...
+ 0x000001E0, // .......****....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 38
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000780, // .....****......
+ 0x00000FC0, // ....******.....
+ 0x000018C0, // ...**...**.....
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00000C00, // ....**.........
+ 0x00000E00, // ....***........
+ 0x00001F30, // ...*****..**...
+ 0x00001BF0, // ...**.******...
+ 0x000031E0, // ..**...****....
+ 0x000030C0, // ..**....**.....
+ 0x000031E0, // ..**...****....
+ 0x00003FF8, // ..***********..
+ 0x00001F38, // ...*****..***..
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 39
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000380, // ......***......
+ 0x00000380, // ......***......
+ 0x00000700, // .....***.......
+ 0x00000600, // .....**........
+ 0x00000C00, // ....**.........
+ 0x00000800, // ....*..........
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 40
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000060, // .........**....
+ 0x000000E0, // ........***....
+ 0x000000C0, // ........**.....
+ 0x00000180, // .......**......
+ 0x00000180, // .......**......
+ 0x00000180, // .......**......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000180, // .......**......
+ 0x00000180, // .......**......
+ 0x00000180, // .......**......
+ 0x000000C0, // ........**.....
+ 0x000000E0, // ........***....
+ 0x00000060, // .........**....
+ 0x00000000, // ...............
+ },
+ { // 41
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00001800, // ...**..........
+ 0x00001C00, // ...***.........
+ 0x00000C00, // ....**.........
+ 0x00000600, // .....**........
+ 0x00000600, // .....**........
+ 0x00000600, // .....**........
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000600, // .....**........
+ 0x00000600, // .....**........
+ 0x00000600, // .....**........
+ 0x00000C00, // ....**.........
+ 0x00001C00, // ...***.........
+ 0x00001800, // ...**..........
+ 0x00000000, // ...............
+ },
+ { // 42
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00003330, // ..**..**..**...
+ 0x00003FF0, // ..**********...
+ 0x00000FC0, // ....******.....
+ 0x00000300, // ......**.......
+ 0x00000FC0, // ....******.....
+ 0x00000CC0, // ....**..**.....
+ 0x00001CE0, // ...***..***....
+ 0x00001860, // ...**....**....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 43
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00007FF8, // .************..
+ 0x00007FF8, // .************..
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 44
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000380, // ......***......
+ 0x00000380, // ......***......
+ 0x00000700, // .....***.......
+ 0x00000600, // .....**........
+ 0x00000C00, // ....**.........
+ 0x00000800, // ....*..........
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 45
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00007FF8, // .************..
+ 0x00007FF8, // .************..
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 46
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000700, // .....***.......
+ 0x00000700, // .....***.......
+ 0x00000700, // .....***.......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 47
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000018, // ...........**..
+ 0x00000018, // ...........**..
+ 0x00000030, // ..........**...
+ 0x00000030, // ..........**...
+ 0x00000060, // .........**....
+ 0x00000060, // .........**....
+ 0x000000C0, // ........**.....
+ 0x000000C0, // ........**.....
+ 0x00000180, // .......**......
+ 0x00000180, // .......**......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000600, // .....**........
+ 0x00000600, // .....**........
+ 0x00000C00, // ....**.........
+ 0x00000C00, // ....**.........
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00003000, // ..**...........
+ 0x00003000, // ..**...........
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 48
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000780, // .....****......
+ 0x00001FE0, // ...********....
+ 0x00001860, // ...**....**....
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00001860, // ...**....**....
+ 0x00001FE0, // ...********....
+ 0x00000780, // .....****......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 49
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000700, // .....***.......
+ 0x00003F00, // ..******.......
+ 0x00003F00, // ..******.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 50
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000FC0, // ....******.....
+ 0x00001FE0, // ...********....
+ 0x00003870, // ..***....***...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00000030, // ..........**...
+ 0x00000070, // .........***...
+ 0x000000E0, // ........***....
+ 0x000001C0, // .......***.....
+ 0x00000380, // ......***......
+ 0x00000700, // .....***.......
+ 0x00000E00, // ....***........
+ 0x00001C00, // ...***.........
+ 0x00003800, // ..***..........
+ 0x00007FF0, // .***********...
+ 0x00007FF0, // .***********...
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 51
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000FC0, // ....******.....
+ 0x00001FE0, // ...********....
+ 0x00003870, // ..***....***...
+ 0x00003030, // ..**......**...
+ 0x00000030, // ..........**...
+ 0x00000070, // .........***...
+ 0x000000E0, // ........***....
+ 0x000007C0, // .....*****.....
+ 0x000007E0, // .....******....
+ 0x00000070, // .........***...
+ 0x00000030, // ..........**...
+ 0x00000030, // ..........**...
+ 0x00006030, // .**.......**...
+ 0x00007070, // .***.....***...
+ 0x00003FE0, // ..*********....
+ 0x00001FC0, // ...*******.....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 52
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000001C0, // .......***.....
+ 0x000003C0, // ......****.....
+ 0x000007C0, // .....*****.....
+ 0x000006C0, // .....**.**.....
+ 0x00000CC0, // ....**..**.....
+ 0x00000CC0, // ....**..**.....
+ 0x000018C0, // ...**...**.....
+ 0x000018C0, // ...**...**.....
+ 0x000030C0, // ..**....**.....
+ 0x000030C0, // ..**....**.....
+ 0x00007FF0, // .***********...
+ 0x00007FF0, // .***********...
+ 0x000000C0, // ........**.....
+ 0x000000C0, // ........**.....
+ 0x000007F0, // .....*******...
+ 0x000007F0, // .....*******...
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 53
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00001FF0, // ...*********...
+ 0x00001FF0, // ...*********...
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00001BC0, // ...**.****.....
+ 0x00001FF0, // ...*********...
+ 0x00001C70, // ...***...***...
+ 0x00000038, // ..........***..
+ 0x00000018, // ...........**..
+ 0x00000018, // ...........**..
+ 0x00000018, // ...........**..
+ 0x00003038, // ..**......***..
+ 0x00003870, // ..***....***...
+ 0x00001FF0, // ...*********...
+ 0x00000FC0, // ....******.....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 54
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000001F0, // .......*****...
+ 0x000007F0, // .....*******...
+ 0x00000F00, // ....****.......
+ 0x00001C00, // ...***.........
+ 0x00001800, // ...**..........
+ 0x00003800, // ..***..........
+ 0x000037C0, // ..**.*****.....
+ 0x00003FE0, // ..*********....
+ 0x00003870, // ..***....***...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003830, // ..***.....**...
+ 0x00001C70, // ...***...***...
+ 0x00001FE0, // ...********....
+ 0x000007C0, // .....*****.....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 55
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00003030, // ..**......**...
+ 0x00000030, // ..........**...
+ 0x00000060, // .........**....
+ 0x00000060, // .........**....
+ 0x00000060, // .........**....
+ 0x000000C0, // ........**.....
+ 0x000000C0, // ........**.....
+ 0x000000C0, // ........**.....
+ 0x00000180, // .......**......
+ 0x00000180, // .......**......
+ 0x00000180, // .......**......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 56
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000780, // .....****......
+ 0x00001FE0, // ...********....
+ 0x00003870, // ..***....***...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00001860, // ...**....**....
+ 0x00000FC0, // ....******.....
+ 0x00001FE0, // ...********....
+ 0x00003870, // ..***....***...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003870, // ..***....***...
+ 0x00001FE0, // ...********....
+ 0x00000FC0, // ....******.....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 57
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000003C0, // ......****.....
+ 0x00000FF0, // ....********...
+ 0x00000C30, // ....**....**...
+ 0x00001818, // ...**......**..
+ 0x00001818, // ...**......**..
+ 0x00001818, // ...**......**..
+ 0x00001818, // ...**......**..
+ 0x00001838, // ...**.....***..
+ 0x00001C78, // ...***...****..
+ 0x00000FD8, // ....******.**..
+ 0x00000798, // .....****..**..
+ 0x00000018, // ...........**..
+ 0x00000030, // ..........**...
+ 0x00000070, // .........***...
+ 0x00001FE0, // ...********....
+ 0x00001F80, // ...******......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 58
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000700, // .....***.......
+ 0x00000700, // .....***.......
+ 0x00000700, // .....***.......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000700, // .....***.......
+ 0x00000700, // .....***.......
+ 0x00000700, // .....***.......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 59
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000700, // .....***.......
+ 0x00000700, // .....***.......
+ 0x00000700, // .....***.......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000700, // .....***.......
+ 0x00000700, // .....***.......
+ 0x00000E00, // ....***........
+ 0x00000C00, // ....**.........
+ 0x00001800, // ...**..........
+ 0x00001000, // ...*...........
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 60
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x0000001C, // ...........***.
+ 0x00000078, // .........****..
+ 0x000001E0, // .......****....
+ 0x00000780, // .....****......
+ 0x00001E00, // ...****........
+ 0x00007800, // .****..........
+ 0x00007800, // .****..........
+ 0x00001E00, // ...****........
+ 0x00000780, // .....****......
+ 0x000001E0, // .......****....
+ 0x00000078, // .........****..
+ 0x0000001C, // ...........***.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 61
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00007FF8, // .************..
+ 0x00007FF8, // .************..
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00007FF8, // .************..
+ 0x00007FF8, // .************..
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 62
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00007000, // .***...........
+ 0x00003C00, // ..****.........
+ 0x00000F00, // ....****.......
+ 0x000003C0, // ......****.....
+ 0x000000F0, // ........****...
+ 0x0000003C, // ..........****.
+ 0x0000003C, // ..........****.
+ 0x000000F0, // ........****...
+ 0x000003C0, // ......****.....
+ 0x00000F00, // ....****.......
+ 0x00003C00, // ..****.........
+ 0x00007000, // .***...........
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 63
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000FC0, // ....******.....
+ 0x00001FE0, // ...********....
+ 0x00001870, // ...**....***...
+ 0x00001830, // ...**.....**...
+ 0x00001830, // ...**.....**...
+ 0x00000030, // ..........**...
+ 0x00000070, // .........***...
+ 0x000001E0, // .......****....
+ 0x00000380, // ......***......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000000, // ...............
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 64
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000700, // .....***.......
+ 0x00001FC0, // ...*******.....
+ 0x000018C0, // ...**...**.....
+ 0x00003060, // ..**.....**....
+ 0x00003060, // ..**.....**....
+ 0x000031E0, // ..**...****....
+ 0x000033E0, // ..**..*****....
+ 0x00003760, // ..**.***.**....
+ 0x00003660, // ..**.**..**....
+ 0x00003660, // ..**.**..**....
+ 0x00003760, // ..**.***.**....
+ 0x000033F0, // ..**..******...
+ 0x000031F0, // ..**...*****...
+ 0x00003000, // ..**...........
+ 0x00003000, // ..**...........
+ 0x00001860, // ...**....**....
+ 0x00001FE0, // ...********....
+ 0x00000780, // .....****......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 65
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00003F00, // ..******.......
+ 0x00003F00, // ..******.......
+ 0x00000780, // .....****......
+ 0x00000780, // .....****......
+ 0x00000CC0, // ....**..**.....
+ 0x00000CC0, // ....**..**.....
+ 0x00001CE0, // ...***..***....
+ 0x00001860, // ...**....**....
+ 0x00001860, // ...**....**....
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00007038, // .***......***..
+ 0x00006018, // .**........**..
+ 0x0000FCFC, // ******..******.
+ 0x0000FCFC, // ******..******.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 66
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00007FE0, // .**********....
+ 0x00007FF0, // .***********...
+ 0x00001838, // ...**.....***..
+ 0x00001818, // ...**......**..
+ 0x00001818, // ...**......**..
+ 0x00001838, // ...**.....***..
+ 0x00001FF0, // ...*********...
+ 0x00001FF8, // ...**********..
+ 0x0000181C, // ...**......***.
+ 0x0000180C, // ...**.......**.
+ 0x0000180C, // ...**.......**.
+ 0x0000180C, // ...**.......**.
+ 0x0000181C, // ...**......***.
+ 0x00007FF8, // .************..
+ 0x00007FF0, // .***********...
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 67
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000007D8, // .....*****.**..
+ 0x00001FF8, // ...**********..
+ 0x00003838, // ..***.....***..
+ 0x00003018, // ..**.......**..
+ 0x00007018, // .***.......**..
+ 0x00006000, // .**............
+ 0x00006000, // .**............
+ 0x00006000, // .**............
+ 0x00006000, // .**............
+ 0x00006000, // .**............
+ 0x00007000, // .***...........
+ 0x00003000, // ..**...........
+ 0x00003818, // ..***......**..
+ 0x00001FF8, // ...**********..
+ 0x000007E0, // .....******....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 68
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x0000FFC0, // **********.....
+ 0x0000FFF0, // ************...
+ 0x00003038, // ..**......***..
+ 0x00003018, // ..**.......**..
+ 0x0000301C, // ..**.......***.
+ 0x0000300C, // ..**........**.
+ 0x0000300C, // ..**........**.
+ 0x0000300C, // ..**........**.
+ 0x0000300C, // ..**........**.
+ 0x0000300C, // ..**........**.
+ 0x0000300C, // ..**........**.
+ 0x00003018, // ..**.......**..
+ 0x00003038, // ..**......***..
+ 0x0000FFF0, // ************...
+ 0x0000FFE0, // ***********....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 69
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00007FF8, // .************..
+ 0x00007FF8, // .************..
+ 0x00001818, // ...**......**..
+ 0x00001818, // ...**......**..
+ 0x000018D8, // ...**...**.**..
+ 0x000018C0, // ...**...**.....
+ 0x00001FC0, // ...*******.....
+ 0x00001FC0, // ...*******.....
+ 0x000018C0, // ...**...**.....
+ 0x000018C0, // ...**...**.....
+ 0x0000180C, // ...**.......**.
+ 0x0000180C, // ...**.......**.
+ 0x0000180C, // ...**.......**.
+ 0x00007FFC, // .*************.
+ 0x00007FFC, // .*************.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 70
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00007FFC, // .*************.
+ 0x00007FFC, // .*************.
+ 0x0000180C, // ...**.......**.
+ 0x0000180C, // ...**.......**.
+ 0x000018CC, // ...**...**..**.
+ 0x000018C0, // ...**...**.....
+ 0x00001FC0, // ...*******.....
+ 0x00001FC0, // ...*******.....
+ 0x000018C0, // ...**...**.....
+ 0x000018C0, // ...**...**.....
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00007F80, // .********......
+ 0x00007F80, // .********......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 71
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000007EC, // .....******.**.
+ 0x00001FFC, // ...***********.
+ 0x0000381C, // ..***......***.
+ 0x0000300C, // ..**........**.
+ 0x0000700C, // .***........**.
+ 0x00006000, // .**............
+ 0x00006000, // .**............
+ 0x00006000, // .**............
+ 0x000060FC, // .**.....******.
+ 0x000060FC, // .**.....******.
+ 0x0000700C, // .***........**.
+ 0x0000300C, // ..**........**.
+ 0x0000381C, // ..***......***.
+ 0x00001FF8, // ...**********..
+ 0x000007E0, // .....******....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 72
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x0000FCFC, // ******..******.
+ 0x0000FCFC, // ******..******.
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x0000FCFC, // ******..******.
+ 0x0000FCFC, // ******..******.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 73
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 74
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000FFC, // ....**********.
+ 0x00000FFC, // ....**********.
+ 0x00000060, // .........**....
+ 0x00000060, // .........**....
+ 0x00000060, // .........**....
+ 0x00000060, // .........**....
+ 0x00000060, // .........**....
+ 0x00000060, // .........**....
+ 0x00000060, // .........**....
+ 0x00006060, // .**......**....
+ 0x00006060, // .**......**....
+ 0x00006060, // .**......**....
+ 0x000070E0, // .***....***....
+ 0x00003FC0, // ..********.....
+ 0x00001F80, // ...******......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 75
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x0000FCF8, // ******..*****..
+ 0x0000FCF8, // ******..*****..
+ 0x000030E0, // ..**....***....
+ 0x000031C0, // ..**...***.....
+ 0x00003380, // ..**..***......
+ 0x00003700, // ..**.***.......
+ 0x00003E00, // ..*****........
+ 0x00003F00, // ..******.......
+ 0x00003B80, // ..***.***......
+ 0x000031C0, // ..**...***.....
+ 0x000030E0, // ..**....***....
+ 0x00003060, // ..**.....**....
+ 0x00003070, // ..**.....***...
+ 0x0000FC3C, // ******....****.
+ 0x0000FC3C, // ******....****.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 76
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00007F80, // .********......
+ 0x00007F80, // .********......
+ 0x00000C00, // ....**.........
+ 0x00000C00, // ....**.........
+ 0x00000C00, // ....**.........
+ 0x00000C00, // ....**.........
+ 0x00000C00, // ....**.........
+ 0x00000C00, // ....**.........
+ 0x00000C00, // ....**.........
+ 0x00000C00, // ....**.........
+ 0x00000C18, // ....**.....**..
+ 0x00000C18, // ....**.....**..
+ 0x00000C18, // ....**.....**..
+ 0x00007FF8, // .************..
+ 0x00007FF8, // .************..
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 77
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x0000F03C, // ****......****.
+ 0x0000F03C, // ****......****.
+ 0x00007878, // .****....****..
+ 0x00007878, // .****....****..
+ 0x00006CD8, // .**.**..**.**..
+ 0x00006CD8, // .**.**..**.**..
+ 0x00006CD8, // .**.**..**.**..
+ 0x00006798, // .**..****..**..
+ 0x00006318, // .**...**...**..
+ 0x00006318, // .**...**...**..
+ 0x00006018, // .**........**..
+ 0x00006018, // .**........**..
+ 0x00006018, // .**........**..
+ 0x0000F87C, // *****....*****.
+ 0x0000F87C, // *****....*****.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 78
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x0000787C, // .****....*****.
+ 0x0000787C, // .****....*****.
+ 0x00003C18, // ..****.....**..
+ 0x00003C18, // ..****.....**..
+ 0x00003618, // ..**.**....**..
+ 0x00003618, // ..**.**....**..
+ 0x00003318, // ..**..**...**..
+ 0x00003318, // ..**..**...**..
+ 0x00003198, // ..**...**..**..
+ 0x00003198, // ..**...**..**..
+ 0x000030D8, // ..**....**.**..
+ 0x000030D8, // ..**....**.**..
+ 0x00003078, // ..**.....****..
+ 0x00007C78, // .*****...****..
+ 0x00007C38, // .*****....***..
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 79
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000007C0, // .....*****.....
+ 0x00001FF0, // ...*********...
+ 0x00003838, // ..***.....***..
+ 0x00003018, // ..**.......**..
+ 0x0000701C, // .***.......***.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000701C, // .***.......***.
+ 0x00003018, // ..**.......**..
+ 0x00003838, // ..***.....***..
+ 0x00001FF0, // ...*********...
+ 0x000007C0, // .....*****.....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 80
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00007FE0, // .**********....
+ 0x00007FF8, // .************..
+ 0x0000181C, // ...**......***.
+ 0x0000180C, // ...**.......**.
+ 0x0000180C, // ...**.......**.
+ 0x0000180C, // ...**.......**.
+ 0x0000180C, // ...**.......**.
+ 0x0000181C, // ...**......***.
+ 0x00001FF8, // ...**********..
+ 0x00001FE0, // ...********....
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00007F80, // .********......
+ 0x00007F80, // .********......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 81
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000007C0, // .....*****.....
+ 0x00001FF0, // ...*********...
+ 0x00003838, // ..***.....***..
+ 0x00003018, // ..**.......**..
+ 0x0000701C, // .***.......***.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000701C, // .***.......***.
+ 0x00003018, // ..**.......**..
+ 0x00003838, // ..***.....***..
+ 0x00001FF0, // ...*********...
+ 0x000007C0, // .....*****.....
+ 0x0000070C, // .....***....**.
+ 0x00001FFC, // ...***********.
+ 0x00001CF0, // ...***..****...
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 82
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x0000FF80, // *********......
+ 0x0000FFE0, // ***********....
+ 0x00003070, // ..**.....***...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003070, // ..**.....***...
+ 0x00003FE0, // ..*********....
+ 0x00003F80, // ..*******......
+ 0x000031C0, // ..**...***.....
+ 0x000030E0, // ..**....***....
+ 0x00003060, // ..**.....**....
+ 0x00003070, // ..**.....***...
+ 0x0000FC3C, // ******....****.
+ 0x0000FC3C, // ******....****.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 83
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000FD8, // ....******.**..
+ 0x00001FF8, // ...**********..
+ 0x00003838, // ..***.....***..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003800, // ..***..........
+ 0x00001F00, // ...*****.......
+ 0x00000FE0, // ....*******....
+ 0x000001F0, // .......*****...
+ 0x00000038, // ..........***..
+ 0x00006018, // .**........**..
+ 0x00006018, // .**........**..
+ 0x00007038, // .***......***..
+ 0x00007FF0, // .***********...
+ 0x00006FE0, // .**.*******....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 84
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00007FF8, // .************..
+ 0x00007FF8, // .************..
+ 0x00006318, // .**...**...**..
+ 0x00006318, // .**...**...**..
+ 0x00006318, // .**...**...**..
+ 0x00006318, // .**...**...**..
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00001FE0, // ...********....
+ 0x00001FE0, // ...********....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 85
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00007C7C, // .*****...*****.
+ 0x00007C7C, // .*****...*****.
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00001830, // ...**.....**...
+ 0x00001FF0, // ...*********...
+ 0x00000FE0, // ....*******....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 86
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x0000F87C, // *****....*****.
+ 0x0000F87C, // *****....*****.
+ 0x00006018, // .**........**..
+ 0x00006018, // .**........**..
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00001860, // ...**....**....
+ 0x00001860, // ...**....**....
+ 0x00001860, // ...**....**....
+ 0x00000CC0, // ....**..**.....
+ 0x00000CC0, // ....**..**.....
+ 0x00000780, // .....****......
+ 0x00000780, // .....****......
+ 0x00000780, // .....****......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 87
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x0000F87C, // *****....*****.
+ 0x0000F87C, // *****....*****.
+ 0x00006018, // .**........**..
+ 0x00006318, // .**...**...**..
+ 0x00006318, // .**...**...**..
+ 0x00006798, // .**..****..**..
+ 0x00006798, // .**..****..**..
+ 0x00006FD8, // .**.******.**..
+ 0x00006CD8, // .**.**..**.**..
+ 0x00006CD8, // .**.**..**.**..
+ 0x00003CF0, // ..****..****...
+ 0x00003870, // ..***....***...
+ 0x00003870, // ..***....***...
+ 0x00003870, // ..***....***...
+ 0x00003870, // ..***....***...
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 88
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x0000FCFC, // ******..******.
+ 0x0000FCFC, // ******..******.
+ 0x00007038, // .***......***..
+ 0x00003870, // ..***....***...
+ 0x00001CE0, // ...***..***....
+ 0x00000FC0, // ....******.....
+ 0x00000780, // .....****......
+ 0x00000300, // ......**.......
+ 0x00000780, // .....****......
+ 0x00000CC0, // ....**..**.....
+ 0x00001CE0, // ...***..***....
+ 0x00003870, // ..***....***...
+ 0x00007038, // .***......***..
+ 0x0000FCFC, // ******..******.
+ 0x0000FCFC, // ******..******.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 89
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x0000FCFC, // ******..******.
+ 0x0000FCFC, // ******..******.
+ 0x00007038, // .***......***..
+ 0x00003870, // ..***....***...
+ 0x00001860, // ...**....**....
+ 0x00000CC0, // ....**..**.....
+ 0x00000FC0, // ....******.....
+ 0x00000780, // .....****......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00001FE0, // ...********....
+ 0x00001FE0, // ...********....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 90
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00003FF8, // ..***********..
+ 0x00003FF8, // ..***********..
+ 0x00003038, // ..**......***..
+ 0x00003070, // ..**.....***...
+ 0x000030E0, // ..**....***....
+ 0x000000C0, // ........**.....
+ 0x000001C0, // .......***.....
+ 0x00000380, // ......***......
+ 0x00000700, // .....***.......
+ 0x00000600, // .....**........
+ 0x00000E18, // ....***....**..
+ 0x00001C18, // ...***.....**..
+ 0x00003818, // ..***......**..
+ 0x00003FF8, // ..***********..
+ 0x00003FF8, // ..***********..
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 91
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000003E0, // ......*****....
+ 0x000003E0, // ......*****....
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x000003E0, // ......*****....
+ 0x000003E0, // ......*****....
+ 0x00000000, // ...............
+ },
+ { // 92
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00003000, // ..**...........
+ 0x00003000, // ..**...........
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00000C00, // ....**.........
+ 0x00000C00, // ....**.........
+ 0x00000600, // .....**........
+ 0x00000600, // .....**........
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000180, // .......**......
+ 0x00000180, // .......**......
+ 0x000000C0, // ........**.....
+ 0x000000C0, // ........**.....
+ 0x00000060, // .........**....
+ 0x00000060, // .........**....
+ 0x00000030, // ..........**...
+ 0x00000030, // ..........**...
+ 0x00000018, // ...........**..
+ 0x00000018, // ...........**..
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 93
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00001F00, // ...*****.......
+ 0x00001F00, // ...*****.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00001F00, // ...*****.......
+ 0x00001F00, // ...*****.......
+ 0x00000000, // ...............
+ },
+ { // 94
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000780, // .....****......
+ 0x00000780, // .....****......
+ 0x00000CC0, // ....**..**.....
+ 0x00000CC0, // ....**..**.....
+ 0x00001860, // ...**....**....
+ 0x00001860, // ...**....**....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 95
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x0000FFFE, // ***************
+ 0x0000FFFE, // ***************
+ 0x00000000, // ...............
+ },
+ { // 96
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000700, // .....***.......
+ 0x00000700, // .....***.......
+ 0x00000380, // ......***......
+ 0x00000180, // .......**......
+ 0x000000C0, // ........**.....
+ 0x00000040, // .........*.....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 97
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00001F80, // ...******......
+ 0x00003FC0, // ..********.....
+ 0x000030E0, // ..**....***....
+ 0x00000060, // .........**....
+ 0x00000FE0, // ....*******....
+ 0x00003FE0, // ..*********....
+ 0x00007060, // .***.....**....
+ 0x00006060, // .**......**....
+ 0x000060E0, // .**.....***....
+ 0x00007FF8, // .************..
+ 0x00003F78, // ..******.****..
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 98
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00007800, // .****..........
+ 0x00007800, // .****..........
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00001BE0, // ...**.*****....
+ 0x00001FF8, // ...**********..
+ 0x00001E38, // ...****...***..
+ 0x00001C1C, // ...***.....***.
+ 0x0000180C, // ...**.......**.
+ 0x0000180C, // ...**.......**.
+ 0x0000180C, // ...**.......**.
+ 0x00001C1C, // ...***.....***.
+ 0x00001E38, // ...****...***..
+ 0x00007FF8, // .************..
+ 0x00007BE0, // .****.*****....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 99
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000FD8, // ....******.**..
+ 0x00003FF8, // ..***********..
+ 0x00003878, // ..***....****..
+ 0x00007038, // .***......***..
+ 0x00006018, // .**........**..
+ 0x00006000, // .**............
+ 0x00006000, // .**............
+ 0x00007000, // .***...........
+ 0x00003838, // ..***.....***..
+ 0x00003FF8, // ..***********..
+ 0x00000FE0, // ....*******....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 100
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000000F0, // ........****...
+ 0x000000F0, // ........****...
+ 0x00000030, // ..........**...
+ 0x00000030, // ..........**...
+ 0x00000030, // ..........**...
+ 0x00000FB0, // ....*****.**...
+ 0x00003FF0, // ..**********...
+ 0x000038F0, // ..***...****...
+ 0x00007070, // .***.....***...
+ 0x00006030, // .**.......**...
+ 0x00006030, // .**.......**...
+ 0x00006030, // .**.......**...
+ 0x00007070, // .***.....***...
+ 0x000038F0, // ..***...****...
+ 0x00003FFC, // ..************.
+ 0x00000FBC, // ....*****.****.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 101
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000FC0, // ....******.....
+ 0x00003FF0, // ..**********...
+ 0x00003870, // ..***....***...
+ 0x00007038, // .***......***..
+ 0x00006018, // .**........**..
+ 0x00007FF8, // .************..
+ 0x00007FF8, // .************..
+ 0x00007000, // .***...........
+ 0x00003838, // ..***.....***..
+ 0x00003FF8, // ..***********..
+ 0x00000FE0, // ....*******....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 102
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000001F8, // .......******..
+ 0x000003F8, // ......*******..
+ 0x00000700, // .....***.......
+ 0x00000600, // .....**........
+ 0x00000600, // .....**........
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00000600, // .....**........
+ 0x00000600, // .....**........
+ 0x00000600, // .....**........
+ 0x00000600, // .....**........
+ 0x00000600, // .....**........
+ 0x00000600, // .....**........
+ 0x00000600, // .....**........
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 103
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000FBC, // ....*****.****.
+ 0x00003FFC, // ..************.
+ 0x000038F0, // ..***...****...
+ 0x00007070, // .***.....***...
+ 0x00006030, // .**.......**...
+ 0x00006030, // .**.......**...
+ 0x00006030, // .**.......**...
+ 0x00007070, // .***.....***...
+ 0x000038F0, // ..***...****...
+ 0x00003FF0, // ..**********...
+ 0x00000FB0, // ....*****.**...
+ 0x00000030, // ..........**...
+ 0x00000030, // ..........**...
+ 0x00000070, // .........***...
+ 0x00001FE0, // ...********....
+ 0x00001FC0, // ...*******.....
+ },
+ { // 104
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x0000F000, // ****...........
+ 0x0000F000, // ****...........
+ 0x00003000, // ..**...........
+ 0x00003000, // ..**...........
+ 0x00003000, // ..**...........
+ 0x000037C0, // ..**.*****.....
+ 0x00003FE0, // ..*********....
+ 0x00003C70, // ..****...***...
+ 0x00003830, // ..***.....**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x0000FCFC, // ******..******.
+ 0x0000FCFC, // ******..******.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 105
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000700, // .....***.......
+ 0x00000700, // .....***.......
+ 0x00000700, // .....***.......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00001F00, // ...*****.......
+ 0x00001F00, // ...*****.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 106
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000380, // ......***......
+ 0x00000380, // ......***......
+ 0x00000380, // ......***......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00003FC0, // ..********.....
+ 0x00003FC0, // ..********.....
+ 0x000000C0, // ........**.....
+ 0x000000C0, // ........**.....
+ 0x000000C0, // ........**.....
+ 0x000000C0, // ........**.....
+ 0x000000C0, // ........**.....
+ 0x000000C0, // ........**.....
+ 0x000000C0, // ........**.....
+ 0x000000C0, // ........**.....
+ 0x000000C0, // ........**.....
+ 0x000000C0, // ........**.....
+ 0x000000C0, // ........**.....
+ 0x000001C0, // .......***.....
+ 0x00003F80, // ..*******......
+ 0x00003F00, // ..******.......
+ },
+ { // 107
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00007800, // .****..........
+ 0x00007800, // .****..........
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x000018F0, // ...**...****...
+ 0x000018F0, // ...**...****...
+ 0x000019C0, // ...**..***.....
+ 0x00001B80, // ...**.***......
+ 0x00001F00, // ...*****.......
+ 0x00001F00, // ...*****.......
+ 0x00001B80, // ...**.***......
+ 0x000019C0, // ...**..***.....
+ 0x000018E0, // ...**...***....
+ 0x000078FC, // .****...******.
+ 0x000078FC, // .****...******.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 108
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00001F00, // ...*****.......
+ 0x00001F00, // ...*****.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 109
+ 15, 26,
+ 0x00000000, // ................
+ 0x00000000, // ................
+ 0x00000000, // ................
+ 0x00000000, // ................
+ 0x00000000, // ................
+ 0x00000000, // ................
+ 0x00000000, // ................
+ 0x00000000, // ................
+ 0x00000000, // ................
+ 0x00000000, // ................
+ 0x0001DEF0, // ***.****.****...
+ 0x0001FFF8, // **************..
+ 0x00007398, // ..***..***..**..
+ 0x00006318, // ..**...**...**..
+ 0x00006318, // ..**...**...**..
+ 0x00006318, // ..**...**...**..
+ 0x00006318, // ..**...**...**..
+ 0x00006318, // ..**...**...**..
+ 0x00006318, // ..**...**...**..
+ 0x0001F3DE, // *****..****.****
+ 0x0001F3DE, // *****..****.****
+ 0x00000000, // ................
+ 0x00000000, // ................
+ 0x00000000, // ................
+ 0x00000000, // ................
+ 0x00000000, // ................
+ },
+ { // 110
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x0000F3C0, // ****..****.....
+ 0x0000F7E0, // ****.******....
+ 0x00003C70, // ..****...***...
+ 0x00003830, // ..***.....**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x0000FCFC, // ******..******.
+ 0x0000FCFC, // ******..******.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 111
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000FC0, // ....******.....
+ 0x00003FF0, // ..**********...
+ 0x00003870, // ..***....***...
+ 0x00007038, // .***......***..
+ 0x00006018, // .**........**..
+ 0x00006018, // .**........**..
+ 0x00006018, // .**........**..
+ 0x00007038, // .***......***..
+ 0x00003870, // ..***....***...
+ 0x00003FF0, // ..**********...
+ 0x00000FC0, // ....******.....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 112
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x0000F7C0, // ****.*****.....
+ 0x0000FFF0, // ************...
+ 0x00003C70, // ..****...***...
+ 0x00003838, // ..***.....***..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003838, // ..***.....***..
+ 0x00003C70, // ..****...***...
+ 0x00003FF0, // ..**********...
+ 0x000037C0, // ..**.*****.....
+ 0x00003000, // ..**...........
+ 0x00003000, // ..**...........
+ 0x00003000, // ..**...........
+ 0x0000FE00, // *******........
+ 0x0000FE00, // *******........
+ },
+ { // 113
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000FBC, // ....*****.****.
+ 0x00003FFC, // ..************.
+ 0x000038F0, // ..***...****...
+ 0x00007070, // .***.....***...
+ 0x00006030, // .**.......**...
+ 0x00006030, // .**.......**...
+ 0x00006030, // .**.......**...
+ 0x00007070, // .***.....***...
+ 0x000038F0, // ..***...****...
+ 0x00003FF0, // ..**********...
+ 0x00000FB0, // ....*****.**...
+ 0x00000030, // ..........**...
+ 0x00000030, // ..........**...
+ 0x00000030, // ..........**...
+ 0x000001FC, // .......*******.
+ 0x000001FC, // .......*******.
+ },
+ { // 114
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00003CF0, // ..****..****...
+ 0x00003FF8, // ..***********..
+ 0x00000F18, // ....****...**..
+ 0x00000E00, // ....***........
+ 0x00000C00, // ....**.........
+ 0x00000C00, // ....**.........
+ 0x00000C00, // ....**.........
+ 0x00000C00, // ....**.........
+ 0x00000C00, // ....**.........
+ 0x00007FE0, // .**********....
+ 0x00007FE0, // .**********....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 115
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000FB0, // ....*****.**...
+ 0x00001FF0, // ...*********...
+ 0x00003870, // ..***....***...
+ 0x00003830, // ..***.....**...
+ 0x00001F00, // ...*****.......
+ 0x000007C0, // .....*****.....
+ 0x000001F0, // .......*****...
+ 0x00003038, // ..**......***..
+ 0x00003838, // ..***.....***..
+ 0x00003FF0, // ..**********...
+ 0x000037E0, // ..**.******....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 116
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00007FE0, // .**********....
+ 0x00007FE0, // .**********....
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00001C70, // ...***...***...
+ 0x00000FF0, // ....********...
+ 0x000007C0, // .....*****.....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 117
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x0000F0F0, // ****....****...
+ 0x0000F0F0, // ****....****...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003870, // ..***....***...
+ 0x00001FFC, // ...***********.
+ 0x00000FBC, // ....*****.****.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 118
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x0000FCFC, // ******..******.
+ 0x0000FCFC, // ******..******.
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00001860, // ...**....**....
+ 0x00001860, // ...**....**....
+ 0x00000CC0, // ....**..**.....
+ 0x00000CC0, // ....**..**.....
+ 0x00000780, // .....****......
+ 0x00000780, // .....****......
+ 0x00000300, // ......**.......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 119
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x0000F87C, // *****....*****.
+ 0x0000F87C, // *****....*****.
+ 0x00006318, // .**...**...**..
+ 0x00006318, // .**...**...**..
+ 0x00003330, // ..**..**..**...
+ 0x000037B0, // ..**.****.**...
+ 0x000037B0, // ..**.****.**...
+ 0x00003CF0, // ..****..****...
+ 0x00001CE0, // ...***..***....
+ 0x00001860, // ...**....**....
+ 0x00001860, // ...**....**....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 120
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00007CF8, // .*****..*****..
+ 0x00007CF8, // .*****..*****..
+ 0x00001860, // ...**....**....
+ 0x00000CC0, // ....**..**.....
+ 0x00000780, // .....****......
+ 0x00000300, // ......**.......
+ 0x00000780, // .....****......
+ 0x00000CC0, // ....**..**.....
+ 0x00001860, // ...**....**....
+ 0x00007CF8, // .*****..*****..
+ 0x00007CF8, // .*****..*****..
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 121
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00007CF8, // .*****..*****..
+ 0x00007CF8, // .*****..*****..
+ 0x00003030, // ..**......**...
+ 0x00003870, // ..***....***...
+ 0x00001860, // ...**....**....
+ 0x00001CE0, // ...***..***....
+ 0x00000CC0, // ....**..**.....
+ 0x00000DC0, // ....**.***.....
+ 0x00000780, // .....****......
+ 0x00000780, // .....****......
+ 0x00000300, // ......**.......
+ 0x00000700, // .....***.......
+ 0x00000600, // .....**........
+ 0x00000E00, // ....***........
+ 0x00007F00, // .*******.......
+ 0x00007F00, // .*******.......
+ },
+ { // 122
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x000030E0, // ..**....***....
+ 0x000031C0, // ..**...***.....
+ 0x00000380, // ......***......
+ 0x00000700, // .....***.......
+ 0x00000E00, // ....***........
+ 0x00001C30, // ...***....**...
+ 0x00003830, // ..***.....**...
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 123
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000000E0, // ........***....
+ 0x00000180, // .......**......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000700, // .....***.......
+ 0x00000E00, // ....***........
+ 0x00000700, // .....***.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000180, // .......**......
+ 0x000000E0, // ........***....
+ 0x00000000, // ...............
+ },
+ { // 124
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 125
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00001C00, // ...***.........
+ 0x00000600, // .....**........
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000380, // ......***......
+ 0x000001C0, // .......***.....
+ 0x00000380, // ......***......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000600, // .....**........
+ 0x00001C00, // ...***.........
+ 0x00000000, // ...............
+ },
+ { // 126
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00001E18, // ...****....**..
+ 0x00003F38, // ..******..***..
+ 0x000073F0, // .***..******...
+ 0x000061E0, // .**....****....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 127
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 128
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 129
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 130
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 131
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 132
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 133
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 134
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 135
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 136
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 137
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 138
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 139
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 140
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 141
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 142
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 143
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 144
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 145
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 146
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 147
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 148
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 149
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 150
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 151
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 152
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 153
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 154
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 155
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 156
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 157
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 158
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 159
+ 0, 26,
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ 0x00000000, //
+ },
+ { // 160
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 161
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000600, // .....**........
+ 0x00000600, // .....**........
+ 0x00000600, // .....**........
+ 0x00000000, // ...............
+ 0x00000600, // .....**........
+ 0x00000600, // .....**........
+ 0x00000600, // .....**........
+ 0x00000600, // .....**........
+ 0x00000600, // .....**........
+ 0x00000F00, // ....****.......
+ 0x00000F00, // ....****.......
+ 0x00000F00, // ....****.......
+ 0x00000F00, // ....****.......
+ 0x00000F00, // ....****.......
+ 0x00000F00, // ....****.......
+ 0x00000600, // .....**........
+ },
+ { // 162
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000F60, // ....****.**....
+ 0x00001FE0, // ...********....
+ 0x000038E0, // ..***...***....
+ 0x00003060, // ..**.....**....
+ 0x00003000, // ..**...........
+ 0x00003000, // ..**...........
+ 0x00003000, // ..**...........
+ 0x00003860, // ..***....**....
+ 0x00001FE0, // ...********....
+ 0x00000FC0, // ....******.....
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 163
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000007C0, // .....*****.....
+ 0x00000FE0, // ....*******....
+ 0x00001C60, // ...***...**....
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00007F80, // .********......
+ 0x00007F80, // .********......
+ 0x00000C00, // ....**.........
+ 0x00000C00, // ....**.........
+ 0x00001C00, // ...***.........
+ 0x00003818, // ..***......**..
+ 0x00007FF8, // .************..
+ 0x00007FF0, // .***********...
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 164
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00003030, // ..**......**...
+ 0x00003FF0, // ..**********...
+ 0x00001FE0, // ...********....
+ 0x00003870, // ..***....***...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003870, // ..***....***...
+ 0x00001FE0, // ...********....
+ 0x00003FF0, // ..**********...
+ 0x00003030, // ..**......**...
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 165
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00007CF8, // .*****..*****..
+ 0x00007CF8, // .*****..*****..
+ 0x00003870, // ..***....***...
+ 0x00001860, // ...**....**....
+ 0x00001CE0, // ...***..***....
+ 0x00000CC0, // ....**..**.....
+ 0x00000780, // .....****......
+ 0x00000780, // .....****......
+ 0x00001FE0, // ...********....
+ 0x00000300, // ......**.......
+ 0x00001FE0, // ...********....
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00001FE0, // ...********....
+ 0x00001FE0, // ...********....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 166
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 167
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000007F0, // .....*******...
+ 0x00000FF0, // ....********...
+ 0x00001C30, // ...***....**...
+ 0x00001830, // ...**.....**...
+ 0x00001C00, // ...***.........
+ 0x00003F00, // ..******.......
+ 0x000067C0, // .**..*****.....
+ 0x000061F0, // .**....*****...
+ 0x00007878, // .****....****..
+ 0x00003E18, // ..*****....**..
+ 0x00000F98, // ....*****..**..
+ 0x000003F8, // ......*******..
+ 0x000000F0, // ........****...
+ 0x00000060, // .........**....
+ 0x00003060, // ..**.....**....
+ 0x000030E0, // ..**....***....
+ 0x00003FC0, // ..********.....
+ 0x00003F80, // ..*******......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 168
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000018C0, // ...**...**.....
+ 0x000018C0, // ...**...**.....
+ 0x000018C0, // ...**...**.....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 169
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000780, // .....****......
+ 0x00001FE0, // ...********....
+ 0x00003870, // ..***....***...
+ 0x00006798, // .**..****..**..
+ 0x00006FD8, // .**.******.**..
+ 0x0000DCCC, // **.***..**..**.
+ 0x0000D80C, // **.**.......**.
+ 0x0000D80C, // **.**.......**.
+ 0x0000DCCC, // **.***..**..**.
+ 0x00006FD8, // .**.******.**..
+ 0x00006798, // .**..****..**..
+ 0x00003870, // ..***....***...
+ 0x00001FE0, // ...********....
+ 0x00000780, // .....****......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 170
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000780, // .....****......
+ 0x00000CC0, // ....**..**.....
+ 0x000000C0, // ........**.....
+ 0x00000FC0, // ....******.....
+ 0x000018C0, // ...**...**.....
+ 0x000018C0, // ...**...**.....
+ 0x000019E0, // ...**..****....
+ 0x00000F60, // ....****.**....
+ 0x00000000, // ...............
+ 0x00001FE0, // ...********....
+ 0x00001FE0, // ...********....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 171
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x0000071C, // .....***...***.
+ 0x00000E38, // ....***...***..
+ 0x00001C70, // ...***...***...
+ 0x000038E0, // ..***...***....
+ 0x000071C0, // .***...***.....
+ 0x000038E0, // ..***...***....
+ 0x00001C70, // ...***...***...
+ 0x00000E38, // ....***...***..
+ 0x0000071C, // .....***...***.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 172
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00007FF8, // .************..
+ 0x00007FF8, // .************..
+ 0x00000018, // ...........**..
+ 0x00000018, // ...........**..
+ 0x00000018, // ...........**..
+ 0x00000018, // ...........**..
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 173
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00003FF8, // ..***********..
+ 0x00003FF8, // ..***********..
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 174
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000780, // .....****......
+ 0x00001FE0, // ...********....
+ 0x00003870, // ..***....***...
+ 0x00006F98, // .**.*****..**..
+ 0x00006FD8, // .**.******.**..
+ 0x0000CCCC, // **..**..**..**.
+ 0x0000CCCC, // **..**..**..**.
+ 0x0000CF8C, // **..*****...**.
+ 0x0000CD8C, // **..**.**...**.
+ 0x00006CD8, // .**.**..**.**..
+ 0x00006CD8, // .**.**..**.**..
+ 0x00003870, // ..***....***...
+ 0x00001FE0, // ...********....
+ 0x00000780, // .....****......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 175
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00001FC0, // ...*******.....
+ 0x00001FC0, // ...*******.....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 176
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000780, // .....****......
+ 0x00000CC0, // ....**..**.....
+ 0x00001860, // ...**....**....
+ 0x00001860, // ...**....**....
+ 0x00001860, // ...**....**....
+ 0x00000CC0, // ....**..**.....
+ 0x00000780, // .....****......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 177
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00007FF8, // .************..
+ 0x00007FF8, // .************..
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00007FF8, // .************..
+ 0x00007FF8, // .************..
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 178
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000007C0, // .....*****.....
+ 0x00000C60, // ....**...**....
+ 0x00000C60, // ....**...**....
+ 0x000000C0, // ........**.....
+ 0x00000180, // .......**......
+ 0x00000300, // ......**.......
+ 0x00000600, // .....**........
+ 0x00000C60, // ....**...**....
+ 0x00000FE0, // ....*******....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 179
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000007C0, // .....*****.....
+ 0x00000C60, // ....**...**....
+ 0x00000C60, // ....**...**....
+ 0x000000C0, // ........**.....
+ 0x000003C0, // ......****.....
+ 0x00000060, // .........**....
+ 0x00000C60, // ....**...**....
+ 0x00000C60, // ....**...**....
+ 0x000007C0, // .....*****.....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 180
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000001C0, // .......***.....
+ 0x00000380, // ......***......
+ 0x00000700, // .....***.......
+ 0x00000E00, // ....***........
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 181
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x0000F0F0, // ****....****...
+ 0x0000F0F0, // ****....****...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003870, // ..***....***...
+ 0x00003FFC, // ..************.
+ 0x00003FBC, // ..*******.****.
+ 0x00003000, // ..**...........
+ 0x00003000, // ..**...........
+ 0x00003000, // ..**...........
+ 0x00003000, // ..**...........
+ 0x00003000, // ..**...........
+ },
+ { // 182
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000FF8, // ....*********..
+ 0x00003FF8, // ..***********..
+ 0x00007360, // .***..**.**....
+ 0x00007360, // .***..**.**....
+ 0x00007360, // .***..**.**....
+ 0x00007360, // .***..**.**....
+ 0x00007360, // .***..**.**....
+ 0x00003F60, // ..******.**....
+ 0x00000F60, // ....****.**....
+ 0x00000360, // ......**.**....
+ 0x00000360, // ......**.**....
+ 0x00000360, // ......**.**....
+ 0x00000360, // ......**.**....
+ 0x00000360, // ......**.**....
+ 0x00000360, // ......**.**....
+ 0x00000360, // ......**.**....
+ 0x00001F78, // ...*****.****..
+ 0x00001F78, // ...*****.****..
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 183
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000700, // .....***.......
+ 0x00000700, // .....***.......
+ 0x00000700, // .....***.......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 184
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000780, // .....****......
+ 0x00000180, // .......**......
+ 0x00000F80, // ....*****......
+ 0x00000700, // .....***.......
+ },
+ { // 185
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000300, // ......**.......
+ 0x00001F00, // ...*****.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00001FE0, // ...********....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 186
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000780, // .....****......
+ 0x00000FC0, // ....******.....
+ 0x00001860, // ...**....**....
+ 0x00001860, // ...**....**....
+ 0x00001860, // ...**....**....
+ 0x00001860, // ...**....**....
+ 0x00000FC0, // ....******.....
+ 0x00000780, // .....****......
+ 0x00000000, // ...............
+ 0x00001FE0, // ...********....
+ 0x00001FE0, // ...********....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 187
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000071C0, // .***...***.....
+ 0x000038E0, // ..***...***....
+ 0x00001C70, // ...***...***...
+ 0x00000E38, // ....***...***..
+ 0x0000071C, // .....***...***.
+ 0x00000E38, // ....***...***..
+ 0x00001C70, // ...***...***...
+ 0x000038E0, // ..***...***....
+ 0x000071C0, // .***...***.....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 188
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00003000, // ...**...........
+ 0x0001F002, // *****..........*
+ 0x00003006, // ...**.........**
+ 0x0000300C, // ...**........**.
+ 0x00003018, // ...**.......**..
+ 0x00003030, // ...**......**...
+ 0x00003060, // ...**.....**....
+ 0x000030C8, // ...**....**..*..
+ 0x0001FF98, // **********..**..
+ 0x00000338, // .......**..***..
+ 0x00000658, // ......**..*.**..
+ 0x00000C98, // .....**..*..**..
+ 0x00001918, // ....**..*...**..
+ 0x000031FC, // ...**...*******.
+ 0x00006018, // ..**........**..
+ 0x0000403C, // ..*........****.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 189
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00003000, // ...**...........
+ 0x0001F002, // *****..........*
+ 0x00003006, // ...**.........**
+ 0x0000300C, // ...**........**.
+ 0x00003018, // ...**.......**..
+ 0x00003030, // ...**......**...
+ 0x00003060, // ...**.....**....
+ 0x000030FC, // ...**....******.
+ 0x0001FFE6, // ************..**
+ 0x00000346, // .......**.*...**
+ 0x0000060C, // ......**.....**.
+ 0x00000C18, // .....**.....**..
+ 0x00001830, // ....**.....**...
+ 0x00003060, // ...**.....**....
+ 0x000060C6, // ..**.....**...**
+ 0x000040FE, // ..*......*******
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 190
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00007C00, // .*****.........
+ 0x0000C602, // **...**.......*
+ 0x0000C606, // **...**......**
+ 0x00000C0C, // ....**......**.
+ 0x00003C18, // ..****.....**..
+ 0x00000630, // .....**...**...
+ 0x0000C660, // **...**..**....
+ 0x0000C6C8, // **...**.**..*..
+ 0x00007D98, // .*****.**..**..
+ 0x00000338, // ......**..***..
+ 0x00000658, // .....**..*.**..
+ 0x00000C98, // ....**..*..**..
+ 0x00001918, // ...**..*...**..
+ 0x000031FC, // ..**...*******.
+ 0x00006018, // .**........**..
+ 0x0000403C, // .*........****.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 191
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000000, // ...............
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000700, // .....***.......
+ 0x00001E00, // ...****........
+ 0x00003800, // ..***..........
+ 0x00003000, // ..**...........
+ 0x00003060, // ..**.....**....
+ 0x00003060, // ..**.....**....
+ 0x00003860, // ..***....**....
+ 0x00001FE0, // ...********....
+ 0x00000FC0, // ....******.....
+ 0x00000000, // ...............
+ },
+ { // 192
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00003800, // ..***..........
+ 0x00001C00, // ...***.........
+ 0x00000E00, // ....***........
+ 0x00000700, // .....***.......
+ 0x00000000, // ...............
+ 0x00003F00, // ..******.......
+ 0x00003F00, // ..******.......
+ 0x00000780, // .....****......
+ 0x00000780, // .....****......
+ 0x00000CC0, // ....**..**.....
+ 0x00000CC0, // ....**..**.....
+ 0x00001CE0, // ...***..***....
+ 0x00001860, // ...**....**....
+ 0x00001860, // ...**....**....
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00007038, // .***......***..
+ 0x00006018, // .**........**..
+ 0x0000FCFC, // ******..******.
+ 0x0000FCFC, // ******..******.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 193
+ 15, 26,
+ 0x00000000, // ...............
+ 0x000000E0, // ........***....
+ 0x000001C0, // .......***.....
+ 0x00000380, // ......***......
+ 0x00000700, // .....***.......
+ 0x00000000, // ...............
+ 0x00003F00, // ..******.......
+ 0x00003F00, // ..******.......
+ 0x00000780, // .....****......
+ 0x00000780, // .....****......
+ 0x00000CC0, // ....**..**.....
+ 0x00000CC0, // ....**..**.....
+ 0x00001CE0, // ...***..***....
+ 0x00001860, // ...**....**....
+ 0x00001860, // ...**....**....
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00007038, // .***......***..
+ 0x00006018, // .**........**..
+ 0x0000FCFC, // ******..******.
+ 0x0000FCFC, // ******..******.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 194
+ 15, 26,
+ 0x00000600, // .....**........
+ 0x00000F00, // ....****.......
+ 0x00001F80, // ...******......
+ 0x000039C0, // ..***..***.....
+ 0x000070E0, // .***....***....
+ 0x00000000, // ...............
+ 0x00003F00, // ..******.......
+ 0x00003F00, // ..******.......
+ 0x00000780, // .....****......
+ 0x00000780, // .....****......
+ 0x00000CC0, // ....**..**.....
+ 0x00000CC0, // ....**..**.....
+ 0x00001CE0, // ...***..***....
+ 0x00001860, // ...**....**....
+ 0x00001860, // ...**....**....
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00007038, // .***......***..
+ 0x00006018, // .**........**..
+ 0x0000FCFC, // ******..******.
+ 0x0000FCFC, // ******..******.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 195
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000E60, // ....***..**....
+ 0x00001FC0, // ...*******.....
+ 0x00003380, // ..**..***......
+ 0x00000000, // ...............
+ 0x00003F00, // ..******.......
+ 0x00003F00, // ..******.......
+ 0x00000780, // .....****......
+ 0x00000780, // .....****......
+ 0x00000CC0, // ....**..**.....
+ 0x00000CC0, // ....**..**.....
+ 0x00001CE0, // ...***..***....
+ 0x00001860, // ...**....**....
+ 0x00001860, // ...**....**....
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00007038, // .***......***..
+ 0x00006018, // .**........**..
+ 0x0000FCFC, // ******..******.
+ 0x0000FCFC, // ******..******.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 196
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000018C0, // ...**...**.....
+ 0x000018C0, // ...**...**.....
+ 0x000018C0, // ...**...**.....
+ 0x00000000, // ...............
+ 0x00003F00, // ..******.......
+ 0x00003F00, // ..******.......
+ 0x00000780, // .....****......
+ 0x00000780, // .....****......
+ 0x00000CC0, // ....**..**.....
+ 0x00000CC0, // ....**..**.....
+ 0x00001CE0, // ...***..***....
+ 0x00001860, // ...**....**....
+ 0x00001860, // ...**....**....
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00007038, // .***......***..
+ 0x00006018, // .**........**..
+ 0x0000FCFC, // ******..******.
+ 0x0000FCFC, // ******..******.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 197
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000700, // .....***.......
+ 0x00000D80, // ....**.**......
+ 0x00000880, // ....*...*......
+ 0x00000D80, // ....**.**......
+ 0x00000700, // .....***.......
+ 0x00003F00, // ..******.......
+ 0x00003F00, // ..******.......
+ 0x00000780, // .....****......
+ 0x00000780, // .....****......
+ 0x00000CC0, // ....**..**.....
+ 0x00000CC0, // ....**..**.....
+ 0x00001CE0, // ...***..***....
+ 0x00001860, // ...**....**....
+ 0x00001860, // ...**....**....
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00007038, // .***......***..
+ 0x00006018, // .**........**..
+ 0x0000FCFC, // ******..******.
+ 0x0000FCFC, // ******..******.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 198
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000FFE, // ....***********
+ 0x00000FFE, // ....***********
+ 0x00000386, // ......***....**
+ 0x00000786, // .....****....**
+ 0x00000780, // .....****......
+ 0x00000D98, // ....**.**..**..
+ 0x000009F8, // ....*..******..
+ 0x000019F8, // ...**..******..
+ 0x00001F98, // ...******..**..
+ 0x00003F80, // ..*******......
+ 0x00003180, // ..**...**......
+ 0x00006186, // .**....**....**
+ 0x00006186, // .**....**....**
+ 0x0000F7FE, // ****.**********
+ 0x0000F7FE, // ****.**********
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 199
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000007D8, // .....*****.**..
+ 0x00001FF8, // ...**********..
+ 0x00003838, // ..***.....***..
+ 0x00003018, // ..**.......**..
+ 0x00007018, // .***.......**..
+ 0x00006000, // .**............
+ 0x00006000, // .**............
+ 0x00006000, // .**............
+ 0x00006000, // .**............
+ 0x00006000, // .**............
+ 0x00007000, // .***...........
+ 0x00003008, // ..**........*..
+ 0x00003818, // ..***......**..
+ 0x00001FF0, // ...*********...
+ 0x000007E0, // .....******....
+ 0x00000300, // ......**.......
+ 0x00000780, // .....****......
+ 0x00000180, // .......**......
+ 0x00000F80, // ....*****......
+ 0x00000700, // .....***.......
+ },
+ { // 200
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00001C00, // ...***.........
+ 0x00000E00, // ....***........
+ 0x00000700, // .....***.......
+ 0x00000380, // ......***......
+ 0x00000000, // ...............
+ 0x00007FF8, // .************..
+ 0x00007FF8, // .************..
+ 0x00001818, // ...**......**..
+ 0x00001818, // ...**......**..
+ 0x000018D8, // ...**...**.**..
+ 0x000018C0, // ...**...**.....
+ 0x00001FC0, // ...*******.....
+ 0x00001FC0, // ...*******.....
+ 0x000018C0, // ...**...**.....
+ 0x000018C0, // ...**...**.....
+ 0x0000180C, // ...**.......**.
+ 0x0000180C, // ...**.......**.
+ 0x0000180C, // ...**.......**.
+ 0x00007FFC, // .*************.
+ 0x00007FFC, // .*************.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 201
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000070, // .........***...
+ 0x000000E0, // ........***....
+ 0x000001C0, // .......***.....
+ 0x00000380, // ......***......
+ 0x00000000, // ...............
+ 0x00007FF8, // .************..
+ 0x00007FF8, // .************..
+ 0x00001818, // ...**......**..
+ 0x00001818, // ...**......**..
+ 0x000018D8, // ...**...**.**..
+ 0x000018C0, // ...**...**.....
+ 0x00001FC0, // ...*******.....
+ 0x00001FC0, // ...*******.....
+ 0x000018C0, // ...**...**.....
+ 0x000018C0, // ...**...**.....
+ 0x0000180C, // ...**.......**.
+ 0x0000180C, // ...**.......**.
+ 0x0000180C, // ...**.......**.
+ 0x00007FFC, // .*************.
+ 0x00007FFC, // .*************.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 202
+ 15, 26,
+ 0x00000180, // .......**......
+ 0x000003C0, // ......****.....
+ 0x000007E0, // .....******....
+ 0x00000E70, // ....***..***...
+ 0x00001C38, // ...***....***..
+ 0x00000000, // ...............
+ 0x00007FF8, // .************..
+ 0x00007FF8, // .************..
+ 0x00001818, // ...**......**..
+ 0x00001818, // ...**......**..
+ 0x000018D8, // ...**...**.**..
+ 0x000018C0, // ...**...**.....
+ 0x00001FC0, // ...*******.....
+ 0x00001FC0, // ...*******.....
+ 0x000018C0, // ...**...**.....
+ 0x000018C0, // ...**...**.....
+ 0x0000180C, // ...**.......**.
+ 0x0000180C, // ...**.......**.
+ 0x0000180C, // ...**.......**.
+ 0x00007FFC, // .*************.
+ 0x00007FFC, // .*************.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 203
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000C60, // ....**...**....
+ 0x00000C60, // ....**...**....
+ 0x00000C60, // ....**...**....
+ 0x00000000, // ...............
+ 0x00007FF8, // .************..
+ 0x00007FF8, // .************..
+ 0x00001818, // ...**......**..
+ 0x00001818, // ...**......**..
+ 0x000018D8, // ...**...**.**..
+ 0x000018C0, // ...**...**.....
+ 0x00001FC0, // ...*******.....
+ 0x00001FC0, // ...*******.....
+ 0x000018C0, // ...**...**.....
+ 0x000018C0, // ...**...**.....
+ 0x0000180C, // ...**.......**.
+ 0x0000180C, // ...**.......**.
+ 0x0000180C, // ...**.......**.
+ 0x00007FFC, // .*************.
+ 0x00007FFC, // .*************.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 204
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00001C00, // ...***.........
+ 0x00000E00, // ....***........
+ 0x00000700, // .....***.......
+ 0x00000380, // ......***......
+ 0x00000000, // ...............
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 205
+ 15, 26,
+ 0x00000000, // ...............
+ 0x000000E0, // ........***....
+ 0x000001C0, // .......***.....
+ 0x00000380, // ......***......
+ 0x00000700, // .....***.......
+ 0x00000000, // ...............
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 206
+ 15, 26,
+ 0x00000300, // ......**.......
+ 0x00000780, // .....****......
+ 0x00000FC0, // ....******.....
+ 0x00001CE0, // ...***..***....
+ 0x00003870, // ..***....***...
+ 0x00000000, // ...............
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 207
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000CC0, // ....**..**.....
+ 0x00000CC0, // ....**..**.....
+ 0x00000CC0, // ....**..**.....
+ 0x00000000, // ...............
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 208
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x0000FFC0, // **********.....
+ 0x0000FFF0, // ************...
+ 0x00003038, // ..**......***..
+ 0x00003018, // ..**.......**..
+ 0x0000301C, // ..**.......***.
+ 0x0000300C, // ..**........**.
+ 0x0000FE0C, // *******.....**.
+ 0x0000FE0C, // *******.....**.
+ 0x0000300C, // ..**........**.
+ 0x0000300C, // ..**........**.
+ 0x0000300C, // ..**........**.
+ 0x00003018, // ..**.......**..
+ 0x00003038, // ..**......***..
+ 0x0000FFF0, // ************...
+ 0x0000FFE0, // ***********....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 209
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000730, // .....***..**...
+ 0x00000FE0, // ....*******....
+ 0x000019C0, // ...**..***.....
+ 0x00000000, // ...............
+ 0x0000787C, // .****....*****.
+ 0x0000787C, // .****....*****.
+ 0x00003C18, // ..****.....**..
+ 0x00003C18, // ..****.....**..
+ 0x00003618, // ..**.**....**..
+ 0x00003618, // ..**.**....**..
+ 0x00003318, // ..**..**...**..
+ 0x00003318, // ..**..**...**..
+ 0x00003198, // ..**...**..**..
+ 0x00003198, // ..**...**..**..
+ 0x000030D8, // ..**....**.**..
+ 0x000030D8, // ..**....**.**..
+ 0x00003078, // ..**.....****..
+ 0x00007C78, // .*****...****..
+ 0x00007C38, // .*****....***..
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 210
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000E00, // ....***........
+ 0x00000700, // .....***.......
+ 0x00000380, // ......***......
+ 0x000001C0, // .......***.....
+ 0x00000000, // ...............
+ 0x000007C0, // .....*****.....
+ 0x00001FF0, // ...*********...
+ 0x00003838, // ..***.....***..
+ 0x00003018, // ..**.......**..
+ 0x0000701C, // .***.......***.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000701C, // .***.......***.
+ 0x00003018, // ..**.......**..
+ 0x00003838, // ..***.....***..
+ 0x00001FF0, // ...*********...
+ 0x000007C0, // .....*****.....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 211
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000070, // .........***...
+ 0x000000E0, // ........***....
+ 0x000001C0, // .......***.....
+ 0x00000380, // ......***......
+ 0x00000000, // ...............
+ 0x000007C0, // .....*****.....
+ 0x00001FF0, // ...*********...
+ 0x00003838, // ..***.....***..
+ 0x00003018, // ..**.......**..
+ 0x0000701C, // .***.......***.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000701C, // .***.......***.
+ 0x00003018, // ..**.......**..
+ 0x00003838, // ..***.....***..
+ 0x00001FF0, // ...*********...
+ 0x000007C0, // .....*****.....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 212
+ 15, 26,
+ 0x00000180, // .......**......
+ 0x000003C0, // ......****.....
+ 0x000007E0, // .....******....
+ 0x00000E70, // ....***..***...
+ 0x00001C38, // ...***....***..
+ 0x00000000, // ...............
+ 0x000007C0, // .....*****.....
+ 0x00001FF0, // ...*********...
+ 0x00003838, // ..***.....***..
+ 0x00003018, // ..**.......**..
+ 0x0000701C, // .***.......***.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000701C, // .***.......***.
+ 0x00003018, // ..**.......**..
+ 0x00003838, // ..***.....***..
+ 0x00001FF0, // ...*********...
+ 0x000007C0, // .....*****.....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 213
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000730, // .....***..**...
+ 0x00000FE0, // ....*******....
+ 0x000019C0, // ...**..***.....
+ 0x00000000, // ...............
+ 0x000007C0, // .....*****.....
+ 0x00001FF0, // ...*********...
+ 0x00003838, // ..***.....***..
+ 0x00003018, // ..**.......**..
+ 0x0000701C, // .***.......***.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000701C, // .***.......***.
+ 0x00003018, // ..**.......**..
+ 0x00003838, // ..***.....***..
+ 0x00001FF0, // ...*********...
+ 0x000007C0, // .....*****.....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 214
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000C60, // ....**...**....
+ 0x00000C60, // ....**...**....
+ 0x00000C60, // ....**...**....
+ 0x00000000, // ...............
+ 0x000007C0, // .....*****.....
+ 0x00001FF0, // ...*********...
+ 0x00003838, // ..***.....***..
+ 0x00003018, // ..**.......**..
+ 0x0000701C, // .***.......***.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000600C, // .**.........**.
+ 0x0000701C, // .***.......***.
+ 0x00003018, // ..**.......**..
+ 0x00003838, // ..***.....***..
+ 0x00001FF0, // ...*********...
+ 0x000007C0, // .....*****.....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 215
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00002010, // ..*........*...
+ 0x00007038, // .***......***..
+ 0x00003870, // ..***....***...
+ 0x00001CE0, // ...***..***....
+ 0x00000FC0, // ....******.....
+ 0x00000780, // .....****......
+ 0x00000780, // .....****......
+ 0x00000FC0, // ....******.....
+ 0x00001CE0, // ...***..***....
+ 0x00003870, // ..***....***...
+ 0x00007038, // .***......***..
+ 0x00002010, // ..*........*...
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 216
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x0000000C, // ............**.
+ 0x00000018, // ...........**..
+ 0x000007F0, // .....*******...
+ 0x00001FF0, // ...*********...
+ 0x00003838, // ..***.....***..
+ 0x00003078, // ..**.....****..
+ 0x000070DC, // .***....**.***.
+ 0x0000608C, // .**.....*...**.
+ 0x0000618C, // .**....**...**.
+ 0x0000630C, // .**...**....**.
+ 0x0000620C, // .**...*.....**.
+ 0x0000660C, // .**..**.....**.
+ 0x0000741C, // .***.*.....***.
+ 0x00003C18, // ..****.....**..
+ 0x00003838, // ..***.....***..
+ 0x00001FF0, // ...*********...
+ 0x000037C0, // ..**.*****.....
+ 0x00006000, // .**............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 217
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00001C00, // ...***.........
+ 0x00000E00, // ....***........
+ 0x00000700, // .....***.......
+ 0x00000380, // ......***......
+ 0x00000000, // ...............
+ 0x00007C7C, // .*****...*****.
+ 0x00007C7C, // .*****...*****.
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00001830, // ...**.....**...
+ 0x00001FF0, // ...*********...
+ 0x00000FE0, // ....*******....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 218
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000070, // .........***...
+ 0x000000E0, // ........***....
+ 0x000001C0, // .......***.....
+ 0x00000380, // ......***......
+ 0x00000000, // ...............
+ 0x00007C7C, // .*****...*****.
+ 0x00007C7C, // .*****...*****.
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00001830, // ...**.....**...
+ 0x00001FF0, // ...*********...
+ 0x00000FE0, // ....*******....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 219
+ 15, 26,
+ 0x00000180, // .......**......
+ 0x000003C0, // ......****.....
+ 0x000007E0, // .....******....
+ 0x00000E70, // ....***..***...
+ 0x00001C38, // ...***....***..
+ 0x00000000, // ...............
+ 0x00007C7C, // .*****...*****.
+ 0x00007C7C, // .*****...*****.
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00001830, // ...**.....**...
+ 0x00001FF0, // ...*********...
+ 0x00000FE0, // ....*******....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 220
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000C60, // ....**...**....
+ 0x00000C60, // ....**...**....
+ 0x00000C60, // ....**...**....
+ 0x00000000, // ...............
+ 0x00007C7C, // .*****...*****.
+ 0x00007C7C, // .*****...*****.
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00003018, // ..**.......**..
+ 0x00001830, // ...**.....**...
+ 0x00001FF0, // ...*********...
+ 0x00000FE0, // ....*******....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 221
+ 15, 26,
+ 0x00000000, // ...............
+ 0x000000E0, // ........***....
+ 0x000001C0, // .......***.....
+ 0x00000380, // ......***......
+ 0x00000700, // .....***.......
+ 0x00000000, // ...............
+ 0x0000FCFC, // ******..******.
+ 0x0000FCFC, // ******..******.
+ 0x00007038, // .***......***..
+ 0x00003870, // ..***....***...
+ 0x00001860, // ...**....**....
+ 0x00000CC0, // ....**..**.....
+ 0x00000FC0, // ....******.....
+ 0x00000780, // .....****......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00001FE0, // ...********....
+ 0x00001FE0, // ...********....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 222
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00007E00, // .******........
+ 0x00007E00, // .******........
+ 0x00001800, // ...**..........
+ 0x00001FE0, // ...********....
+ 0x00001FF8, // ...**********..
+ 0x0000181C, // ...**......***.
+ 0x0000180C, // ...**.......**.
+ 0x0000180C, // ...**.......**.
+ 0x0000180C, // ...**.......**.
+ 0x0000181C, // ...**......***.
+ 0x00001FF8, // ...**********..
+ 0x00001FE0, // ...********....
+ 0x00001800, // ...**..........
+ 0x00007E00, // .******........
+ 0x00007E00, // .******........
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 223
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000780, // .....****......
+ 0x00000FC0, // ....******.....
+ 0x00001CE0, // ...***..***....
+ 0x00001860, // ...**....**....
+ 0x00001860, // ...**....**....
+ 0x000018E0, // ...**...***....
+ 0x00001BC0, // ...**.****.....
+ 0x00001BE0, // ...**.*****....
+ 0x00001870, // ...**....***...
+ 0x00001838, // ...**.....***..
+ 0x00001818, // ...**......**..
+ 0x00001818, // ...**......**..
+ 0x00001818, // ...**......**..
+ 0x000019B8, // ...**..**.***..
+ 0x00007DF0, // .*****.*****...
+ 0x00007CE0, // .*****..***....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 224
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00003800, // ..***..........
+ 0x00001C00, // ...***.........
+ 0x00000E00, // ....***........
+ 0x00000700, // .....***.......
+ 0x00000000, // ...............
+ 0x00001F80, // ...******......
+ 0x00003FC0, // ..********.....
+ 0x000030E0, // ..**....***....
+ 0x00000060, // .........**....
+ 0x00000FE0, // ....*******....
+ 0x00003FE0, // ..*********....
+ 0x00007060, // .***.....**....
+ 0x00006060, // .**......**....
+ 0x000060E0, // .**.....***....
+ 0x00007FF8, // .************..
+ 0x00003F78, // ..******.****..
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 225
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000000E0, // ........***....
+ 0x000001C0, // .......***.....
+ 0x00000380, // ......***......
+ 0x00000700, // .....***.......
+ 0x00000000, // ...............
+ 0x00001F80, // ...******......
+ 0x00003FC0, // ..********.....
+ 0x000030E0, // ..**....***....
+ 0x00000060, // .........**....
+ 0x00000FE0, // ....*******....
+ 0x00003FE0, // ..*********....
+ 0x00007060, // .***.....**....
+ 0x00006060, // .**......**....
+ 0x000060E0, // .**.....***....
+ 0x00007FF8, // .************..
+ 0x00003F78, // ..******.****..
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 226
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000700, // .....***.......
+ 0x00000F80, // ....*****......
+ 0x00001DC0, // ...***.***.....
+ 0x000038E0, // ..***...***....
+ 0x00000000, // ...............
+ 0x00001F80, // ...******......
+ 0x00003FC0, // ..********.....
+ 0x000030E0, // ..**....***....
+ 0x00000060, // .........**....
+ 0x00000FE0, // ....*******....
+ 0x00003FE0, // ..*********....
+ 0x00007060, // .***.....**....
+ 0x00006060, // .**......**....
+ 0x000060E0, // .**.....***....
+ 0x00007FF8, // .************..
+ 0x00003F78, // ..******.****..
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 227
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000E60, // ....***..**....
+ 0x00001FC0, // ...*******.....
+ 0x00003380, // ..**..***......
+ 0x00000000, // ...............
+ 0x00001F80, // ...******......
+ 0x00003FC0, // ..********.....
+ 0x000030E0, // ..**....***....
+ 0x00000060, // .........**....
+ 0x00000FE0, // ....*******....
+ 0x00003FE0, // ..*********....
+ 0x00007060, // .***.....**....
+ 0x00006060, // .**......**....
+ 0x000060E0, // .**.....***....
+ 0x00007FF8, // .************..
+ 0x00003F78, // ..******.****..
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 228
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000018C0, // ...**...**.....
+ 0x000018C0, // ...**...**.....
+ 0x000018C0, // ...**...**.....
+ 0x00000000, // ...............
+ 0x00001F80, // ...******......
+ 0x00003FC0, // ..********.....
+ 0x000030E0, // ..**....***....
+ 0x00000060, // .........**....
+ 0x00000FE0, // ....*******....
+ 0x00003FE0, // ..*********....
+ 0x00007060, // .***.....**....
+ 0x00006060, // .**......**....
+ 0x000060E0, // .**.....***....
+ 0x00007FF8, // .************..
+ 0x00003F78, // ..******.****..
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 229
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000700, // .....***.......
+ 0x00000D80, // ....**.**......
+ 0x00000880, // ....*...*......
+ 0x00000D80, // ....**.**......
+ 0x00000700, // .....***.......
+ 0x00001F80, // ...******......
+ 0x00003FC0, // ..********.....
+ 0x000030E0, // ..**....***....
+ 0x00000060, // .........**....
+ 0x00000FE0, // ....*******....
+ 0x00003FE0, // ..*********....
+ 0x00007060, // .***.....**....
+ 0x00006060, // .**......**....
+ 0x000060E0, // .**.....***....
+ 0x00007FF8, // .************..
+ 0x00003F78, // ..******.****..
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 230
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00003CF0, // ..****..****...
+ 0x00007FF8, // .************..
+ 0x0000679C, // .**..****..***.
+ 0x0000030C, // ......**....**.
+ 0x00001F0C, // ...*****....**.
+ 0x00007FFC, // .*************.
+ 0x0000E3FC, // ***...********.
+ 0x0000C300, // **....**.......
+ 0x0000C78C, // **...****...**.
+ 0x0000FFFC, // **************.
+ 0x00007CF0, // .*****..****...
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 231
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000FB0, // ....*****.**...
+ 0x00003FF0, // ..**********...
+ 0x00003870, // ..***....***...
+ 0x00007030, // .***......**...
+ 0x00006030, // .**.......**...
+ 0x00006000, // .**............
+ 0x00006000, // .**............
+ 0x00007000, // .***...........
+ 0x00003830, // ..***.....**...
+ 0x00003FF0, // ..**********...
+ 0x00000FE0, // ....*******....
+ 0x00000300, // ......**.......
+ 0x00000780, // .....****......
+ 0x00000180, // .......**......
+ 0x00000F80, // ....*****......
+ 0x00000700, // .....***.......
+ },
+ { // 232
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00001C00, // ...***.........
+ 0x00000E00, // ....***........
+ 0x00000700, // .....***.......
+ 0x00000380, // ......***......
+ 0x00000000, // ...............
+ 0x00000FC0, // ....******.....
+ 0x00003FF0, // ..**********...
+ 0x00003870, // ..***....***...
+ 0x00007038, // .***......***..
+ 0x00006018, // .**........**..
+ 0x00007FF8, // .************..
+ 0x00007FF8, // .************..
+ 0x00007000, // .***...........
+ 0x00003838, // ..***.....***..
+ 0x00003FF8, // ..***********..
+ 0x00000FE0, // ....*******....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 233
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000000E0, // ........***....
+ 0x000001C0, // .......***.....
+ 0x00000380, // ......***......
+ 0x00000700, // .....***.......
+ 0x00000000, // ...............
+ 0x00000FC0, // ....******.....
+ 0x00003FF0, // ..**********...
+ 0x00003870, // ..***....***...
+ 0x00007038, // .***......***..
+ 0x00006018, // .**........**..
+ 0x00007FF8, // .************..
+ 0x00007FF8, // .************..
+ 0x00007000, // .***...........
+ 0x00003838, // ..***.....***..
+ 0x00003FF8, // ..***********..
+ 0x00000FE0, // ....*******....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 234
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000380, // ......***......
+ 0x000007C0, // .....*****.....
+ 0x00000EE0, // ....***.***....
+ 0x00001C70, // ...***...***...
+ 0x00000000, // ...............
+ 0x00000FC0, // ....******.....
+ 0x00003FF0, // ..**********...
+ 0x00003870, // ..***....***...
+ 0x00007038, // .***......***..
+ 0x00006018, // .**........**..
+ 0x00007FF8, // .************..
+ 0x00007FF8, // .************..
+ 0x00007000, // .***...........
+ 0x00003838, // ..***.....***..
+ 0x00003FF8, // ..***********..
+ 0x00000FE0, // ....*******....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 235
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000018C0, // ...**...**.....
+ 0x000018C0, // ...**...**.....
+ 0x000018C0, // ...**...**.....
+ 0x00000000, // ...............
+ 0x00000FC0, // ....******.....
+ 0x00003FF0, // ..**********...
+ 0x00003870, // ..***....***...
+ 0x00007038, // .***......***..
+ 0x00006018, // .**........**..
+ 0x00007FF8, // .************..
+ 0x00007FF8, // .************..
+ 0x00007000, // .***...........
+ 0x00003838, // ..***.....***..
+ 0x00003FF8, // ..***********..
+ 0x00000FE0, // ....*******....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 236
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00003800, // ..***..........
+ 0x00001C00, // ...***.........
+ 0x00000E00, // ....***........
+ 0x00000700, // .....***.......
+ 0x00000000, // ...............
+ 0x00001F00, // ...*****.......
+ 0x00001F00, // ...*****.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 237
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000000E0, // ........***....
+ 0x000001C0, // .......***.....
+ 0x00000380, // ......***......
+ 0x00000700, // .....***.......
+ 0x00000000, // ...............
+ 0x00001F00, // ...*****.......
+ 0x00001F00, // ...*****.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 238
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000700, // .....***.......
+ 0x00000F80, // ....*****......
+ 0x00001DC0, // ...***.***.....
+ 0x000038E0, // ..***...***....
+ 0x00000000, // ...............
+ 0x00001F00, // ...*****.......
+ 0x00001F00, // ...*****.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 239
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000018C0, // ...**...**.....
+ 0x000018C0, // ...**...**.....
+ 0x000018C0, // ...**...**.....
+ 0x00000000, // ...............
+ 0x00001F00, // ...*****.......
+ 0x00001F00, // ...*****.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00000300, // ......**.......
+ 0x00003FF0, // ..**********...
+ 0x00003FF0, // ..**********...
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 240
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x0000F000, // ****...........
+ 0x0000FC70, // ******...***...
+ 0x00000FF0, // ....********...
+ 0x00001F80, // ...******......
+ 0x00007DC0, // .*****.***.....
+ 0x000070E0, // .***....***....
+ 0x00000FF0, // ....********...
+ 0x00003FF0, // ..**********...
+ 0x00003878, // ..***....****..
+ 0x00007038, // .***......***..
+ 0x00006018, // .**........**..
+ 0x00006018, // .**........**..
+ 0x00006018, // .**........**..
+ 0x00007038, // .***......***..
+ 0x00003870, // ..***....***...
+ 0x00003FF0, // ..**********...
+ 0x00000FC0, // ....******.....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 241
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000E60, // ....***..**....
+ 0x00001FC0, // ...*******.....
+ 0x00003380, // ..**..***......
+ 0x00000000, // ...............
+ 0x0000F3C0, // ****..****.....
+ 0x0000F7E0, // ****.******....
+ 0x00003C70, // ..****...***...
+ 0x00003830, // ..***.....**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x0000FCFC, // ******..******.
+ 0x0000FCFC, // ******..******.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 242
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00001C00, // ...***.........
+ 0x00000E00, // ....***........
+ 0x00000700, // .....***.......
+ 0x00000380, // ......***......
+ 0x00000000, // ...............
+ 0x00000FC0, // ....******.....
+ 0x00003FF0, // ..**********...
+ 0x00003870, // ..***....***...
+ 0x00007038, // .***......***..
+ 0x00006018, // .**........**..
+ 0x00006018, // .**........**..
+ 0x00006018, // .**........**..
+ 0x00007038, // .***......***..
+ 0x00003870, // ..***....***...
+ 0x00003FF0, // ..**********...
+ 0x00000FC0, // ....******.....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 243
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000000E0, // ........***....
+ 0x000001C0, // .......***.....
+ 0x00000380, // ......***......
+ 0x00000700, // .....***.......
+ 0x00000000, // ...............
+ 0x00000FC0, // ....******.....
+ 0x00003FF0, // ..**********...
+ 0x00003870, // ..***....***...
+ 0x00007038, // .***......***..
+ 0x00006018, // .**........**..
+ 0x00006018, // .**........**..
+ 0x00006018, // .**........**..
+ 0x00007038, // .***......***..
+ 0x00003870, // ..***....***...
+ 0x00003FF0, // ..**********...
+ 0x00000FC0, // ....******.....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 244
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000700, // .....***.......
+ 0x00000F80, // ....*****......
+ 0x00001DC0, // ...***.***.....
+ 0x000038E0, // ..***...***....
+ 0x00000000, // ...............
+ 0x00000FC0, // ....******.....
+ 0x00003FF0, // ..**********...
+ 0x00003870, // ..***....***...
+ 0x00007038, // .***......***..
+ 0x00006018, // .**........**..
+ 0x00006018, // .**........**..
+ 0x00006018, // .**........**..
+ 0x00007038, // .***......***..
+ 0x00003870, // ..***....***...
+ 0x00003FF0, // ..**********...
+ 0x00000FC0, // ....******.....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 245
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000E60, // ....***..**....
+ 0x00001FC0, // ...*******.....
+ 0x00003380, // ..**..***......
+ 0x00000000, // ...............
+ 0x00000FC0, // ....******.....
+ 0x00003FF0, // ..**********...
+ 0x00003870, // ..***....***...
+ 0x00007038, // .***......***..
+ 0x00006018, // .**........**..
+ 0x00006018, // .**........**..
+ 0x00006018, // .**........**..
+ 0x00007038, // .***......***..
+ 0x00003870, // ..***....***...
+ 0x00003FF0, // ..**********...
+ 0x00000FC0, // ....******.....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 246
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000018C0, // ...**...**.....
+ 0x000018C0, // ...**...**.....
+ 0x000018C0, // ...**...**.....
+ 0x00000000, // ...............
+ 0x00000FC0, // ....******.....
+ 0x00003FF0, // ..**********...
+ 0x00003870, // ..***....***...
+ 0x00007038, // .***......***..
+ 0x00006018, // .**........**..
+ 0x00006018, // .**........**..
+ 0x00006018, // .**........**..
+ 0x00007038, // .***......***..
+ 0x00003870, // ..***....***...
+ 0x00003FF0, // ..**********...
+ 0x00000FC0, // ....******.....
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 247
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000700, // .....***.......
+ 0x00000700, // .....***.......
+ 0x00000700, // .....***.......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x0000FFF8, // *************..
+ 0x0000FFF8, // *************..
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000700, // .....***.......
+ 0x00000700, // .....***.......
+ 0x00000700, // .....***.......
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 248
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x0000000C, // ............**.
+ 0x00000FD8, // ....******.**..
+ 0x00003FF0, // ..**********...
+ 0x00003870, // ..***....***...
+ 0x000070D8, // .***....**.**..
+ 0x00006198, // .**....**..**..
+ 0x00006318, // .**...**...**..
+ 0x00006618, // .**..**....**..
+ 0x00006C38, // .**.**....***..
+ 0x00003870, // ..***....***...
+ 0x00003FF0, // ..**********...
+ 0x00003FC0, // ..********.....
+ 0x00006000, // .**............
+ 0x0000C000, // **.............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 249
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00003800, // ..***..........
+ 0x00001C00, // ...***.........
+ 0x00000E00, // ....***........
+ 0x00000700, // .....***.......
+ 0x00000000, // ...............
+ 0x0000F0F0, // ****....****...
+ 0x0000F0F0, // ****....****...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003870, // ..***....***...
+ 0x00001FFC, // ...***********.
+ 0x00000FBC, // ....*****.****.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 250
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000001C0, // .......***.....
+ 0x00000380, // ......***......
+ 0x00000700, // .....***.......
+ 0x00000E00, // ....***........
+ 0x00000000, // ...............
+ 0x0000F0F0, // ****....****...
+ 0x0000F0F0, // ****....****...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003870, // ..***....***...
+ 0x00001FFC, // ...***********.
+ 0x00000FBC, // ....*****.****.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 251
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000700, // .....***.......
+ 0x00000F80, // ....*****......
+ 0x00001DC0, // ...***.***.....
+ 0x000038E0, // ..***...***....
+ 0x00000000, // ...............
+ 0x0000F0F0, // ****....****...
+ 0x0000F0F0, // ****....****...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003870, // ..***....***...
+ 0x00001FFC, // ...***********.
+ 0x00000FBC, // ....*****.****.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 252
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000018C0, // ...**...**.....
+ 0x000018C0, // ...**...**.....
+ 0x000018C0, // ...**...**.....
+ 0x00000000, // ...............
+ 0x0000F0F0, // ****....****...
+ 0x0000F0F0, // ****....****...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003030, // ..**......**...
+ 0x00003870, // ..***....***...
+ 0x00001FFC, // ...***********.
+ 0x00000FBC, // ....*****.****.
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ },
+ { // 253
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000070, // .........***...
+ 0x000000E0, // ........***....
+ 0x000001C0, // .......***.....
+ 0x00000380, // ......***......
+ 0x00000000, // ...............
+ 0x00007CF8, // .*****..*****..
+ 0x00007CF8, // .*****..*****..
+ 0x00003030, // ..**......**...
+ 0x00003870, // ..***....***...
+ 0x00001860, // ...**....**....
+ 0x00001CE0, // ...***..***....
+ 0x00000CC0, // ....**..**.....
+ 0x00000DC0, // ....**.***.....
+ 0x00000780, // .....****......
+ 0x00000780, // .....****......
+ 0x00000300, // ......**.......
+ 0x00000700, // .....***.......
+ 0x00000600, // .....**........
+ 0x00000E00, // ....***........
+ 0x00007F00, // .*******.......
+ 0x00007F00, // .*******.......
+ },
+ { // 254
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00007800, // .****..........
+ 0x00007800, // .****..........
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00001BE0, // ...**.*****....
+ 0x00001FF8, // ...**********..
+ 0x00001E38, // ...****...***..
+ 0x00001C1C, // ...***.....***.
+ 0x0000180C, // ...**.......**.
+ 0x0000180C, // ...**.......**.
+ 0x0000180C, // ...**.......**.
+ 0x00001C1C, // ...***.....***.
+ 0x00001E38, // ...****...***..
+ 0x00001FF8, // ...**********..
+ 0x00001BE0, // ...**.*****....
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00001800, // ...**..........
+ 0x00007F00, // .*******.......
+ 0x00007F00, // .*******.......
+ },
+ { // 255
+ 15, 26,
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x00000000, // ...............
+ 0x000018C0, // ...**...**.....
+ 0x000018C0, // ...**...**.....
+ 0x000018C0, // ...**...**.....
+ 0x00000000, // ...............
+ 0x00007CF8, // .*****..*****..
+ 0x00007CF8, // .*****..*****..
+ 0x00003030, // ..**......**...
+ 0x00003870, // ..***....***...
+ 0x00001860, // ...**....**....
+ 0x00001CE0, // ...***..***....
+ 0x00000CC0, // ....**..**.....
+ 0x00000DC0, // ....**.***.....
+ 0x00000780, // .....****......
+ 0x00000780, // .....****......
+ 0x00000300, // ......**.......
+ 0x00000700, // .....***.......
+ 0x00000600, // .....**........
+ 0x00000E00, // ....***........
+ 0x00007F00, // .*******.......
+ 0x00007F00, // .*******.......
+ },
+ };
diff --git a/i18n.c b/i18n.c
new file mode 100644
index 0000000..7b93062
--- /dev/null
+++ b/i18n.c
@@ -0,0 +1,478 @@
+/*
+ * i18n.c: Internationalization
+ *
+ * See the main source file 'vdr.c' for copyright information and
+ * how to reach the author.
+ *
+ * $Id: i18n.c 1.6 2000/11/19 12:12:53 kls Exp $
+ *
+ * Slovenian translations provided by Miha Setina <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];
+}
+
diff --git a/i18n.h b/i18n.h
new file mode 100644
index 0000000..c94241a
--- /dev/null
+++ b/i18n.h
@@ -0,0 +1,19 @@
+/*
+ * i18n.h: Internationalization
+ *
+ * See the main source file 'vdr.c' for copyright information and
+ * how to reach the author.
+ *
+ * $Id: i18n.h 1.1 2000/11/11 09:27:25 kls Exp $
+ */
+
+#ifndef __I18N_H
+#define __I18N_H
+
+extern const int NumLanguages;
+
+const char *tr(const char *s);
+
+const char * const * Languages(void);
+
+#endif //__I18N_H
diff --git a/interface.c b/interface.c
index 810270f..e5cc1d2 100644
--- a/interface.c
+++ b/interface.c
@@ -4,12 +4,13 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: interface.c 1.28 2000/11/01 15:27:52 kls Exp $
+ * $Id: interface.c 1.32 2000/11/18 15:28:50 kls Exp $
*/
#include "interface.h"
#include <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);
diff --git a/menu.c b/menu.c
index c3611cc..3cf8328 100644
--- a/menu.c
+++ b/menu.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: menu.c 1.40 2000/11/01 16:14:48 kls Exp $
+ * $Id: menu.c 1.52 2000/11/18 16:30:13 kls Exp $
*/
#include "menu.h"
@@ -14,6 +14,7 @@
#include <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++) {
diff --git a/menu.h b/menu.h
index d979069..8153f5d 100644
--- a/menu.h
+++ b/menu.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: menu.h 1.13 2000/11/01 14:03:09 kls Exp $
+ * $Id: menu.h 1.14 2000/11/12 12:33:00 kls Exp $
*/
#ifndef _MENU_H
@@ -59,6 +59,7 @@ public:
cRecordControl(cDvbApi *DvbApi, cTimer *Timer = NULL);
virtual ~cRecordControl();
bool Process(void);
+ bool Uses(cDvbApi *DvbApi) { return DvbApi == dvbApi; }
void Stop(bool KeepInstant = false);
bool IsInstant(void) { return instantId; }
const char *InstantId(void) { return instantId; }
@@ -70,6 +71,7 @@ private:
public:
static bool Start(cTimer *Timer = NULL);
static void Stop(const char *InstantId);
+ static void Stop(cDvbApi *DvbApi);
static const char *GetInstantId(const char *LastInstantId);
static void Process(void);
};
diff --git a/osd.c b/osd.c
index f345827..bc9c948 100644
--- a/osd.c
+++ b/osd.c
@@ -4,12 +4,13 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: osd.c 1.11 2000/11/01 11:21:51 kls Exp $
+ * $Id: osd.c 1.13 2000/11/12 15:29:25 kls Exp $
*/
#include "osd.h"
#include <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"));
}
}
diff --git a/osd.h b/osd.h
index 473e87d..0d8085d 100644
--- a/osd.h
+++ b/osd.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: osd.h 1.14 2000/11/01 14:29:07 kls Exp $
+ * $Id: osd.h 1.17 2000/11/12 15:27:34 kls Exp $
*/
#ifndef __OSD_H
@@ -21,9 +21,10 @@ enum eOSState { osUnknown,
osContinue,
osSchedule,
osChannels,
- osTimer,
+ osTimers,
osRecordings,
osSetup,
+ osCommands,
osRecord,
osReplay,
osStopRecord,
@@ -77,6 +78,7 @@ private:
const char *status;
protected:
bool visible;
+ virtual void Clear(void);
bool SpecialItem(int idx);
void RefreshCurrent(void);
void DisplayCurrent(bool Current);
diff --git a/recording.c b/recording.c
index 3ddf8d3..f45be96 100644
--- a/recording.c
+++ b/recording.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: recording.c 1.20 2000/11/01 16:00:36 kls Exp $
+ * $Id: recording.c 1.21 2000/11/18 16:22:29 kls Exp $
*/
#define _GNU_SOURCE
@@ -32,6 +32,7 @@
#define MINDISKSPACE 1024 // MB
#define DISKCHECKDELTA 300 // seconds between checks for free disk space
+#define REMOVELATENCY 10 // seconds to wait until next check after removing a file
void AssertFreeDiskSpace(void)
{
@@ -51,8 +52,10 @@ void AssertFreeDiskSpace(void)
r0 = r;
r = Recordings.Next(r);
}
- if (r0 && r0->Remove())
+ if (r0 && r0->Remove()) {
+ LastFreeDiskCheck += REMOVELATENCY;
return;
+ }
}
// No "deleted" files to remove, so let's see if we can delete a recording:
if (Recordings.Load(false)) {
diff --git a/remote.c b/remote.c
index f60d768..349a445 100644
--- a/remote.c
+++ b/remote.c
@@ -6,7 +6,7 @@
*
* Ported to LIRC by Carsten Koch <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;
}
diff --git a/svdrp.c b/svdrp.c
index cf91caf..66ae8e9 100644
--- a/svdrp.c
+++ b/svdrp.c
@@ -10,7 +10,7 @@
* and interact with the Video Disk Recorder - or write a full featured
* graphical interface that sits on top of an SVDRP connection.
*
- * $Id: svdrp.c 1.11 2000/10/08 12:21:14 kls Exp $
+ * $Id: svdrp.c 1.12 2000/11/05 13:44:42 kls Exp $
*/
#define _GNU_SOURCE
@@ -302,13 +302,13 @@ void cSVDRP::CmdCHAN(const char *Option)
n = o;
}
else if (strcmp(Option, "-") == 0) {
- n = CurrentChannel;
- if (CurrentChannel > 1)
+ n = cDvbApi::CurrentChannel();
+ if (n > 1)
n--;
}
else if (strcmp(Option, "+") == 0) {
- n = CurrentChannel;
- if (CurrentChannel < Channels.MaxNumber())
+ n = cDvbApi::CurrentChannel();
+ if (n < Channels.MaxNumber())
n++;
}
else {
@@ -342,11 +342,11 @@ void cSVDRP::CmdCHAN(const char *Option)
return;
}
}
- cChannel *channel = Channels.GetByNumber(CurrentChannel);
+ cChannel *channel = Channels.GetByNumber(cDvbApi::CurrentChannel());
if (channel)
- Reply(250, "%d %s", CurrentChannel, channel->name);
+ Reply(250, "%d %s", channel->number, channel->name);
else
- Reply(550, "Unable to find channel \"%d\"", CurrentChannel);
+ Reply(550, "Unable to find channel \"%d\"", cDvbApi::CurrentChannel());
}
void cSVDRP::CmdDELC(const char *Option)
diff --git a/thread.c b/thread.c
index b124581..67b5ab9 100644
--- a/thread.c
+++ b/thread.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: thread.c 1.3 2000/10/28 15:26:02 kls Exp $
+ * $Id: thread.c 1.4 2000/11/14 18:38:25 kls Exp $
*/
#include "thread.h"
@@ -24,7 +24,6 @@ cThread::cThread(void)
signal(SIGIO, SignalHandler);
signalHandlerInstalled = true;
}
- pthread_mutex_init(&mutex, NULL);
running = false;
parentPid = lockingPid = 0;
locked = 0;
@@ -32,7 +31,6 @@ cThread::cThread(void)
cThread::~cThread()
{
- pthread_mutex_destroy(&mutex);
}
void cThread::SignalHandler(int signum)
@@ -64,7 +62,7 @@ void cThread::Stop(void)
bool cThread::Lock(void)
{
if (!lockingPid || lockingPid != getpid()) {
- pthread_mutex_lock(&mutex);
+ Mutex.Lock();
lockingPid = getpid();
}
locked++;
@@ -75,7 +73,7 @@ void cThread::Unlock(void)
{
if (!--locked) {
lockingPid = 0;
- pthread_mutex_unlock(&mutex);
+ Mutex.Unlock();
}
}
diff --git a/thread.h b/thread.h
index b47f6d7..c85c51e 100644
--- a/thread.h
+++ b/thread.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: thread.h 1.2 2000/10/28 15:08:09 kls Exp $
+ * $Id: thread.h 1.3 2000/11/14 18:38:11 kls Exp $
*/
#ifndef __THREAD_H
@@ -13,11 +13,21 @@
#include <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.
diff --git a/tools.c b/tools.c
index 4acea0b..6d86f16 100644
--- a/tools.c
+++ b/tools.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: tools.c 1.22 2000/10/29 11:21:55 kls Exp $
+ * $Id: tools.c 1.23 2000/11/11 15:17:12 kls Exp $
*/
#define _GNU_SOURCE
@@ -92,6 +92,18 @@ char *skipspace(const char *s)
return (char *)s;
}
+char *stripspace(char *s)
+{
+ if (s && *s) {
+ for (char *p = s + strlen(s) - 1; p >= s; p--) {
+ if (!isspace(*p))
+ break;
+ *p = 0;
+ }
+ }
+ return s;
+}
+
bool isempty(const char *s)
{
return !(s && *skipspace(s));
diff --git a/tools.h b/tools.h
index b5bdd27..f83e7da 100644
--- a/tools.h
+++ b/tools.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: tools.h 1.18 2000/10/29 11:19:20 kls Exp $
+ * $Id: tools.h 1.20 2000/11/12 15:27:06 kls Exp $
*/
#ifndef __TOOLS_H
@@ -41,6 +41,7 @@ char *readline(FILE *f);
char *strn0cpy(char *dest, const char *src, size_t n);
char *strreplace(char *s, char c1, char c2);
char *skipspace(const char *s);
+char *stripspace(char *s);
bool isempty(const char *s);
int time_ms(void);
void delay_ms(int ms);
@@ -95,7 +96,7 @@ public:
void Del(cListObject *Object);
virtual void Move(int From, int To);
void Move(cListObject *From, cListObject *To);
- void Clear(void);
+ virtual void Clear(void);
cListObject *Get(int Index) const;
int Count(void) const;
};
diff --git a/vdr.c b/vdr.c
index b1321ae..8a84200 100644
--- a/vdr.c
+++ b/vdr.c
@@ -22,7 +22,7 @@
*
* The project's page is at http://www.cadsoft.de/people/kls/vdr
*
- * $Id: vdr.c 1.41 2000/11/01 14:31:32 kls Exp $
+ * $Id: vdr.c 1.46 2000/11/18 13:46:56 kls Exp $
*/
#include <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;