diff --git a/.gitignore b/.gitignore index c341c7b38..b2acf5b02 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,7 @@ INSTALL *.lo *.a *.la +.*.swp ### binaries that fall out of the build lib/sectionsdclient/sectionsdcontrol @@ -30,3 +31,5 @@ src/neutrino src/nhttpd/web/*.js.gz src/zapit/src/pzapit src/zapit/src/udpstreampes +src/drivertool +src/gui/svn_version.h diff --git a/configure.ac b/configure.ac index 92b55f525..fa8af0243 100644 --- a/configure.ac +++ b/configure.ac @@ -174,7 +174,7 @@ data/lcd/clock/Makefile data/locale/Makefile data/scripts/Makefile data/themes/Makefile -src/sectionsd/Makefile +src/eitd/Makefile src/timerd/Makefile src/zapit/Makefile src/zapit/lib/Makefile diff --git a/cross-configure.cool.debug b/cross-configure.cool.debug new file mode 100755 index 000000000..6ce9ebed1 --- /dev/null +++ b/cross-configure.cool.debug @@ -0,0 +1,31 @@ +#!/bin/sh + +PREFIX=/opt/newcross/arm-cx2450x-linux-gnueabi/arm-cx2450x-linux-gnueabi/sys-root/usr +CCPATH= +HOST=arm-cx2450x-linux-gnueabi + +export PKG_CONFIG_PATH=${PREFIX}/lib/pkgconfig +export CC=$CCPATH$HOST-gcc +export AR=$CCPATH$HOST-ar +export NM=$CCPATH$HOST-nm +export RANLIB=$CCPATH$HOST-ranlib +export OBJDUMP=$CCPATH$HOST-objdump +export STRIP=$CCPATH$HOST-strip + +export CFLAGS=" -Wall -Wextra -Wshadow -Werror -g -ggdb3 \ + -D__KERNEL_STRICT_NAMES -DUSE_NEVIS_GXA \ + -I"$PWD"/include -I"$PWD"/include/linux/dvb -I"$PREFIX"/include/freetype2" + +export CXXFLAGS=" -Wall -Wextra -Wshadow -Werror -g -ggdb3 \ + -D__KERNEL_STRICT_NAMES -DUSE_NEVIS_GXA \ + -I"$PWD"/include -I"$PWD"/include/linux/dvb -I"$PREFIX"/include/freetype2" + +export LDFLAGS="-L"$PREFIX"/lib -lcurl -lssl -lcrypto -ldl" + +export DVB_API_VERSION=3 +export FREETYPE_CONFIG=$PREFIX/bin/freetype-config +export CURL_CONFIG=$PREFIX/bin/curl-config + +./autogen.sh +./configure --prefix=${PREFIX} --build=i386-pc-linux-gnu --host=$HOST --without-driver --with-target=cdk --with-targetprefix="" "$*" + diff --git a/data/Makefile.am b/data/Makefile.am index f5f5e5cf1..7519719cd 100644 --- a/data/Makefile.am +++ b/data/Makefile.am @@ -5,4 +5,4 @@ SUBDIRS += lcd endif configdir = $(CONFIGDIR) -config_DATA = cables.xml satellites.xml encoding.conf tobackup.conf +config_DATA = cables.xml satellites.xml encoding.conf tobackup.conf providermap.xml diff --git a/data/locale/english.locale b/data/locale/english.locale index b08906d77..8ff6fcd75 100644 --- a/data/locale/english.locale +++ b/data/locale/english.locale @@ -216,6 +216,7 @@ channellist.sats Satellites channellist.since since channellist.start starts ci.empty No CAM in slot +ci.clock CI clock (Mhz) ci.init_failed CAM init failed ci.init_ok CAM init complete ci.inserted CAM inserted in slot @@ -1119,6 +1120,7 @@ reset_settings Reset settings to defaults satsetup.auto_scan Auto-Scan selected %s satsetup.auto_scan_all Auto-Scan multiple Satellites satsetup.comm_input Commited input +satsetup.cable_nid Network ID satsetup.diseqc DiSEqC satsetup.diseqc10 DiSEqC 1.0 satsetup.diseqc11 DiSEqC 1.1 @@ -1412,3 +1414,10 @@ zapitsetup.last_radio Radio Channel zapitsetup.last_tv TV Channel zapitsetup.last_use from last Channel zaptotimer.announce Zapto timer in one minute +satsetup.fe_setup Setup tuner +satsetup.fe_mode Tuner mode +satsetup.fe_mode_single single +satsetup.fe_mode_loop loop +satsetup.fe_mode_twin twin +satsetup.fe_mode_alone independent +satsetup.select_sat Select satellites diff --git a/data/providermap.xml b/data/providermap.xml new file mode 100644 index 000000000..ebe2b57b3 --- /dev/null +++ b/data/providermap.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/lib/libconfigfile/configfile.cpp b/lib/libconfigfile/configfile.cpp index 8d7677456..d567fee76 100644 --- a/lib/libconfigfile/configfile.cpp +++ b/lib/libconfigfile/configfile.cpp @@ -391,6 +391,8 @@ void CConfigFile::setInt32Vector(const std::string & key, const std::vector::const_iterator it = vec.begin(); ; ) { + if (it == vec.end()) + break; s << (*it); it++; if (it == vec.end()) @@ -406,6 +408,8 @@ void CConfigFile::setStringVector(const std::string & key, const std::vector::const_iterator it = vec.begin(); ; ) { + if (it == vec.end()) + break; configData[key] += *it; it++; if (it == vec.end()) diff --git a/lib/libcoolstream/ca_cs.h b/lib/libcoolstream/ca_cs.h index 638762b83..86fa900f4 100644 --- a/lib/libcoolstream/ca_cs.h +++ b/lib/libcoolstream/ca_cs.h @@ -5,6 +5,7 @@ /* */ /* (C) 2010 CoolStream International Ltd. */ /* */ +/* $Id:: ca_cs.h 2528 2011-12-22 13:19:41Z nightshad $ */ /*******************************************************************************/ #ifndef __CA_CS_H_ #define __CA_CS_H_ @@ -26,13 +27,13 @@ enum CA_SLOT_TYPE { enum CA_MESSAGE_FLAGS { CA_MESSAGE_EMPTY = (1 << 0), - CA_MESSAGE_HAS_PARAM1_DATA = (1 << 1), // Free after use! + CA_MESSAGE_HAS_PARAM1_DATA = (1 << 1), /// Free after use! CA_MESSAGE_HAS_PARAM1_INT = (1 << 2), CA_MESSAGE_HAS_PARAM1_PTR = (1 << 3), CA_MESSAGE_HAS_PARAM2_INT = (1 << 4), CA_MESSAGE_HAS_PARAM2_PTR = (1 << 5), CA_MESSAGE_HAS_PARAM2_DATA = (1 << 6), - CA_MESSAGE_HAS_PARAM3_DATA = (1 << 7), // Free after use! + CA_MESSAGE_HAS_PARAM3_DATA = (1 << 7), /// Free after use! CA_MESSAGE_HAS_PARAM3_INT = (1 << 8), CA_MESSAGE_HAS_PARAM3_PTR = (1 << 9), CA_MESSAGE_HAS_PARAM4_INT = (1 << 10), @@ -59,6 +60,7 @@ enum CA_MESSAGE_MSGID { CA_MESSAGE_MSG_ECM_ARRIVED, CA_MESSAGE_MSG_EMM_ARRIVED, CA_MESSAGE_MSG_CHANNEL_CHANGE, + CA_MESSAGE_MSG_GUI_READY, CA_MESSAGE_MSG_EXIT, }; @@ -84,36 +86,60 @@ typedef struct CA_MESSAGE { #define CS_CA_PDATA void #endif +/// CA module class class cCA : public OpenThreads::Thread { private: + /// Static instance of the CA module static cCA *inst; - // + /// Private constructor (singleton method) cCA(void); - // + /// Private data for the CA module CS_CA_PDATA *privateData; enum CA_INIT_MASK initMask; bool exit; bool started; bool guiReady; + /// Thread method virtual void run(void); public: + /// Returns the number of CI slots u32 GetNumberCISlots(void); - u32 GetNumberSmartCardSlots(void); // + /// Returns the number of Smartcard slots + u32 GetNumberSmartCardSlots(void); + /// Singleton static cCA *GetInstance(void); + /// Send PMT to a individual or to all available modules bool SendPMT(int Unit, unsigned char *Data, int Len, enum CA_SLOT_TYPE SlotType = CA_SLOT_TYPE_ALL); + /// Sends a message to the CA thread bool SendMessage(const CA_MESSAGE *Msg); + /// Sets which modules to initialize. It is only + /// possible to change this once! void SetInitMask(enum CA_INIT_MASK InitMask); + /// Sets the frequency (in Hz) of the TS stream input (only valid for CI) + void SetTSClock(u32 Speed); + /// Start the CA module bool Start(void); + /// Stops the CA module void Stop(void); + /// Notify that the GUI is ready to receive messages + /// (CA messages coming from a module) void Ready(bool Set); + /// Resets a module (if possible) void ModuleReset(enum CA_SLOT_TYPE, u32 Slot); + /// Checks if a module is present bool ModulePresent(enum CA_SLOT_TYPE, u32 Slot); + /// Returns the module name in array Name void ModuleName(enum CA_SLOT_TYPE, u32 Slot, char *Name); + /// Notify the module we want to enter menu void MenuEnter(enum CA_SLOT_TYPE, u32 Slot); + /// Notify the module with our answer (choice nr) void MenuAnswer(enum CA_SLOT_TYPE, u32 Slot, u32 choice); + /// Notify the module with our answer (binary) void InputAnswer(enum CA_SLOT_TYPE, u32 Slot, u8 * Data, int Len); + /// Notify the module we closed the menu void MenuClose(enum CA_SLOT_TYPE, u32 Slot); + /// Virtual destructor virtual ~cCA(); }; -#endif //__CA_H_ +#endif ///__CA_H_ diff --git a/lib/libcoolstream/dmx_cs.h b/lib/libcoolstream/dmx_cs.h index 8e1304853..b74bb528e 100644 --- a/lib/libcoolstream/dmx_cs.h +++ b/lib/libcoolstream/dmx_cs.h @@ -5,6 +5,7 @@ /* */ /* (C) 2008 CoolStream International */ /* */ +/* $Id:: $ */ /*******************************************************************************/ #ifndef __DEMUX_CS_H_ #define __DEMUX_CS_H_ @@ -14,9 +15,12 @@ #define DEMUX_POLL_TIMEOUT 0 // timeout in ms #define MAX_FILTER_LENGTH 12 // maximum number of filters -#ifndef DMX_FILTER_SIZE -#define DMX_FILTER_SIZE MAX_FILTER_LENGTH + +#ifdef DMX_FILTER_SIZE +#error #endif +#define DMX_FILTER_SIZE MAX_FILTER_LENGTH + #define MAX_DMX_UNITS 4 typedef enum { diff --git a/lib/sectionsdclient/sectionsdMsg.h b/lib/sectionsdclient/sectionsdMsg.h index e6327a58f..527b45cce 100644 --- a/lib/sectionsdclient/sectionsdMsg.h +++ b/lib/sectionsdclient/sectionsdMsg.h @@ -53,21 +53,8 @@ struct sectionsd enum commands { - /* actualEPGchannelName=0,*/ - dummy1, - dummy3, //actualEventListTVshort, // commandEventListTV - /*currentNextInformation,*/ - dummy2, dumpStatusinformation, // commandDumpStatusInformation - /*allEventsChannelName,*/ allEventsChannelIDSearch, // commandAllEventsChannelIDSearch - dummy4, // setHoursToCache, - dummy5, // setHoursExtendedCache, - dummy6, // setEventsAreOldInMinutes, - dummy7, // dumpAllServices, // commandDumpAllServices - dummy8, // actualEventListRadioshort, // commandEventListRadio - dummy9, // getNextEPG, // commandGetNextEPG - dummy10,// getNextShort, // commandGetNextShort pauseScanning, // commandPauseScanning // for the grabbers ;) getIsScanningActive, // commandGetIsScanningActive actualEPGchannelID, // commandActualEPGchannelID @@ -79,11 +66,9 @@ struct sectionsd ComponentTagsUniqueKey, // commandComponentTagsUniqueKey allEventsChannelID_, // commandAllEventsChannelID timesNVODservice, // commandTimesNVODservice - getEPGPrevNext, // commandGetEPGPrevNext getIsTimeSet, // commandGetIsTimeSet serviceChanged, // commandserviceChanged LinkageDescriptorsUniqueKey, // commandLinkageDescriptorsUniqueKey - pauseSorting, // commandPauseSorting CMD_registerEvents, // commandRegisterEventClient CMD_unregisterEvents, // commandUnRegisterEventClient #ifdef ENABLE_PPT @@ -91,20 +76,11 @@ struct sectionsd #else dummy11_setPrivatePid, #endif - setSectionsdScanMode, // commandSetSectionsdScanMode freeMemory, // commandFreeMemory readSIfromXML, // commandReadSIfromXML writeSI2XML, // commandWriteSI2XML - LoadLanguages, // commandLoadLanguages - SaveLanguages, // commandSaveLanguages - SetLanguages, // commandSetLanguages - GetLanguages, // commandGetLanguages - SetLanguageMode, // commandSetLanguageMode - GetLanguageMode, // commandGetLanguageMode setConfig, // commandSetConfig - Restart, // commandRestart - ping, numberOfCommands // <- no actual command, end of command marker }; diff --git a/lib/sectionsdclient/sectionsdclient.cpp b/lib/sectionsdclient/sectionsdclient.cpp index 55db153f6..97eadb83d 100644 --- a/lib/sectionsdclient/sectionsdclient.cpp +++ b/lib/sectionsdclient/sectionsdclient.cpp @@ -120,27 +120,6 @@ bool CSectionsdClient::getIsTimeSet() } } - -#if 0 -void CSectionsdClient::setEventsAreOldInMinutes(const unsigned short minutes) -{ - send(sectionsd::setEventsAreOldInMinutes, (char*)&minutes, sizeof(minutes)); - - readResponse(); - close_connection(); -} -#endif - -void CSectionsdClient::setPauseSorting(const bool doPause) -{ - int PauseIt = (doPause) ? 1 : 0; - - send(sectionsd::pauseSorting, (char*)&PauseIt, sizeof(PauseIt)); - - readResponse(); - close_connection(); -} - void CSectionsdClient::setPauseScanning(const bool doPause) { int PauseIt = (doPause) ? 1 : 0; @@ -738,15 +717,6 @@ void CSectionsdClient::setPrivatePid(const unsigned short pid) close_connection(); } #endif -#if 0 -void CSectionsdClient::setSectionsdScanMode(const int scanMode) -{ - send(sectionsd::setSectionsdScanMode, (char*)&scanMode, sizeof(scanMode)); - - readResponse(); - close_connection(); -} -#endif void CSectionsdClient::freeMemory() { diff --git a/lib/sectionsdclient/sectionsdclient.h b/lib/sectionsdclient/sectionsdclient.h index ae876668e..d42e99237 100644 --- a/lib/sectionsdclient/sectionsdclient.h +++ b/lib/sectionsdclient/sectionsdclient.h @@ -174,14 +174,10 @@ class CSectionsdClient : private CBasicClient bool getIsTimeSet(); -// void setEventsAreOldInMinutes(const unsigned short minutes); - void setPauseScanning(const bool doPause); bool getIsScanningActive(); - void setPauseSorting(const bool doPause); - void setServiceChanged(const t_channel_id channel_id, const bool requestEvent); CChannelEventList getChannelEvents(const bool tv_mode = true, t_channel_id* = NULL, int size = 0); @@ -198,8 +194,6 @@ class CSectionsdClient : private CBasicClient void setPrivatePid(const unsigned short pid); -// void setSectionsdScanMode(const int scanMode); - void freeMemory(); void readSIfromXML(const char * epgxmlname); diff --git a/src/Makefile.am b/src/Makefile.am index 08e0db89c..7a8175d24 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -1,6 +1,6 @@ AM_CXXFLAGS = -fno-rtti -fno-exceptions -SUBDIRS = zapit gui daemonc driver system sectionsd timerd nhttpd +SUBDIRS = zapit gui daemonc driver system eitd timerd nhttpd INCLUDES = \ -I$(srcdir) \ @@ -56,7 +56,7 @@ neutrino_LDADD = \ system/libneutrino_system.a \ gui/movieinfo.o \ gui/libneutrino_gui2.a \ - sectionsd/libsectionsd.a \ + eitd/libsectionsd.a \ driver/libneutrino_driver.a \ driver/audiodec/libneutrino_driver_audiodec.a \ driver/libneutrino_driver_netfile.a \ @@ -87,6 +87,7 @@ neutrino_LDADD = \ @AVUTIL_LIBS@ \ $(FLACLIBS) \ $(VORBISLIBS) \ + -ldvbsi++ \ -lungif \ -ljpeg \ -lOpenThreads \ diff --git a/src/daemonc/remotecontrol.cpp b/src/daemonc/remotecontrol.cpp index 3399d7b0b..54e220318 100644 --- a/src/daemonc/remotecontrol.cpp +++ b/src/daemonc/remotecontrol.cpp @@ -41,6 +41,7 @@ #include #include +#include #include "libdvbsub/dvbsub.h" #include "libtuxtxt/teletext.h" @@ -49,6 +50,8 @@ #include #include +#define ZAP_GUARD_TIME 2000 // ms + extern CBouquetManager *g_bouquetManager; extern uint32_t scrambled_timer; @@ -121,9 +124,9 @@ int CRemoteControl::handleMsg(const neutrino_msg_t msg, neutrino_msg_data_t data if ((*(t_channel_id *)data) != current_channel_id) { g_InfoViewer->chanready = 0; g_Zapit->zapTo_serviceID_NOWAIT(current_channel_id ); - g_Sectionsd->setServiceChanged(current_channel_id &0xFFFFFFFFFFFFULL, false); + //g_Sectionsd->setServiceChanged(current_channel_id, false); - zap_completion_timeout = getcurrenttime() + 2 * (int64_t) 1000000; + zap_completion_timeout = time_monotonic_ms() + ZAP_GUARD_TIME; return messages_return::handled; } @@ -168,7 +171,7 @@ int CRemoteControl::handleMsg(const neutrino_msg_t msg, neutrino_msg_data_t data director_mode = 0; needs_nvods = (msg == NeutrinoMessages:: EVT_ZAP_ISNVOD); - g_Sectionsd->setServiceChanged( current_channel_id&0xFFFFFFFFFFFFULL, true ); + //g_Sectionsd->setServiceChanged( current_channel_id, true ); CNeutrinoApp::getInstance()->channelList->adjustToChannelID(current_channel_id); if ( g_InfoViewer->is_visible ) g_RCInput->postMsg( NeutrinoMessages::SHOW_INFOBAR , 0 ); @@ -321,11 +324,11 @@ int CRemoteControl::handleMsg(const neutrino_msg_t msg, neutrino_msg_data_t data { getNVODs(); if (subChannels.empty()) - g_Sectionsd->setServiceChanged( current_channel_id&0xFFFFFFFFFFFFULL, true ); + g_Sectionsd->setServiceChanged( current_channel_id, true ); } else // EVENT anfordern! - g_Sectionsd->setServiceChanged( current_channel_id&0xFFFFFFFFFFFFULL, true ); + g_Sectionsd->setServiceChanged( current_channel_id, true ); } return messages_return::handled; @@ -340,6 +343,15 @@ int CRemoteControl::handleMsg(const neutrino_msg_t msg, neutrino_msg_data_t data return messages_return::handled; } + else if (msg == NeutrinoMessages::EVT_TUNE_COMPLETE) { + t_channel_id chid = *(t_channel_id *)data; +printf("CRemoteControl::handleMsg: EVT_TUNE_COMPLETE (%016llx)\n", chid); + if(chid) + g_Sectionsd->setServiceChanged( chid, true ); + else + g_Sectionsd->setServiceChanged( current_channel_id, true ); + return messages_return::handled; + } //else if (msg == NeutrinoMessages::EVT_ZAP_FAILED || msg == NeutrinoMessages::EVT_ZAP_SUB_FAILED) //return messages_return::handled; else @@ -361,12 +373,12 @@ void CRemoteControl::getSubChannels() //printf("CRemoteControl::getSubChannels linkedServices.size %d\n", linkedServices.size()); for (unsigned int i=0; i< linkedServices.size(); i++) { -//printf("CRemoteControl::getSubChannels %s\n", linkedServices[i].name.c_str()); subChannels.push_back(CSubService( linkedServices[i].originalNetworkId, linkedServices[i].serviceId, linkedServices[i].transportStreamId, linkedServices[i].name)); +//printf("CRemoteControl::getSubChannels %s: %016llx\n", linkedServices[i].name.c_str(), subChannels[i].getChannelID()); if ((subChannels[i].getChannelID()&0xFFFFFFFFFFFFULL) == (current_channel_id&0xFFFFFFFFFFFFULL)) selected_subchannel = i; } @@ -606,7 +618,7 @@ const std::string & CRemoteControl::setSubChannel(const int numSub, const bool f g_Zapit->zapTo_subServiceID_NOWAIT( current_sub_channel_id ); // Houdini: to restart reading the private EPG when switching to a new option - g_Sectionsd->setServiceChanged( current_sub_channel_id , true ); + //g_Sectionsd->setServiceChanged( current_sub_channel_id , true ); return subChannels[numSub].subservice_name; } @@ -650,7 +662,6 @@ const std::string & CRemoteControl::subChannelDown(void) } } -void stopAutoRecord(); void CRemoteControl::zapTo_ChannelID(const t_channel_id channel_id, const std::string & channame, const bool start_video) // UTF-8 { current_channel_id = channel_id; @@ -675,7 +686,7 @@ void CRemoteControl::zapTo_ChannelID(const t_channel_id channel_id, const std::s needs_nvods = false; director_mode = 0; - uint64_t now = getcurrenttime(); + uint64_t now = time_monotonic_ms(); if ( zap_completion_timeout < now ) { g_InfoViewer->chanready = 0; @@ -686,9 +697,9 @@ void CRemoteControl::zapTo_ChannelID(const t_channel_id channel_id, const std::s //dvbsub_pause(true); CZapit::getInstance()->Abort(); g_Zapit->zapTo_serviceID_NOWAIT(channel_id); - g_Sectionsd->setServiceChanged( current_channel_id&0xFFFFFFFFFFFFULL, false ); + //g_Sectionsd->setServiceChanged( current_channel_id, false ); - zap_completion_timeout = now + 2 * (int64_t) 1000000; + zap_completion_timeout = now + ZAP_GUARD_TIME; g_RCInput->killTimer( current_programm_timer ); } } diff --git a/src/driver/rcinput.cpp b/src/driver/rcinput.cpp index 12afd80b5..82cec5d03 100644 --- a/src/driver/rcinput.cpp +++ b/src/driver/rcinput.cpp @@ -1017,6 +1017,10 @@ printf("[neutrino] CSectionsdClient::EVT_GOT_CN_EPG\n"); *msg = NeutrinoMessages::EVT_PMT_CHANGED; *data = (neutrino_msg_data_t) p; break; + case CZapitClient::EVT_TUNE_COMPLETE: + *msg = NeutrinoMessages::EVT_TUNE_COMPLETE; + *data = (neutrino_msg_data_t) p; + break; default: printf("[neutrino] event INITID_ZAPIT - unknown eventID 0x%x\n", emsg.eventID ); } diff --git a/src/driver/record.cpp b/src/driver/record.cpp index d99baa94b..d77fe72b7 100644 --- a/src/driver/record.cpp +++ b/src/driver/record.cpp @@ -170,7 +170,7 @@ record_error_msg_t CRecordInstance::Start(CZapitChannel * channel /*, APIDList & apids[numpids++] = allpids.PIDs.pmtpid; if(record == NULL) - record = new cRecord(RECORD_DEMUX); + record = new cRecord(channel->getRecordDemux() /*RECORD_DEMUX*/); record->Open(); @@ -184,6 +184,9 @@ record_error_msg_t CRecordInstance::Start(CZapitChannel * channel /*, APIDList & return RECORD_FAILURE; } + if(!autoshift) + CFEManager::getInstance()->lockFrontend(frontend);//FIXME testing + start_time = time(0); SaveXml(); @@ -223,6 +226,9 @@ bool CRecordInstance::Stop(bool remove_event) SaveXml(); record->Stop(); + if(!autoshift) + CFEManager::getInstance()->unlockFrontend(frontend);//FIXME testing + CCamManager::getInstance()->Stop(channel_id, CCamManager::RECORD); if((autoshift && g_settings.auto_delete) /* || autoshift_delete*/) { @@ -806,7 +812,11 @@ bool CRecordManager::Record(const CTimerd::RecordingInfo * const eventinfo, cons nextmap.push_back((CTimerd::RecordingInfo *)evt); } } else if(recmap.size() < RECORD_MAX_COUNT) { - if(CutBackNeutrino(eventinfo->channel_id, mode)) { +#if 1//FIXME test + CZapitChannel * channel = CServiceManager::getInstance()->FindChannel(eventinfo->channel_id); + CFrontend * frontend = CFEManager::getInstance()->allocateFE(channel); +#endif + if(frontend && CutBackNeutrino(eventinfo->channel_id, mode)) { std::string newdir; if(dir && strlen(dir)) newdir = std::string(dir); @@ -818,6 +828,7 @@ bool CRecordManager::Record(const CTimerd::RecordingInfo * const eventinfo, cons if (inst == NULL) inst = new CRecordInstance(eventinfo, newdir, timeshift, StreamVTxtPid, StreamPmtPid); + inst->frontend = frontend; error_msg = inst->Record(); if(error_msg == RECORD_OK) { recmap.insert(std::pair(eventinfo->channel_id, inst)); @@ -1458,6 +1469,7 @@ bool CRecordManager::CutBackNeutrino(const t_channel_id channel_id, const int mo g_Zapit->setStandby(false); // this zap to live_channel_id t_channel_id live_channel_id = CZapit::getInstance()->GetCurrentChannelID(); +#if 0 if(live_channel_id != channel_id) { if(SAME_TRANSPONDER(live_channel_id, channel_id)) { printf("%s zapTo_record channel_id %llx\n", __FUNCTION__, channel_id); @@ -1467,7 +1479,7 @@ bool CRecordManager::CutBackNeutrino(const t_channel_id channel_id, const int mo } else { if (mode != last_mode && (last_mode != NeutrinoMessages::mode_standby || mode != CNeutrinoApp::getInstance()->getLastMode())) { CNeutrinoApp::getInstance()->handleMsg( NeutrinoMessages::CHANGEMODE , mode | NeutrinoMessages::norezap ); - // Wenn wir im Standby waren, dann brauchen wir fürs streamen nicht aufwachen... + // When we were on standby, then we need not wake up for streaming if(last_mode == NeutrinoMessages::mode_standby) CNeutrinoApp::getInstance()->handleMsg( NeutrinoMessages::CHANGEMODE , NeutrinoMessages::mode_standby); } @@ -1482,7 +1494,36 @@ bool CRecordManager::CutBackNeutrino(const t_channel_id channel_id, const int mo if(!ret) printf("%s: failed to change channel\n", __FUNCTION__); } +#endif + bool mode_changed = false; + if(live_channel_id != channel_id) { + bool found = false; + if(SAME_TRANSPONDER(live_channel_id, channel_id)) { + found = true; + } else { + for(recmap_iterator_t it = recmap.begin(); it != recmap.end(); it++) { + if(SAME_TRANSPONDER(it->first, channel_id)) { + found = true; + break; + } + } + } + if(found) { + ret = g_Zapit->zapTo_record(channel_id) > 0; + printf("%s found same tp, zapTo_record channel_id %llx result %d\n", __FUNCTION__, channel_id, ret); + } + else { + printf("%s mode %d last_mode %d getLastMode %d\n", __FUNCTION__, mode, last_mode, CNeutrinoApp::getInstance()->getLastMode()); + if (mode != last_mode && (last_mode != NeutrinoMessages::mode_standby || mode != CNeutrinoApp::getInstance()->getLastMode())) { + CNeutrinoApp::getInstance()->handleMsg( NeutrinoMessages::CHANGEMODE , mode | NeutrinoMessages::norezap ); + mode_changed = true; + } + + ret = g_Zapit->zapTo_serviceID(channel_id) > 0; + printf("%s zapTo_serviceID channel_id %llx result %d\n", __FUNCTION__, channel_id, ret); + } + } if(ret) { if(StopSectionsd) { printf("%s: g_Sectionsd->setPauseScanning(true)\n", __FUNCTION__); @@ -1494,6 +1535,12 @@ bool CRecordManager::CutBackNeutrino(const t_channel_id channel_id, const int mo if(last_mode == NeutrinoMessages::mode_standby) g_Zapit->stopPlayBack(); } + if(last_mode == NeutrinoMessages::mode_standby) { + //CNeutrinoApp::getInstance()->handleMsg( NeutrinoMessages::CHANGEMODE , NeutrinoMessages::mode_standby); + g_RCInput->postMsg( NeutrinoMessages::CHANGEMODE , last_mode); + } else if(!ret && mode_changed /*mode != last_mode*/) + CNeutrinoApp::getInstance()->handleMsg( NeutrinoMessages::CHANGEMODE , last_mode); + printf("%s channel_id %llx mode %d : result %s\n", __FUNCTION__, channel_id, mode, ret ? "OK" : "BAD"); return ret; } diff --git a/src/driver/record.h b/src/driver/record.h index 992c3525e..bb1df82bb 100644 --- a/src/driver/record.h +++ b/src/driver/record.h @@ -35,6 +35,7 @@ #include #include #include +#include #if HAVE_COOL_HARDWARE #include @@ -123,6 +124,8 @@ class CRecordInstance bool Timeshift() { return autoshift; }; int tshift_mode; void SetStopMessage(const char* text) {rec_stop_msg = text;} ; + + CFrontend * frontend; }; typedef std::map recmap_t; diff --git a/src/eitd/FreesatTables.hpp b/src/eitd/FreesatTables.hpp new file mode 100644 index 000000000..68a33b3ac --- /dev/null +++ b/src/eitd/FreesatTables.hpp @@ -0,0 +1,3052 @@ +/* + * This table was derived from on-air transmissions. It certainly has omissions and + * almost certainly contains errors. Use entirely at your own risk. + */ +struct hufftab { + char last; + unsigned int value; + short bits; + char next; +}; + +#define START '\0' +#define STOP '\0' +#define ESCAPE '\1' + +static struct hufftab fsat_huffman1[] = +{ + { START, 0x00000000, 2, 'T'}, + { START, 0x40000000, 3, 'B'}, + { START, 0x60000000, 5, 'L'}, + { START, 0x68000000, 7, 'K'}, + { START, 0x6a000000, 8, '6'}, + { START, 0x6c000000, 6, 'Q'}, + { START, 0x70000000, 5, 'D'}, + { START, 0x78000000, 5, 'H'}, + { START, 0x80000000, 4, 'C'}, + { START, 0x90000000, 4, 'I'}, + { START, 0xa0000000, 5, 'R'}, + { START, 0xa8000000, 5, 'N'}, + { START, 0xb0000000, 5, 'E'}, + { START, 0xb8000000, 8, 'V'}, + { START, 0xb9000000, 10, 'Z'}, + { START, 0xb9400000, 11, '1'}, + { START, 0xb9600000, 11, '3'}, + { START, 0xb9800000, 9, '2'}, + { START, 0xba000000, 7, 'U'}, + { START, 0xbc000000, 6, 'G'}, + { START, 0xc0000000, 5, 'F'}, + { START, 0xc8000000, 5, 'A'}, + { START, 0xd0000000, 4, 'S'}, + { START, 0xe0000000, 5, 'M'}, + { START, 0xe8000000, 5, 'P'}, + { START, 0xf0000000, 5, 'W'}, + { START, 0xf8000000, 6, 'J'}, + { START, 0xfc000000, 7, 'O'}, + { START, 0xfe000000, 8, 'Y'}, + { START, 0xff400000, 11, '4'}, + { START, 0xff600000, 14, '5'}, + { START, 0xff698000, 18, 't'}, + { START, 0xff800000, 9, 'X'}, + { ' ', 0x00000000, 4, 'W'}, + { ' ', 0x10000000, 7, 'f'}, + { ' ', 0x12000000, 7, 'Q'}, + { ' ', 0x14000000, 8, '-'}, + { ' ', 0x15240000, 14, '.'}, + { ' ', 0x152c0000, 14, 'l'}, + { ' ', 0x15300000, 13, 'g'}, + { ' ', 0x15400000, 10, 'r'}, + { ' ', 0x15800000, 11, 'b'}, + { ' ', 0x15a00000, 12, 'v'}, + { ' ', 0x15b00000, 12, 'd'}, + { ' ', 0x15f00000, 13, 'u'}, + { ' ', 0x16000000, 7, 'V'}, + { ' ', 0x18000000, 5, 'I'}, + { ' ', 0x20000000, 5, 'G'}, + { ' ', 0x28000000, 7, STOP}, + { ' ', 0x2a000000, 7, 'w'}, + { ' ', 0x2c000000, 6, 'U'}, + { ' ', 0x30000000, 4, 'M'}, + { ' ', 0x40000000, 4, 'C'}, + { ' ', 0x50000000, 4, 'B'}, + { ' ', 0x60000000, 5, 'H'}, + { ' ', 0x68000000, 5, 'D'}, + { ' ', 0x70000000, 4, 'P'}, + { ' ', 0x80000000, 5, 'o'}, + { ' ', 0x88000000, 5, 'A'}, + { ' ', 0x90000000, 4, 'T'}, + { ' ', 0xa0000000, 5, 't'}, + { ' ', 0xa8000000, 9, '&'}, + { ' ', 0xa8800000, 10, '5'}, + { ' ', 0xa8c00000, 10, 'Z'}, + { ' ', 0xa9000000, 8, '1'}, + { ' ', 0xaa000000, 11, '\''}, + { ' ', 0xaa200000, 11, '0'}, + { ' ', 0xaa400000, 10, '9'}, + { ' ', 0xab000000, 11, '6'}, + { ' ', 0xab200000, 12, 'n'}, + { ' ', 0xab300000, 12, '8'}, + { ' ', 0xab400000, 10, 's'}, + { ' ', 0xab800000, 10, '4'}, + { ' ', 0xabc00000, 10, '3'}, + { ' ', 0xac000000, 6, 'O'}, + { ' ', 0xb0000000, 5, 'a'}, + { ' ', 0xb8000000, 5, 'F'}, + { ' ', 0xc0000000, 4, 'N'}, + { ' ', 0xd0000000, 5, 'L'}, + { ' ', 0xd8000000, 5, 'R'}, + { ' ', 0xe0000000, 7, '2'}, + { ' ', 0xe2000000, 7, 'K'}, + { ' ', 0xe4000000, 6, 'J'}, + { ' ', 0xe8000000, 6, 'E'}, + { ' ', 0xec000000, 7, 'Y'}, + { ' ', 0xee000000, 7, 'i'}, + { ' ', 0xf0000000, 4, 'S'}, + { '!', 0x40000000, 2, ' '}, + { '!', 0x80000000, 8, STOP}, + { '&', 0x40000000, 2, 'B'}, + { '&', 0x80000000, 1, ' '}, + { '%', 0x80000000, 1, ' '}, + { ',', 0x80000000, 1, ' '}, + { '-', 0x0c000000, 7, 'L'}, + { '-', 0x1c000000, 6, 'I'}, + { '-', 0x20000000, 8, 'P'}, + { '-', 0x38000000, 10, 'E'}, + { '-', 0x40000000, 4, 'U'}, + { '-', 0x5d000000, 8, 'i'}, + { '-', 0x84000000, 7, 'D'}, + { '-', 0x96af8000, 17, 'H'}, + { '-', 0xb0000000, 4, 'S'}, + { '-', 0xc0000000, 2, ' '}, + { '.', 0x08000000, 5, 'T'}, + { '.', 0x19600000, 13, ESCAPE}, + { '.', 0x1a000000, 8, 'W'}, + { '.', 0x20000000, 4, ' '}, + { '.', 0x40000000, 2, STOP}, + { '.', 0x80000000, 1, '.'}, + { '/', 0x40000000, 3, '7'}, + { '0', 0x40000000, 2, ' '}, + { '0', 0x80000000, 3, '6'}, + { '0', 0xa0000000, 4, STOP}, + { '0', 0xb0000000, 6, '8'}, + { '0', 0xb4000000, 7, 's'}, + { '0', 0xb7000000, 9, '/'}, + { '0', 0xb7800000, 9, '%'}, + { '0', 0xb8000000, 5, '7'}, + { '0', 0xc0000000, 2, '0'}, + { '1', 0x30000000, 4, ' '}, + { '1', 0x40000000, 2, STOP}, + { '1', 0x8c000000, 6, ':'}, + { '1', 0x98000000, 6, '\''}, + { '1', 0xa0000000, 3, '0'}, + { '1', 0xc0000000, 5, '3'}, + { '1', 0xc8000000, 6, 'X'}, + { '1', 0xcc000000, 6, '9'}, + { '1', 0xe0000000, 3, '1'}, + { '2', 0x00000000, 1, '0'}, + { '2', 0x80000000, 5, ':'}, + { '2', 0x90000000, 4, ' '}, + { '2', 0xa0000000, 3, STOP}, + { '2', 0xc0000000, 2, '4'}, + { '3', 0x00000000, 1, ' '}, + { '3', 0x80000000, 8, STOP}, + { '3', 0xe0000000, 5, '0'}, + { '3', 0xe8000000, 7, ':'}, + { '4', 0x00000000, 8, STOP}, + { '4', 0x52000000, 8, 'M'}, + { '4', 0x90000000, 4, ':'}, + { '4', 0xa0000000, 3, '-'}, + { '4', 0xc0000000, 2, ' '}, + { '5', 0xa0000000, 3, '0'}, + { '5', 0xc0000000, 2, ' '}, + { '6', 0x40000000, 2, ' '}, + { '6', 0x80000000, 2, '0'}, + { '6', 0xc6000000, 7, '4'}, + { '6', 0xd8000000, 6, '8'}, + { '6', 0xe0000000, 3, ':'}, + { '7', 0x80000000, 8, STOP}, + { '8', 0x00000000, 2, '0'}, + { '8', 0x84000000, 7, ':'}, + { '8', 0x86800000, 9, STOP}, + { '8', 0x87800000, 10, '.'}, + { '8', 0x88000000, 5, ' '}, + { '9', 0x00000000, 1, '1'}, + { '9', 0x80000000, 4, '9'}, + { '9', 0x98000000, 5, '0'}, + { '9', 0xa0000000, 3, '6'}, + { '9', 0xc0000000, 3, STOP}, + { ':', 0x00000000, 2, '0'}, + { ':', 0x58000000, 8, ESCAPE}, + { ':', 0x59000000, 8, 'T'}, + { ':', 0x60000000, 3, '.'}, + { ':', 0x80000000, 1, ' '}, + { '?', 0x20000000, 3, ':'}, + { '?', 0x40000000, 2, ' '}, + { '?', 0x80000000, 2, STOP}, + { 'A', 0x00000000, 4, 'm'}, + { 'A', 0x10000000, 5, 'w'}, + { 'A', 0x18000000, 6, 'u'}, + { 'A', 0x1c000000, 6, STOP}, + { 'A', 0x20000000, 3, 'r'}, + { 'A', 0x40000000, 3, ' '}, + { 'A', 0x68000000, 5, 'c'}, + { 'A', 0x70000000, 4, 'g'}, + { 'A', 0x80000000, 3, 'l'}, + { 'A', 0xa2000000, 7, 'v'}, + { 'A', 0xa8000000, 5, 't'}, + { 'A', 0xb0000000, 5, 'f'}, + { 'A', 0xb8000000, 5, 'i'}, + { 'A', 0xc0000000, 3, 'n'}, + { 'A', 0xe0000000, 5, 's'}, + { 'A', 0xe8000000, 6, 'b'}, + { 'A', 0xec000000, 7, 'p'}, + { 'A', 0xef180000, 13, '\''}, + { 'A', 0xef400000, 12, 'y'}, + { 'A', 0xf0000000, 4, 'd'}, + { 'B', 0x00000000, 2, 'C'}, + { 'B', 0x40000000, 2, 'B'}, + { 'B', 0x80000000, 6, STOP}, + { 'B', 0x84000000, 7, 'y'}, + { 'B', 0x87a00000, 11, 'h'}, + { 'B', 0x87e00000, 11, ' '}, + { 'B', 0x88000000, 5, 'l'}, + { 'B', 0x90000000, 4, 'i'}, + { 'B', 0xa0000000, 3, 'r'}, + { 'B', 0xc0000000, 4, 'o'}, + { 'B', 0xd0000000, 4, 'u'}, + { 'B', 0xe0000000, 4, 'a'}, + { 'B', 0xf0000000, 4, 'e'}, + { 'C', 0x00000000, 2, 'o'}, + { 'C', 0x40000000, 2, ' '}, + { 'C', 0x80000000, 3, 'l'}, + { 'C', 0xa0000000, 4, 'r'}, + { 'C', 0xb0000000, 5, 'i'}, + { 'C', 0xb8000000, 5, 'e'}, + { 'C', 0xc0000000, 3, 'h'}, + { 'C', 0xe0000000, 4, 'a'}, + { 'C', 0xf0000000, 6, 'u'}, + { 'C', 0xf4000000, 6, 'B'}, + { 'C', 0xf8000000, 7, 'y'}, + { 'C', 0xfa800000, 11, '4'}, + { 'C', 0xfc000000, 7, '!'}, + { 'C', 0xfe000000, 9, STOP}, + { 'C', 0xfea00000, 11, 'D'}, + { 'C', 0xfec00000, 10, 'I'}, + { 'C', 0xff000000, 9, 'S'}, + { 'D', 0x00000000, 3, 'r'}, + { 'D', 0x28400000, 10, 'h'}, + { 'D', 0x29800000, 9, '&'}, + { 'D', 0x2a000000, 7, 'J'}, + { 'D', 0x2c000000, 6, ' '}, + { 'D', 0x30000000, 7, 'y'}, + { 'D', 0x32000000, 9, '\''}, + { 'D', 0x32a00000, 11, 'N'}, + { 'D', 0x38000000, 5, 'u'}, + { 'D', 0x40000000, 2, 'o'}, + { 'D', 0x80000000, 2, 'a'}, + { 'D', 0xc0000000, 3, 'e'}, + { 'D', 0xe0000000, 3, 'i'}, + { 'E', 0x00000000, 2, 'm'}, + { 'E', 0x40000000, 4, 'E'}, + { 'E', 0x50000000, 5, 'F'}, + { 'E', 0x58000000, 6, 'u'}, + { 'E', 0x5d000000, 9, 'g'}, + { 'E', 0x5e000000, 7, 's'}, + { 'E', 0x60000000, 3, 'v'}, + { 'E', 0x80000000, 4, STOP}, + { 'E', 0x90000000, 6, 'r'}, + { 'E', 0x96000000, 8, 'R'}, + { 'E', 0x98000000, 5, 'd'}, + { 'E', 0xa0000000, 3, 'n'}, + { 'E', 0xc6000000, 8, '\''}, + { 'E', 0xc7000000, 8, ' '}, + { 'E', 0xc8000000, 5, 'l'}, + { 'E', 0xd0000000, 4, 'x'}, + { 'E', 0xe0000000, 3, 'a'}, + { 'F', 0x00000000, 2, 'i'}, + { 'F', 0x40000000, 4, 'e'}, + { 'F', 0x50000000, 7, 'A'}, + { 'F', 0x52000000, 8, ' '}, + { 'F', 0x53000000, 9, 'h'}, + { 'F', 0x54000000, 7, 'O'}, + { 'F', 0x57200000, 11, 'I'}, + { 'F', 0x57600000, 11, '1'}, + { 'F', 0x58000000, 5, 'l'}, + { 'F', 0x60000000, 3, 'r'}, + { 'F', 0x80000000, 2, 'a'}, + { 'F', 0xc0000000, 3, 'u'}, + { 'F', 0xe0000000, 3, 'o'}, + { 'G', 0x00000000, 8, ':'}, + { 'G', 0x01300000, 13, ESCAPE}, + { 'G', 0x01400000, 11, 'A'}, + { 'G', 0x01600000, 12, 'T'}, + { 'G', 0x02000000, 7, 'y'}, + { 'G', 0x04000000, 6, 'h'}, + { 'G', 0x08000000, 5, 'u'}, + { 'G', 0x1a800000, 10, 'P'}, + { 'G', 0x1ac00000, 10, ' '}, + { 'G', 0x1b000000, 8, 'C'}, + { 'G', 0x1c000000, 6, 'l'}, + { 'G', 0x20000000, 3, 'M'}, + { 'G', 0x40000000, 3, 'a'}, + { 'G', 0x60000000, 3, 'o'}, + { 'G', 0x80000000, 2, 'r'}, + { 'G', 0xc0000000, 3, 'i'}, + { 'G', 0xe0000000, 3, 'e'}, + { 'H', 0x00000000, 1, 'o'}, + { 'H', 0x80000000, 3, 'a'}, + { 'H', 0xa0000000, 3, 'i'}, + { 'H', 0xc0000000, 3, 'e'}, + { 'H', 0xe0000000, 4, 'u'}, + { 'H', 0xf0000000, 5, 'R'}, + { 'H', 0xfe200000, 14, ESCAPE}, + { 'H', 0xfe280000, 13, 'D'}, + { 'H', 0xff000000, 9, 'S'}, + { 'I', 0x00000000, 1, 'T'}, + { 'I', 0x80000000, 3, 's'}, + { 'I', 0xa0000000, 3, 'n'}, + { 'I', 0xc0000000, 6, 'I'}, + { 'I', 0xc4000000, 6, STOP}, + { 'I', 0xc8000000, 5, ' '}, + { 'I', 0xd0000000, 4, 't'}, + { 'I', 0xe4000000, 6, 'm'}, + { 'I', 0xe8000000, 5, '\''}, + { 'I', 0xf0000000, 8, 'a'}, + { 'I', 0xf6900000, 13, ','}, + { 'I', 0xf6980000, 13, 'A'}, + { 'I', 0xf6c00000, 11, 'f'}, + { 'I', 0xf6e00000, 12, 'o'}, + { 'I', 0xf7000000, 9, 'c'}, + { 'I', 0xf7800000, 11, 'l'}, + { 'I', 0xf7a80000, 13, 'g'}, + { 'I', 0xf7d40000, 14, 'b'}, + { 'I', 0xf8000000, 5, 'r'}, + { 'J', 0x00000000, 2, 'a'}, + { 'J', 0x40000000, 2, 'u'}, + { 'J', 0x80000000, 5, ' '}, + { 'J', 0x8c800000, 9, 's'}, + { 'J', 0x8d900000, 12, 'D'}, + { 'J', 0x90000000, 4, 'i'}, + { 'J', 0xa0000000, 3, 'o'}, + { 'J', 0xc0000000, 2, 'e'}, + { 'K', 0x00000000, 4, 'a'}, + { 'K', 0x10000000, 8, STOP}, + { 'K', 0x18000000, 5, 'r'}, + { 'K', 0x20000000, 3, 'e'}, + { 'K', 0x40000000, 2, 'i'}, + { 'K', 0x80000000, 4, 'o'}, + { 'K', 0x92800000, 9, 'w'}, + { 'K', 0x93000000, 8, 'G'}, + { 'K', 0x98000000, 6, 'n'}, + { 'K', 0xa0000000, 3, ' '}, + { 'K', 0xc0000000, 2, 'y'}, + { 'L', 0x00000000, 2, 'a'}, + { 'L', 0x40000000, 3, 'e'}, + { 'L', 0x60000000, 7, 'l'}, + { 'L', 0x63000000, 8, 'y'}, + { 'L', 0x68000000, 5, 'K'}, + { 'L', 0x70000000, 4, 'u'}, + { 'L', 0x80000000, 2, 'o'}, + { 'L', 0xc0000000, 2, 'i'}, + { 'M', 0x00000000, 3, 'e'}, + { 'M', 0x20000000, 4, 'T'}, + { 'M', 0x30000000, 5, STOP}, + { 'M', 0x38200000, 11, 'h'}, + { 'M', 0x38c00000, 10, ' '}, + { 'M', 0x39000000, 8, 'r'}, + { 'M', 0x3a000000, 8, 'E'}, + { 'M', 0x3b000000, 10, '1'}, + { 'M', 0x3c000000, 6, 'c'}, + { 'M', 0x40000000, 2, 'a'}, + { 'M', 0x80000000, 2, 'o'}, + { 'M', 0xc0000000, 4, 'y'}, + { 'M', 0xd0000000, 4, 'u'}, + { 'M', 0xe0000000, 3, 'i'}, + { 'N', 0x00000000, 2, 'o'}, + { 'N', 0x45400000, 12, 'M'}, + { 'N', 0x45c00000, 11, 'A'}, + { 'N', 0x48000000, 5, 'u'}, + { 'N', 0x50000000, 4, 'a'}, + { 'N', 0x60000000, 3, 'i'}, + { 'N', 0x80000000, 1, 'e'}, + { 'O', 0x00000000, 3, '\''}, + { 'O', 0x30000000, 4, 'l'}, + { 'O', 0x40000000, 3, 'f'}, + { 'O', 0x60800000, 9, 'g'}, + { 'O', 0x62000000, 8, 'x'}, + { 'O', 0x64000000, 6, 'S'}, + { 'O', 0x68000000, 5, 'r'}, + { 'O', 0x70000000, 5, 'd'}, + { 'O', 0x7c000000, 6, 'b'}, + { 'O', 0x80000000, 5, 'p'}, + { 'O', 0x8a800000, 9, 'a'}, + { 'O', 0x8c000000, 6, 'v'}, + { 'O', 0x90000000, 4, 'm'}, + { 'O', 0xa8000000, 6, 'w'}, + { 'O', 0xac000000, 6, 'U'}, + { 'O', 0xb0000000, 5, STOP}, + { 'O', 0xbe000000, 8, 's'}, + { 'O', 0xc0000000, 3, 'u'}, + { 'O', 0xe0000000, 3, 'n'}, + { 'P', 0x00000000, 3, 'e'}, + { 'P', 0x20000000, 3, 'a'}, + { 'P', 0x40000000, 2, 'r'}, + { 'P', 0x80000000, 2, 'l'}, + { 'P', 0xc0000000, 6, 'D'}, + { 'P', 0xc4000000, 6, 'u'}, + { 'P', 0xc8000000, 8, ' '}, + { 'P', 0xc9800000, 9, 'M'}, + { 'P', 0xcb800000, 11, ':'}, + { 'P', 0xcbc60000, 15, ESCAPE}, + { 'P', 0xcbe80000, 13, 'G'}, + { 'P', 0xcc000000, 6, 'h'}, + { 'P', 0xd0000000, 4, 'i'}, + { 'P', 0xe0000000, 3, 'o'}, + { 'Q', 0x68000000, 5, 'C'}, + { 'Q', 0x80000000, 1, 'u'}, + { 'R', 0x00000000, 2, 'a'}, + { 'R', 0x40000000, 2, 'o'}, + { 'R', 0x80000000, 3, 'i'}, + { 'R', 0xa4540000, 15, ESCAPE}, + { 'R', 0xa4600000, 12, ' '}, + { 'R', 0xa4c00000, 10, 'n'}, + { 'R', 0xa6000000, 7, STOP}, + { 'R', 0xa8000000, 5, 'E'}, + { 'R', 0xb0000000, 4, 'u'}, + { 'R', 0xc0000000, 2, 'e'}, + { 'S', 0x00000000, 5, 'n'}, + { 'S', 0x0a000000, 7, 'A'}, + { 'S', 0x0c000000, 6, 'w'}, + { 'S', 0x10000000, 4, 'a'}, + { 'S', 0x20000000, 3, 'o'}, + { 'S', 0x40000000, 3, 'p'}, + { 'S', 0x60000000, 3, 'u'}, + { 'S', 0x80000000, 8, 'O'}, + { 'S', 0x81000000, 9, 'y'}, + { 'S', 0x83000000, 8, ' '}, + { 'S', 0x84000000, 7, 'l'}, + { 'S', 0x86000000, 9, 'E'}, + { 'S', 0x86800000, 11, 'g'}, + { 'S', 0x88000000, 5, 'i'}, + { 'S', 0x90000000, 4, 'e'}, + { 'S', 0xa0000000, 6, 'm'}, + { 'S', 0xa4000000, 7, 'q'}, + { 'S', 0xa8000000, 5, 'k'}, + { 'S', 0xb0000000, 4, 'c'}, + { 'S', 0xc0000000, 3, 'h'}, + { 'S', 0xe0000000, 3, 't'}, + { 'T', 0x00000000, 1, 'h'}, + { 'T', 0x80000000, 4, 'e'}, + { 'T', 0x90000000, 4, 'r'}, + { 'T', 0xa0000000, 3, 'o'}, + { 'T', 0xc0000000, 5, 'a'}, + { 'T', 0xc83e1600, 24, '-'}, + { 'T', 0xc9000000, 8, 'y'}, + { 'T', 0xcb800000, 9, '4'}, + { 'T', 0xcc000000, 6, 'i'}, + { 'T', 0xd0000000, 5, 'w'}, + { 'T', 0xd9000000, 10, ' '}, + { 'T', 0xdc000000, 8, 'u'}, + { 'T', 0xdd000000, 8, 'W'}, + { 'T', 0xde000000, 7, 'H'}, + { 'T', 0xe0000000, 3, 'V'}, + { 'U', 0x00000000, 1, 'n'}, + { 'U', 0x80000000, 2, 'p'}, + { 'U', 0xc0000000, 5, 'R'}, + { 'U', 0xc8800000, 9, 'r'}, + { 'U', 0xce000000, 8, 'E'}, + { 'U', 0xd0000000, 4, 'K'}, + { 'U', 0xe0000000, 5, 'S'}, + { 'U', 0xec000000, 6, 's'}, + { 'U', 0xf0000000, 4, 'l'}, + { 'V', 0x20000000, 4, 'e'}, + { 'V', 0x30000000, 4, 'a'}, + { 'V', 0x50000000, 7, '\''}, + { 'V', 0x52000000, 7, '4'}, + { 'V', 0x58000000, 10, 's'}, + { 'V', 0x58e00000, 14, ESCAPE}, + { 'V', 0x5a000000, 7, 'o'}, + { 'V', 0x5c000000, 8, STOP}, + { 'V', 0x60000000, 3, 'i'}, + { 'V', 0x80000000, 1, ' '}, + { 'W', 0x10000000, 5, 'O'}, + { 'W', 0x18000000, 5, 'r'}, + { 'W', 0x20000000, 3, 'h'}, + { 'W', 0x40000000, 2, 'o'}, + { 'W', 0x80000000, 3, 'a'}, + { 'W', 0xa0000000, 3, 'i'}, + { 'W', 0xc0000000, 2, 'e'}, + { 'X', 0x80000000, 2, ' '}, + { 'X', 0xc0000000, 2, 't'}, + { 'Y', 0x40000000, 2, 'e'}, + { 'Y', 0x80000000, 1, 'o'}, + { 'Z', 0x00000000, 2, 'a'}, + { 'Z', 0x70000000, 5, 'e'}, + { 'Z', 0x7e000000, 8, STOP}, + { 'Z', 0x80000000, 1, 'o'}, + { '\'', 0x00000000, 3, 'm'}, + { '\'', 0x20000000, 4, 't'}, + { '\'', 0x30000000, 4, ' '}, + { '\'', 0x40000000, 3, 'C'}, + { '\'', 0x60000000, 5, 'd'}, + { '\'', 0x68000000, 8, 'G'}, + { '\'', 0x69700000, 13, 'K'}, + { '\'', 0x6c000000, 6, 'r'}, + { '\'', 0x70000000, 5, 'v'}, + { '\'', 0x79000000, 8, 'l'}, + { '\'', 0x7a400000, 10, STOP}, + { '\'', 0x7b800000, 13, '0'}, + { '\'', 0x7b880000, 14, ESCAPE}, + { '\'', 0x80000000, 1, 's'}, + { 'a', 0x00000000, 7, 'e'}, + { 'a', 0x02000000, 7, '\''}, + { 'a', 0x04000000, 10, '!'}, + { 'a', 0x04600000, 11, 'a'}, + { 'a', 0x04800000, 9, ':'}, + { 'a', 0x05000000, 8, 'f'}, + { 'a', 0x06000000, 7, 'w'}, + { 'a', 0x08000000, 6, 'b'}, + { 'a', 0x0c000000, 8, STOP}, + { 'a', 0x10000000, 4, 'm'}, + { 'a', 0x20000000, 3, 'r'}, + { 'a', 0x40000000, 4, 'c'}, + { 'a', 0x50000000, 10, 'o'}, + { 'a', 0x50400000, 10, 'x'}, + { 'a', 0x50900000, 13, 'j'}, + { 'a', 0x50e00000, 11, ','}, + { 'a', 0x51000000, 8, 'h'}, + { 'a', 0x52000000, 7, 'u'}, + { 'a', 0x54000000, 7, 'z'}, + { 'a', 0x56000000, 7, 'v'}, + { 'a', 0x58000000, 6, 'p'}, + { 'a', 0x5c000000, 6, 'g'}, + { 'a', 0x60000000, 3, 't'}, + { 'a', 0x80000000, 3, 'l'}, + { 'a', 0xa0000000, 4, 's'}, + { 'a', 0xb0000000, 5, ' '}, + { 'a', 0xb8000000, 5, 'd'}, + { 'a', 0xb8000000, 5, 'd'}, + { 'a', 0xc0000000, 3, 'n'}, + { 'a', 0xe0000000, 4, 'y'}, + { 'a', 0xf0000000, 5, 'i'}, + { 'a', 0xf8000000, 5, 'k'}, + { 'b', 0x00000000, 3, 'r'}, + { 'b', 0x20000000, 3, 'o'}, + { 'b', 0x40000000, 3, 'e'}, + { 'b', 0x60000000, 3, 'a'}, + { 'b', 0x80000000, 3, 'i'}, + { 'b', 0xa0000000, 6, 'h'}, + { 'b', 0xa4000000, 7, ':'}, + { 'b', 0xa6400000, 10, 't'}, + { 'b', 0xa8000000, 5, 's'}, + { 'b', 0xb0000000, 4, 'u'}, + { 'b', 0xc0000000, 4, 'y'}, + { 'b', 0xd0000000, 4, 'l'}, + { 'b', 0xe0000000, 5, 'b'}, + { 'b', 0xe8000000, 5, STOP}, + { 'b', 0xf0000000, 4, ' '}, + { 'c', 0x00000000, 2, 'k'}, + { 'c', 0x40000000, 3, 'o'}, + { 'c', 0x60000000, 6, 'l'}, + { 'c', 0x64000000, 6, 'y'}, + { 'c', 0x68000000, 6, 's'}, + { 'c', 0x6c000000, 6, STOP}, + { 'c', 0x70000000, 4, 'r'}, + { 'c', 0x80000000, 3, 'h'}, + { 'c', 0xa0000000, 5, ' '}, + { 'c', 0xa8000000, 7, 'c'}, + { 'c', 0xaa000000, 8, ':'}, + { 'c', 0xac500000, 12, '\''}, + { 'c', 0xac600000, 11, 'A'}, + { 'c', 0xac800000, 9, 'D'}, + { 'c', 0xad400000, 11, 'q'}, + { 'c', 0xad680000, 13, 'I'}, + { 'c', 0xae000000, 7, 'u'}, + { 'c', 0xb0000000, 5, 'i'}, + { 'c', 0xb8000000, 5, 'a'}, + { 'c', 0xc0000000, 3, 't'}, + { 'c', 0xe0000000, 3, 'e'}, + { 'd', 0x00000000, 5, 'o'}, + { 'd', 0x08000000, 7, '\''}, + { 'd', 0x0a000000, 8, ':'}, + { 'd', 0x0b000000, 8, 'h'}, + { 'd', 0x0c000000, 6, 'u'}, + { 'd', 0x10000000, 4, 'y'}, + { 'd', 0x20000000, 3, 'e'}, + { 'd', 0x40000000, 4, 'i'}, + { 'd', 0x50000000, 5, 'd'}, + { 'd', 0x58000000, 6, 'r'}, + { 'd', 0x5c000000, 6, 'l'}, + { 'd', 0x60000000, 4, 's'}, + { 'd', 0x70000000, 8, 'c'}, + { 'd', 0x71c00000, 10, 'm'}, + { 'd', 0x72000000, 8, 'n'}, + { 'd', 0x73000000, 8, 'w'}, + { 'd', 0x74000000, 6, 'v'}, + { 'd', 0x78000000, 6, 'g'}, + { 'd', 0x7c000000, 9, '!'}, + { 'd', 0x7c800000, 9, '-'}, + { 'd', 0x7d000000, 9, 'f'}, + { 'd', 0x7d800000, 10, ','}, + { 'd', 0x7dc00000, 11, 't'}, + { 'd', 0x7de00000, 11, 'b'}, + { 'd', 0x7e000000, 7, '.'}, + { 'd', 0x80000000, 3, STOP}, + { 'd', 0xa0000000, 3, 'a'}, + { 'd', 0xc0000000, 2, ' '}, + { 'e', 0x00000000, 3, 's'}, + { 'e', 0x20000000, 4, 't'}, + { 'e', 0x30000000, 8, 'g'}, + { 'e', 0x31000000, 8, 'f'}, + { 'e', 0x32000000, 8, 'x'}, + { 'e', 0x33000000, 10, 'P'}, + { 'e', 0x33400000, 10, 'B'}, + { 'e', 0x33800000, 9, 'h'}, + { 'e', 0x34000000, 7, 'i'}, + { 'e', 0x36000000, 7, 'p'}, + { 'e', 0x38000000, 6, 'm'}, + { 'e', 0x3c000000, 7, 'b'}, + { 'e', 0x3e000000, 8, 'k'}, + { 'e', 0x3f000000, 8, ':'}, + { 'e', 0x40000000, 2, ' '}, + { 'e', 0x80000000, 5, 'l'}, + { 'e', 0x88000000, 6, 'c'}, + { 'e', 0x8c000000, 6, 'd'}, + { 'e', 0x90000000, 4, 'n'}, + { 'e', 0xa0000000, 3, 'r'}, + { 'e', 0xc0000000, 8, STOP}, + { 'e', 0xd0000000, 7, 'v'}, + { 'e', 0xd2000000, 10, ','}, + { 'e', 0xd2400000, 11, '4'}, + { 'e', 0xd2600000, 11, '?'}, + { 'e', 0xd2800000, 9, '.'}, + { 'e', 0xd3000000, 8, 'o'}, + { 'e', 0xd4000000, 8, '\''}, + { 'e', 0xd5000000, 10, 'V'}, + { 'e', 0xd5400000, 10, 'z'}, + { 'e', 0xd5820000, 15, 'G'}, + { 'e', 0xd5840000, 14, 'q'}, + { 'e', 0xd5880000, 13, '!'}, + { 'e', 0xd5900000, 12, '-'}, + { 'e', 0xd5a00000, 11, 'u'}, + { 'e', 0xd5c00000, 10, 'j'}, + { 'e', 0xd6000000, 7, 'y'}, + { 'e', 0xd8000000, 5, 'e'}, + { 'e', 0xe0000000, 4, 'a'}, + { 'e', 0xf0000000, 4, 'w'}, + { 'f', 0x00000000, 1, ' '}, + { 'f', 0x80000000, 5, '.'}, + { 'f', 0x88000000, 6, STOP}, + { 'f', 0x8cb00000, 12, 's'}, + { 'f', 0x8d000000, 8, 'y'}, + { 'f', 0x8e700000, 12, ':'}, + { 'f', 0x8f000000, 8, 'u'}, + { 'f', 0x90000000, 4, 't'}, + { 'f', 0xa0000000, 3, 'o'}, + { 'f', 0xc0000000, 4, 'a'}, + { 'f', 0xd0000000, 4, 'i'}, + { 'f', 0xe0000000, 5, 'r'}, + { 'f', 0xe8000000, 5, 'f'}, + { 'f', 0xf0000000, 4, 'e'}, + { 'g', 0x00000000, 2, 'h'}, + { 'g', 0x40000000, 8, STOP}, + { 'g', 0x60000000, 3, 'e'}, + { 'g', 0x80000000, 2, ' '}, + { 'g', 0xc0000000, 4, 'i'}, + { 'g', 0xd0000000, 6, 's'}, + { 'g', 0xd5000000, 10, '.'}, + { 'g', 0xd5800000, 10, '\''}, + { 'g', 0xd5c00000, 10, 't'}, + { 'g', 0xd6000000, 7, 'b'}, + { 'g', 0xd8000000, 7, 'g'}, + { 'g', 0xda000000, 7, 'o'}, + { 'g', 0xdc000000, 6, 'l'}, + { 'g', 0xe0000000, 5, ':'}, + { 'g', 0xe8000000, 5, 'r'}, + { 'g', 0xf1000000, 11, 'w'}, + { 'g', 0xf1300000, 12, 'm'}, + { 'g', 0xf1400000, 10, 'y'}, + { 'g', 0xf1800000, 9, 'd'}, + { 'g', 0xf2000000, 7, 'n'}, + { 'g', 0xf4000000, 6, 'u'}, + { 'g', 0xf8000000, 5, 'a'}, + { 'h', 0x00000000, 1, 'e'}, + { 'h', 0x80000000, 6, 'b'}, + { 'h', 0x84000000, 6, 'u'}, + { 'h', 0x88000000, 8, 'w'}, + { 'h', 0x89000000, 8, 'd'}, + { 'h', 0x8a000000, 8, 'n'}, + { 'h', 0x8b000000, 8, 'y'}, + { 'h', 0x8d000000, 8, 'l'}, + { 'h', 0x8e000000, 9, '\''}, + { 'h', 0x8e800000, 10, 's'}, + { 'h', 0x8ec00000, 11, 'm'}, + { 'h', 0x8ee80000, 14, 'c'}, + { 'h', 0x8eee0000, 16, 'g'}, + { 'h', 0x8eef0000, 17, '-'}, + { 'h', 0x8f000000, 8, '.'}, + { 'h', 0x90000000, 4, 'i'}, + { 'h', 0xa0000000, 3, 'o'}, + { 'h', 0xc0000000, 4, 'a'}, + { 'h', 0xd0000000, 5, 'r'}, + { 'h', 0xd8000000, 8, STOP}, + { 'h', 0xe0000000, 4, ' '}, + { 'h', 0xf0000000, 4, 't'}, + { 'i', 0x00000000, 3, 'c'}, + { 'i', 0x20000000, 6, 'p'}, + { 'i', 0x24060000, 15, 'j'}, + { 'i', 0x24200000, 11, 'h'}, + { 'i', 0x24400000, 11, ':'}, + { 'i', 0x24600000, 11, 'w'}, + { 'i', 0x26000000, 8, 'x'}, + { 'i', 0x27000000, 10, 'u'}, + { 'i', 0x28000000, 5, 'a'}, + { 'i', 0x30000000, 5, 'v'}, + { 'i', 0x38000000, 6, ' '}, + { 'i', 0x3c000000, 7, 'z'}, + { 'i', 0x3e000000, 8, STOP}, + { 'i', 0x40000000, 2, 'n'}, + { 'i', 0x80000000, 5, 'r'}, + { 'i', 0x88000000, 5, 'd'}, + { 'i', 0x90000000, 4, 'o'}, + { 'i', 0xa0000000, 4, 'l'}, + { 'i', 0xb0000000, 5, 'm'}, + { 'i', 0xb8000000, 7, 'b'}, + { 'i', 0xba000000, 7, 'k'}, + { 'i', 0xbc000000, 6, 'f'}, + { 'i', 0xc0000000, 4, 'g'}, + { 'i', 0xd0000000, 4, 's'}, + { 'i', 0xe0000000, 4, 't'}, + { 'i', 0xf0000000, 4, 'e'}, + { 'j', 0x00000000, 1, 'y'}, + { 'j', 0x84000000, 6, 'i'}, + { 'j', 0x88000000, 5, 'u'}, + { 'j', 0x90000000, 4, 'a'}, + { 'j', 0xa0000000, 3, 'e'}, + { 'k', 0x00000000, 2, ' '}, + { 'k', 0x40000000, 3, 'i'}, + { 'k', 0x60000000, 4, 'y'}, + { 'k', 0x70000000, 4, 's'}, + { 'k', 0x80000000, 2, 'e'}, + { 'k', 0xc0000000, 8, STOP}, + { 'k', 0xe0000000, 8, '\''}, + { 'k', 0xe1000000, 11, 'b'}, + { 'k', 0xe1800000, 9, 'w'}, + { 'k', 0xe2000000, 7, ':'}, + { 'k', 0xe4000000, 6, 'a'}, + { 'k', 0xe8000000, 6, 'l'}, + { 'k', 0xec000000, 7, 'k'}, + { 'k', 0xee000000, 9, 'o'}, + { 'k', 0xeea00000, 12, '?'}, + { 'k', 0xeeb80000, 13, 't'}, + { 'k', 0xeee00000, 11, 'n'}, + { 'k', 0xf0000000, 4, 'f'}, + { 'l', 0x00000000, 3, 'l'}, + { 'l', 0x20000000, 5, 'u'}, + { 'l', 0x28000000, 6, 't'}, + { 'l', 0x2c000000, 6, 'm'}, + { 'l', 0x30000000, 4, 'y'}, + { 'l', 0x40000000, 2, 'e'}, + { 'l', 0x80000000, 8, STOP}, + { 'l', 0x90000000, 4, 'd'}, + { 'l', 0xa0000000, 3, 'a'}, + { 'l', 0xc0000000, 4, 'o'}, + { 'l', 0xd0000000, 5, 's'}, + { 'l', 0xd8000000, 8, 'f'}, + { 'l', 0xd9000000, 11, 'z'}, + { 'l', 0xd9400000, 10, '.'}, + { 'l', 0xd9800000, 9, 'v'}, + { 'l', 0xda000000, 7, 'k'}, + { 'l', 0xdc000000, 8, 'b'}, + { 'l', 0xdd000000, 9, ':'}, + { 'l', 0xdd800000, 10, 'w'}, + { 'l', 0xddc00000, 13, 'g'}, + { 'l', 0xdddb0000, 16, '?'}, + { 'l', 0xde000000, 8, '\''}, + { 'l', 0xdf000000, 8, 'c'}, + { 'l', 0xe0000000, 4, 'i'}, + { 'l', 0xf0000000, 4, ' '}, + { 'm', 0x00000000, 4, 'i'}, + { 'm', 0x10000000, 8, STOP}, + { 'm', 0x20000000, 3, 'm'}, + { 'm', 0x40000000, 4, 'y'}, + { 'm', 0x50000000, 5, 'b'}, + { 'm', 0x5a000000, 8, ':'}, + { 'm', 0x5b000000, 9, 'h'}, + { 'm', 0x5b800000, 13, ESCAPE}, + { 'm', 0x5ba00000, 11, '.'}, + { 'm', 0x5bc00000, 10, '\''}, + { 'm', 0x5c000000, 7, 'f'}, + { 'm', 0x5f000000, 9, 'w'}, + { 'm', 0x5f800000, 10, 'r'}, + { 'm', 0x5fc00000, 10, 'u'}, + { 'm', 0x60000000, 3, ' '}, + { 'm', 0x80000000, 2, 'e'}, + { 'm', 0xc0000000, 5, 'o'}, + { 'm', 0xc8000000, 6, 'n'}, + { 'm', 0xcc000000, 6, 's'}, + { 'm', 0xd0000000, 4, 'p'}, + { 'm', 0xe0000000, 3, 'a'}, + { 'n', 0x00000000, 3, 'i'}, + { 'n', 0x20000000, 7, 'r'}, + { 'n', 0x22000000, 8, 'v'}, + { 'n', 0x23000000, 10, '!'}, + { 'n', 0x23600000, 12, 'B'}, + { 'n', 0x23800000, 9, ','}, + { 'n', 0x24000000, 8, '-'}, + { 'n', 0x25000000, 8, '.'}, + { 'n', 0x26000000, 7, 'f'}, + { 'n', 0x28000000, 6, 'y'}, + { 'n', 0x2c000000, 7, 'u'}, + { 'n', 0x2e000000, 7, 'j'}, + { 'n', 0x30000000, 4, 'a'}, + { 'n', 0x40000000, 4, 's'}, + { 'n', 0x50000000, 6, '\''}, + { 'n', 0x54000000, 6, 'k'}, + { 'n', 0x58000000, 8, 'l'}, + { 'n', 0x59000000, 12, 'w'}, + { 'n', 0x59140000, 14, 'p'}, + { 'n', 0x59180000, 13, 'q'}, + { 'n', 0x59400000, 11, 'h'}, + { 'n', 0x59600000, 11, 'b'}, + { 'n', 0x59800000, 9, 'm'}, + { 'n', 0x5a000000, 8, 'x'}, + { 'n', 0x5b000000, 8, ':'}, + { 'n', 0x5c000000, 6, 'o'}, + { 'n', 0x60000000, 4, 'e'}, + { 'n', 0x70000000, 5, 'c'}, + { 'n', 0x78000000, 5, 'n'}, + { 'n', 0x80000000, 3, 'g'}, + { 'n', 0xa0000000, 3, ' '}, + { 'n', 0xc0000000, 3, 'd'}, + { 'n', 0xe0000000, 8, STOP}, + { 'n', 0xf0000000, 4, 't'}, + { 'o', 0x00000000, 2, 'r'}, + { 'o', 0x40000000, 4, 'f'}, + { 'o', 0x50000000, 4, ' '}, + { 'o', 0x60000000, 4, 'w'}, + { 'o', 0x70000000, 6, 'a'}, + { 'o', 0x74000000, 6, 'b'}, + { 'o', 0x78000000, 5, 't'}, + { 'o', 0x80000000, 4, 'o'}, + { 'o', 0x90000000, 5, 'c'}, + { 'o', 0x98000000, 6, 'y'}, + { 'o', 0x9c000000, 8, STOP}, + { 'o', 0xa0000000, 5, 'p'}, + { 'o', 0xa8000000, 5, 'd'}, + { 'o', 0xb0000000, 4, 'u'}, + { 'o', 0xc0000000, 3, 'n'}, + { 'o', 0xe0000000, 5, 'm'}, + { 'o', 0xe8000000, 6, 's'}, + { 'o', 0xec000000, 6, 'k'}, + { 'o', 0xf0000000, 5, 'l'}, + { 'o', 0xf8180000, 14, ','}, + { 'o', 0xf8200000, 11, '?'}, + { 'o', 0xf8400000, 11, ':'}, + { 'o', 0xf8600000, 12, '.'}, + { 'o', 0xf8800000, 9, 'h'}, + { 'o', 0xf9000000, 9, '!'}, + { 'o', 0xf9800000, 10, '\''}, + { 'o', 0xf9c00000, 11, 'z'}, + { 'o', 0xf9e00000, 11, 'x'}, + { 'o', 0xfa000000, 7, 'v'}, + { 'o', 0xfc000000, 7, 'g'}, + { 'o', 0xfe000000, 9, 'e'}, + { 'o', 0xfe800000, 9, 'j'}, + { 'o', 0xff000000, 8, 'i'}, + { 'p', 0x00000000, 2, 'e'}, + { 'p', 0x40000000, 8, STOP}, + { 'p', 0x60000000, 4, 's'}, + { 'p', 0x70000000, 5, 'l'}, + { 'p', 0x78000000, 5, 'r'}, + { 'p', 0x80000000, 3, 'i'}, + { 'p', 0xa0000000, 4, ' '}, + { 'p', 0xb0000000, 5, 'h'}, + { 'p', 0xb8000000, 6, 't'}, + { 'p', 0xbc000000, 6, '\''}, + { 'p', 0xc0000000, 3, 'o'}, + { 'p', 0xe0000000, 4, 'p'}, + { 'p', 0xf0000000, 5, 'a'}, + { 'p', 0xf8000000, 7, 'd'}, + { 'p', 0xfa000000, 7, 'm'}, + { 'p', 0xfc000000, 7, 'y'}, + { 'p', 0xfe000000, 10, '?'}, + { 'p', 0xfe600000, 11, '.'}, + { 'p', 0xff000000, 10, 'w'}, + { 'p', 0xff400000, 10, 'u'}, + { 'p', 0xff800000, 9, '!'}, + { 'q', 0x10000000, 4, '\''}, + { 'q', 0x40000000, 8, STOP}, + { 'q', 0x80000000, 1, 'u'}, + { 'r', 0x00000000, 3, ' '}, + { 'r', 0x20000000, 7, '\''}, + { 'r', 0x22000000, 8, 'f'}, + { 'r', 0x23000000, 8, '.'}, + { 'r', 0x24000000, 6, 'k'}, + { 'r', 0x28000000, 6, 'r'}, + { 'r', 0x2c000000, 6, 'm'}, + { 'r', 0x30000000, 4, 'y'}, + { 'r', 0x40000000, 4, 'd'}, + { 'r', 0x50000000, 9, ','}, + { 'r', 0x50800000, 9, 'p'}, + { 'r', 0x51000000, 8, 'b'}, + { 'r', 0x52000000, 7, 'c'}, + { 'r', 0x54000000, 6, 'u'}, + { 'r', 0x58000000, 5, 'n'}, + { 'r', 0x60000000, 3, 'i'}, + { 'r', 0x80000000, 4, 's'}, + { 'r', 0x90000000, 4, 't'}, + { 'r', 0xa0000000, 3, 'e'}, + { 'r', 0xc0000000, 4, 'a'}, + { 'r', 0xd0000000, 4, STOP}, + { 'r', 0xe0000000, 8, 'v'}, + { 'r', 0xe1000000, 9, 'w'}, + { 'r', 0xe1800000, 11, '-'}, + { 'r', 0xe1a00000, 12, 'h'}, + { 'r', 0xe1c00000, 10, 'j'}, + { 'r', 0xe2000000, 7, ':'}, + { 'r', 0xe4000000, 6, 'g'}, + { 'r', 0xe8000000, 5, 'l'}, + { 'r', 0xf0000000, 4, 'o'}, + { 's', 0x00000000, 4, 's'}, + { 's', 0x10000000, 7, '.'}, + { 's', 0x12000000, 7, '!'}, + { 's', 0x14000000, 8, ','}, + { 's', 0x15000000, 8, 'f'}, + { 's', 0x16000000, 7, 'y'}, + { 's', 0x20000000, 4, 'i'}, + { 's', 0x30000000, 4, 'h'}, + { 's', 0x40000000, 7, 'p'}, + { 's', 0x42000000, 11, '?'}, + { 's', 0x42200000, 11, 'w'}, + { 's', 0x42400000, 10, 'm'}, + { 's', 0x42800000, 9, 'k'}, + { 's', 0x43000000, 8, '\''}, + { 's', 0x44000000, 6, 'o'}, + { 's', 0x48000000, 7, 'a'}, + { 's', 0x4a000000, 9, 'd'}, + { 's', 0x4a800000, 11, 'g'}, + { 's', 0x4aa00000, 12, 'q'}, + { 's', 0x4ac00000, 10, 'b'}, + { 's', 0x4b000000, 8, 'n'}, + { 's', 0x4c000000, 6, 'c'}, + { 's', 0x50000000, 5, 'e'}, + { 's', 0x58000000, 6, ':'}, + { 's', 0x5c000000, 8, 'l'}, + { 's', 0x5d000000, 8, 'r'}, + { 's', 0x5e000000, 7, 'u'}, + { 's', 0x60000000, 3, 't'}, + { 's', 0x80000000, 2, ' '}, + { 's', 0xc0000000, 2, STOP}, + { 't', 0x00000000, 3, 'i'}, + { 't', 0x20000000, 4, 'a'}, + { 't', 0x30000000, 7, '\''}, + { 't', 0x32000000, 8, 'w'}, + { 't', 0x33000000, 9, '?'}, + { 't', 0x33c00000, 11, '-'}, + { 't', 0x33e00000, 11, ','}, + { 't', 0x34000000, 7, ':'}, + { 't', 0x36000000, 8, '!'}, + { 't', 0x37000000, 9, 'n'}, + { 't', 0x37800000, 10, 'd'}, + { 't', 0x38000000, 5, 't'}, + { 't', 0x40000000, 4, 'r'}, + { 't', 0x50000000, 5, 'y'}, + { 't', 0x58000000, 6, 'm'}, + { 't', 0x5c000000, 8, '.'}, + { 't', 0x5d000000, 8, 'b'}, + { 't', 0x5e000000, 8, 'E'}, + { 't', 0x60000000, 8, STOP}, + { 't', 0x80000000, 3, ' '}, + { 't', 0xa0000000, 4, 's'}, + { 't', 0xb0000000, 4, 'o'}, + { 't', 0xc0000000, 5, 'u'}, + { 't', 0xc8000000, 6, 'c'}, + { 't', 0xcc000000, 6, 'l'}, + { 't', 0xd0000000, 4, 'e'}, + { 't', 0xe0000000, 3, 'h'}, + { 'u', 0x00000000, 2, 'r'}, + { 'u', 0x40000000, 4, 'e'}, + { 'u', 0x50000000, 4, 'm'}, + { 'u', 0x60000000, 5, 'c'}, + { 'u', 0x68000000, 5, 'g'}, + { 'u', 0x70000000, 5, 'b'}, + { 'u', 0x78000000, 6, STOP}, + { 'u', 0x7e800000, 10, 'f'}, + { 'u', 0x7f000000, 8, '\''}, + { 'u', 0x80000000, 3, 's'}, + { 'u', 0xa0000000, 5, 'p'}, + { 'u', 0xa8000000, 5, 'i'}, + { 'u', 0xb0000000, 5, 'l'}, + { 'u', 0xb8000000, 6, 'y'}, + { 'u', 0xbc000000, 7, ' '}, + { 'u', 0xbf000000, 10, 'w'}, + { 'u', 0xbf400000, 12, 'v'}, + { 'u', 0xbf500000, 12, 'x'}, + { 'u', 0xbf600000, 13, 'j'}, + { 'u', 0xc0000000, 4, 't'}, + { 'u', 0xd0000000, 5, 'd'}, + { 'u', 0xd8000000, 5, 'a'}, + { 'u', 0xe0000000, 3, 'n'}, + { 'v', 0x00000000, 5, '.'}, + { 'v', 0x08000000, 7, 'y'}, + { 'v', 0x0a000000, 10, ESCAPE}, + { 'v', 0x0b000000, 8, 's'}, + { 'v', 0x10000000, 4, 'o'}, + { 'v', 0x20000000, 3, 'a'}, + { 'v', 0x40000000, 2, 'i'}, + { 'v', 0x80000000, 1, 'e'}, + { 'w', 0x00000000, 1, 's'}, + { 'w', 0x80000000, 3, ' '}, + { 'w', 0xa0000000, 5, 'a'}, + { 'w', 0xa8000000, 8, 'm'}, + { 'w', 0xa9800000, 9, 'b'}, + { 'w', 0xaa000000, 9, 'k'}, + { 'w', 0xaa800000, 9, 'r'}, + { 'w', 0xab000000, 8, 'd'}, + { 'w', 0xac000000, 11, 'c'}, + { 'w', 0xac200000, 11, 'f'}, + { 'w', 0xacc00000, 10, 'h'}, + { 'w', 0xad000000, 8, 'l'}, + { 'w', 0xae000000, 7, 'y'}, + { 'w', 0xb0000000, 4, 'i'}, + { 'w', 0xc0000000, 3, STOP}, + { 'w', 0xe0000000, 4, 'o'}, + { 'w', 0xf0000000, 5, 'n'}, + { 'w', 0xf8000000, 5, 'e'}, + { 'x', 0x00000000, 2, 'p'}, + { 'x', 0x40000000, 5, 'o'}, + { 'x', 0x48000000, 6, 'e'}, + { 'x', 0x4e000000, 7, 'f'}, + { 'x', 0x50000000, 5, 'c'}, + { 'x', 0x58000000, 6, 'y'}, + { 'x', 0x5c800000, 9, 'a'}, + { 'x', 0x5d000000, 12, ESCAPE}, + { 'x', 0x5d400000, 10, '\''}, + { 'x', 0x60000000, 4, STOP}, + { 'x', 0x70000000, 5, 'i'}, + { 'x', 0x80000000, 2, ' '}, + { 'x', 0xc0000000, 2, 't'}, + { 'y', 0x00000000, 1, ' '}, + { 'y', 0x80000000, 8, 'i'}, + { 'y', 0x81800000, 9, 'f'}, + { 'y', 0x82000000, 7, 'n'}, + { 'y', 0x84000000, 7, 't'}, + { 'y', 0x86000000, 8, ','}, + { 'y', 0x87000000, 8, 'p'}, + { 'y', 0x88000000, 5, 'o'}, + { 'y', 0x90000000, 5, 's'}, + { 'y', 0x98000000, 6, 'd'}, + { 'y', 0x9c000000, 8, 'm'}, + { 'y', 0x9d000000, 9, 'r'}, + { 'y', 0x9d800000, 9, 'g'}, + { 'y', 0x9e000000, 8, 'c'}, + { 'y', 0x9f500000, 13, 'v'}, + { 'y', 0x9f5c0000, 15, 'h'}, + { 'y', 0xa0000000, 5, 'a'}, + { 'y', 0xa8000000, 7, '\''}, + { 'y', 0xaa000000, 7, 'b'}, + { 'y', 0xac000000, 8, 'w'}, + { 'y', 0xad000000, 8, 'e'}, + { 'y', 0xae000000, 7, '.'}, + { 'y', 0xb0000000, 5, 'l'}, + { 'y', 0xb8000000, 5, ':'}, + { 'y', 0xc0000000, 8, STOP}, + { 'z', 0x00000000, 2, 'z'}, + { 'z', 0x40000000, 2, STOP}, + { 'z', 0x80000000, 4, 'y'}, + { 'z', 0x90000000, 4, 'e'}, + { 'z', 0xa0000000, 3, 'i'}, + { 'z', 0xd0000000, 4, ' '}, + { 'z', 0xe0000000, 4, 'l'}, + { 'z', 0xf0000000, 5, 'a'}, + { 'z', 0xf8000000, 6, 'o'}, + { 'z', 0xfc000000, 8, 'm'} +}; + + +/* + * This table was derived from on-air transmissions. It certainly has omissions and + * almost certainly contains errors. Use entirely at your own risk. + */ + +static struct hufftab fsat_huffman2[] = +{ + { START, 0x00000000, 5, 'H'}, + { START, 0x08000000, 6, 'O'}, + { START, 0x0c000000, 7, 'K'}, + { START, 0x0e000000, 8, '2'}, + { START, 0x0f000000, 9, 'Q'}, + { START, 0x0f800000, 10, '9'}, + { START, 0x0fc00000, 10, '8'}, + { START, 0x10000000, 4, 'J'}, + { START, 0x20000000, 5, 'I'}, + { START, 0x28000000, 5, 'R'}, + { START, 0x30000000, 4, 'D'}, + { START, 0x40000000, 3, 'A'}, + { START, 0x62000000, 8, 'U'}, + { START, 0x63000000, 8, '('}, + { START, 0x64000000, 6, '['}, + { START, 0x68000000, 5, 'F'}, + { START, 0x70000000, 5, '.'}, + { START, 0x78000000, 5, 'W'}, + { START, 0x80000000, 3, 'C'}, + { START, 0xa0000000, 4, 'S'}, + { START, 0xb0000000, 8, '1'}, + { START, 0xb1000000, 9, '3'}, + { START, 0xb1800000, 10, '6'}, + { START, 0xb1c00000, 10, '5'}, + { START, 0xb2000000, 10, 'Z'}, + { START, 0xb2400000, 10, '7'}, + { START, 0xb2800000, 10, '4'}, + { START, 0xb2f00000, 12, ' '}, + { START, 0xb3000000, 8, 'V'}, + { START, 0xb4000000, 6, 'L'}, + { START, 0xb8000000, 5, 'M'}, + { START, 0xc0000000, 5, 'B'}, + { START, 0xc8000000, 5, 'P'}, + { START, 0xd0000000, 7, 'Y'}, + { START, 0xd2000000, 7, 'G'}, + { START, 0xd4000000, 6, 'E'}, + { START, 0xd8000000, 5, 'N'}, + { START, 0xe0000000, 3, 'T'}, + { ' ', 0x00000000, 6, 'A'}, + { ' ', 0x04000000, 8, 'k'}, + { ' ', 0x05000000, 8, 'O'}, + { ' ', 0x06000000, 7, 'v'}, + { ' ', 0x08000000, 7, 'G'}, + { ' ', 0x0a000000, 7, 'N'}, + { ' ', 0x0c000000, 6, 'M'}, + { ' ', 0x10000000, 4, 'o'}, + { ' ', 0x20000000, 4, 's'}, + { ' ', 0x30000000, 5, 'd'}, + { ' ', 0x38000000, 10, '3'}, + { ' ', 0x38400000, 10, '8'}, + { ' ', 0x38800000, 10, '6'}, + { ' ', 0x38c00000, 11, '0'}, + { ' ', 0x38e60000, 15, '$'}, + { ' ', 0x38f00000, 12, 'X'}, + { ' ', 0x39000000, 9, 'q'}, + { ' ', 0x39800000, 9, 'U'}, + { ' ', 0x3a000000, 7, 'y'}, + { ' ', 0x3c000000, 6, 'e'}, + { ' ', 0x40000000, 3, 'a'}, + { ' ', 0x60000000, 5, '['}, + { ' ', 0x68000000, 8, '-'}, + { ' ', 0x69000000, 9, 'V'}, + { ' ', 0x69800000, 11, '\''}, + { ' ', 0x69a00000, 11, '9'}, + { ' ', 0x69c00000, 10, '5'}, + { ' ', 0x6a000000, 7, 'H'}, + { ' ', 0x6c000000, 9, 'Y'}, + { ' ', 0x6c800000, 9, ' '}, + { ' ', 0x6d000000, 8, '1'}, + { ' ', 0x6e000000, 7, 'L'}, + { ' ', 0x70000000, 6, 'B'}, + { ' ', 0x74000000, 6, 'C'}, + { ' ', 0x78000000, 5, 'p'}, + { ' ', 0x80000000, 3, 't'}, + { ' ', 0xa0000000, 6, 'T'}, + { ' ', 0xa4000000, 7, 'J'}, + { ' ', 0xa6000000, 7, 'F'}, + { ' ', 0xa8000000, 5, 'b'}, + { ' ', 0xb0000000, 10, '('}, + { ' ', 0xb0400000, 11, 'Z'}, + { ' ', 0xb0600000, 13, ESCAPE}, + { ' ', 0xb0680000, 13, '.'}, + { ' ', 0xb0700000, 13, '&'}, + { ' ', 0xb0780000, 14, '"'}, + { ' ', 0xb07c0000, 14, 'z'}, + { ' ', 0xb0800000, 9, '2'}, + { ' ', 0xb1000000, 8, 'K'}, + { ' ', 0xb2000000, 7, 'R'}, + { ' ', 0xb4000000, 6, 'S'}, + { ' ', 0xb8000000, 6, 'g'}, + { ' ', 0xbc000000, 7, 'u'}, + { ' ', 0xbe000000, 8, 'j'}, + { ' ', 0xbf000000, 10, STOP}, + { ' ', 0xbf800000, 10, '7'}, + { ' ', 0xbfc00000, 11, '4'}, + { ' ', 0xbfe00000, 11, 'Q'}, + { ' ', 0xc0000000, 6, 'r'}, + { ' ', 0xc4000000, 7, 'D'}, + { ' ', 0xc6000000, 7, 'W'}, + { ' ', 0xc8000000, 5, 'c'}, + { ' ', 0xd0000000, 5, 'h'}, + { ' ', 0xd8000000, 6, 'n'}, + { ' ', 0xdc000000, 6, 'l'}, + { ' ', 0xe0000000, 5, 'w'}, + { ' ', 0xe8000000, 5, 'i'}, + { ' ', 0xf0000000, 8, 'I'}, + { ' ', 0xf1000000, 8, 'E'}, + { ' ', 0xf2000000, 7, 'P'}, + { ' ', 0xf4000000, 6, 'm'}, + { ' ', 0xf8000000, 5, 'f'}, + { '!', 0x00000000, 4, ':'}, + { '!', 0x11c00000, 10, '?'}, + { '!', 0x40000000, 2, STOP}, + { '!', 0x80000000, 1, ' '}, + { '"', 0x20000000, 3, '.'}, + { '"', 0x90000000, 6, 'm'}, + { '"', 0x9e000000, 8, 'P'}, + { '"', 0x9f000000, 10, ESCAPE}, + { '"', 0xac000000, 6, 'I'}, + { '"', 0xb0000000, 7, 'c'}, + { '"', 0xb4000000, 8, 'r'}, + { '"', 0xc0000000, 2, ' '}, + { '$', 0x00000000, 1, '1'}, + { '$', 0xb0000000, 4, '2'}, + { '$', 0xde000000, 9, '3'}, + { '%', 0x80000000, 1, ' '}, + { '&', 0x00000000, 4, 'E'}, + { '&', 0x16000000, 9, ESCAPE}, + { '&', 0x18000000, 6, 'A'}, + { '&', 0x20000000, 3, 'B'}, + { '&', 0x40000000, 2, 'w'}, + { '&', 0x80000000, 1, ' '}, + { '(', 0x00000000, 3, 'P'}, + { '(', 0x23000000, 8, 'E'}, + { '(', 0x24000000, 6, 'a'}, + { '(', 0x28000000, 6, 'S'}, + { '(', 0x2c000000, 7, 'D'}, + { '(', 0x2e000000, 8, 'W'}, + { '(', 0x2f000000, 10, '4'}, + { '(', 0x30000000, 6, 'R'}, + { '(', 0x34800000, 10, '3'}, + { '(', 0x35a00000, 13, ESCAPE}, + { '(', 0x35a80000, 13, 'u'}, + { '(', 0x35b00000, 12, 'O'}, + { '(', 0x36000000, 7, 'K'}, + { '(', 0x38000000, 5, 'T'}, + { '(', 0x40000000, 2, '1'}, + { '(', 0x80000000, 4, '2'}, + { '(', 0x9c000000, 6, 'e'}, + { '(', 0xa0000000, 3, 't'}, + { '(', 0xc2000000, 9, 'w'}, + { '(', 0xc2800000, 9, 'B'}, + { '(', 0xc3000000, 8, 'g'}, + { '(', 0xc4000000, 7, 'G'}, + { '(', 0xc8000000, 7, 'M'}, + { '(', 0xca000000, 7, 'H'}, + { '(', 0xcc000000, 7, 'C'}, + { '(', 0xd0000000, 4, '5'}, + { '(', 0xe0000000, 4, 'N'}, + { '(', 0xf0000000, 6, 'J'}, + { '(', 0xf4000000, 6, 'A'}, + { ')', 0x00000000, 1, ' '}, + { ')', 0x80000000, 5, ':'}, + { ')', 0x8c000000, 6, ';'}, + { ')', 0x90000000, 4, ','}, + { ')', 0xc0000000, 2, '.'}, + { '+', 0x40000000, 2, ' '}, + { ',', 0x20000000, 3, '0'}, + { ',', 0x40000000, 2, 'S'}, + { ',', 0x80000000, 1, ' '}, + { '-', 0x00000000, 2, ' '}, + { '-', 0x40000000, 4, 't'}, + { '-', 0x50000000, 4, 'b'}, + { '-', 0x60000000, 4, 'w'}, + { '-', 0x70000000, 4, 'u'}, + { '-', 0x80000000, 5, 'c'}, + { '-', 0x88000000, 6, '9'}, + { '-', 0x8c000000, 7, 'S'}, + { '-', 0x8e000000, 8, 'C'}, + { '-', 0x8f000000, 10, 'F'}, + { '-', 0x8f480000, 13, '0'}, + { '-', 0x8f600000, 11, 'K'}, + { '-', 0x8f800000, 9, 'H'}, + { '-', 0x90000000, 4, 'o'}, + { '-', 0xa0000000, 4, 's'}, + { '-', 0xb0000000, 4, 'f'}, + { '-', 0xc0000000, 6, 'h'}, + { '-', 0xc4000000, 9, 'A'}, + { '-', 0xc4800000, 10, 'j'}, + { '-', 0xc4c00000, 10, 'P'}, + { '-', 0xc5000000, 8, 'W'}, + { '-', 0xc6000000, 9, '6'}, + { '-', 0xc6800000, 9, 'B'}, + { '-', 0xc7000000, 8, 'g'}, + { '-', 0xc8000000, 6, '1'}, + { '-', 0xcc000000, 6, 'y'}, + { '-', 0xd0000000, 7, 'e'}, + { '-', 0xd2000000, 7, 'i'}, + { '-', 0xd4000000, 6, 'r'}, + { '-', 0xd8000000, 5, 'l'}, + { '-', 0xe0000000, 6, 'a'}, + { '-', 0xe4000000, 11, 'v'}, + { '-', 0xe4200000, 11, 'Z'}, + { '-', 0xe4800000, 10, '5'}, + { '-', 0xe4c00000, 10, 'T'}, + { '-', 0xe5000000, 8, 'J'}, + { '-', 0xe6000000, 8, 'D'}, + { '-', 0xe7000000, 16, '\''}, + { '-', 0xe7080000, 14, '3'}, + { '-', 0xe70c0000, 14, '8'}, + { '-', 0xe7400000, 10, 'I'}, + { '-', 0xe7800000, 9, 'M'}, + { '-', 0xe8000000, 5, 'd'}, + { '-', 0xf0000000, 6, 'm'}, + { '-', 0xf4000000, 9, 'E'}, + { '-', 0xf4800000, 9, 'L'}, + { '-', 0xf5000000, 8, '2'}, + { '-', 0xf6000000, 7, 'n'}, + { '-', 0xf8000000, 6, 'p'}, + { '-', 0xfc000000, 8, '7'}, + { '-', 0xfd000000, 9, 'U'}, + { '-', 0xfd800000, 9, 'k'}, + { '-', 0xfe000000, 8, 'G'}, + { '-', 0xff000000, 8, 'O'}, + { '.', 0x00000000, 7, 'a'}, + { '.', 0x02000000, 7, '['}, + { '.', 0x04000000, 6, 'u'}, + { '.', 0x08000000, 8, '4'}, + { '.', 0x09000000, 10, 'N'}, + { '.', 0x09400000, 12, 'E'}, + { '.', 0x09500000, 12, ':'}, + { '.', 0x09600000, 15, '?'}, + { '.', 0x09700000, 13, 'K'}, + { '.', 0x09780000, 13, 'Y'}, + { '.', 0x09800000, 10, 't'}, + { '.', 0x0a000000, 9, '5'}, + { '.', 0x0b000000, 11, 'r'}, + { '.', 0x0b300000, 14, '"'}, + { '.', 0x0b360000, 17, 'd'}, + { '.', 0x0b368000, 18, ESCAPE}, + { '.', 0x0b370000, 16, 'k'}, + { '.', 0x0b380000, 13, 'O'}, + { '.', 0x0b400000, 10, 'R'}, + { '.', 0x0c000000, 9, 'T'}, + { '.', 0x0d000000, 9, 'M'}, + { '.', 0x0dc00000, 10, 'P'}, + { '.', 0x0e000000, 8, 'H'}, + { '.', 0x0f000000, 9, 'C'}, + { '.', 0x0f800000, 9, '2'}, + { '.', 0x10000000, 5, 'i'}, + { '.', 0x18000000, 8, 'S'}, + { '.', 0x19000000, 8, 'W'}, + { '.', 0x1a000000, 7, '3'}, + { '.', 0x1c000000, 8, 'o'}, + { '.', 0x1d800000, 9, 'D'}, + { '.', 0x1e000000, 8, '1'}, + { '.', 0x1f000000, 9, 'B'}, + { '.', 0x1f800000, 12, '\''}, + { '.', 0x1f980000, 13, '('}, + { '.', 0x1fa00000, 11, 'G'}, + { '.', 0x1fc00000, 10, 'I'}, + { '.', 0x20000000, 5, '0'}, + { '.', 0x28000000, 5, 'c'}, + { '.', 0x30000000, 4, '.'}, + { '.', 0x40000000, 4, STOP}, + { '.', 0x80000000, 1, ' '}, + { '/', 0x00000000, 4, '5'}, + { '/', 0x10000000, 5, 'T'}, + { '/', 0x20000000, 4, '8'}, + { '/', 0x30000000, 5, 'B'}, + { '/', 0x38000000, 5, '2'}, + { '/', 0x45e80000, 13, 'c'}, + { '/', 0x54800000, 9, 'U'}, + { '/', 0x80000000, 7, 'F'}, + { '/', 0x82000000, 11, 'v'}, + { '/', 0x82400000, 10, 'J'}, + { '/', 0x82a00000, 12, 'l'}, + { '/', 0x82c00000, 10, '9'}, + { '/', 0x83000000, 8, 'm'}, + { '/', 0x84000000, 7, 's'}, + { '/', 0x86000000, 7, 'M'}, + { '/', 0x88000000, 5, '3'}, + { '/', 0x90000000, 5, '7'}, + { '/', 0x98000000, 7, 'H'}, + { '/', 0x9a000000, 8, 'W'}, + { '/', 0x9b000000, 9, 'L'}, + { '/', 0x9b800000, 12, 'V'}, + { '/', 0x9b900000, 14, ESCAPE}, + { '/', 0x9c000000, 7, 'D'}, + { '/', 0x9e000000, 7, 'A'}, + { '/', 0xa0000000, 5, '6'}, + { '/', 0xa8000000, 8, 'G'}, + { '/', 0xaa000000, 7, 'S'}, + { '/', 0xac000000, 8, 'd'}, + { '/', 0xae000000, 8, 'N'}, + { '/', 0xaf800000, 9, 'I'}, + { '/', 0xb0000000, 5, 'a'}, + { '/', 0xb8000000, 9, 'E'}, + { '/', 0xb8800000, 9, 'R'}, + { '/', 0xb9000000, 8, 'C'}, + { '/', 0xba000000, 9, 'K'}, + { '/', 0xbb000000, 8, 'P'}, + { '/', 0xbc000000, 6, '4'}, + { '/', 0xc0000000, 3, '1'}, + { '0', 0x00000000, 1, '0'}, + { '0', 0x80000000, 6, '4'}, + { '0', 0x84000000, 6, 't'}, + { '0', 0x88000000, 5, 's'}, + { '0', 0x90000000, 4, 'a'}, + { '0', 0xa0000000, 7, '3'}, + { '0', 0xa2000000, 7, '7'}, + { '0', 0xa4000000, 6, '5'}, + { '0', 0xa8000000, 8, ')'}, + { '0', 0xa9000000, 8, '/'}, + { '0', 0xaa000000, 7, ']'}, + { '0', 0xac000000, 7, '-'}, + { '0', 0xae000000, 7, '1'}, + { '0', 0xb0000000, 4, 'p'}, + { '0', 0xc0000000, 5, '.'}, + { '0', 0xc8000000, 5, '8'}, + { '0', 0xd0000000, 6, '6'}, + { '0', 0xd4000000, 8, STOP}, + { '0', 0xd5000000, 8, '9'}, + { '0', 0xd6000000, 9, '%'}, + { '0', 0xd6800000, 10, ':'}, + { '0', 0xd6e80000, 14, 'k'}, + { '0', 0xd6f00000, 12, 'm'}, + { '0', 0xd7000000, 8, '2'}, + { '0', 0xd8000000, 5, ','}, + { '0', 0xe0000000, 3, ' '}, + { '1', 0x00000000, 2, '9'}, + { '1', 0x40000000, 5, '6'}, + { '1', 0x48000000, 5, '8'}, + { '1', 0x50000000, 4, ' '}, + { '1', 0x60000000, 7, STOP}, + { '1', 0x62000000, 7, '-'}, + { '1', 0x64000000, 6, '7'}, + { '1', 0x68000000, 5, '/'}, + { '1', 0x70000000, 4, '2'}, + { '1', 0x80000000, 3, '1'}, + { '1', 0xa0000000, 5, ']'}, + { '1', 0xa8000000, 7, ')'}, + { '1', 0xaa000000, 8, '\''}, + { '1', 0xab000000, 9, 'X'}, + { '1', 0xabc00000, 11, 't'}, + { '1', 0xabe00000, 11, 'R'}, + { '1', 0xac000000, 7, ':'}, + { '1', 0xae000000, 7, 's'}, + { '1', 0xb0000000, 4, '.'}, + { '1', 0xc0000000, 4, '5'}, + { '1', 0xd0000000, 5, '3'}, + { '1', 0xd8000000, 6, '4'}, + { '1', 0xdc000000, 7, ','}, + { '1', 0xde000000, 7, 'x'}, + { '1', 0xe0000000, 3, '0'}, + { '2', 0x00000000, 3, ' '}, + { '2', 0x20000000, 5, ']'}, + { '2', 0x30000000, 4, '/'}, + { '2', 0x40000000, 3, '.'}, + { '2', 0x60000000, 6, '6'}, + { '2', 0x64000000, 6, '2'}, + { '2', 0x68000000, 5, '1'}, + { '2', 0x70000000, 6, ':'}, + { '2', 0x74000000, 6, '-'}, + { '2', 0x79000000, 8, '3'}, + { '2', 0x7a000000, 8, 't'}, + { '2', 0x7c000000, 6, ')'}, + { '2', 0x80000000, 3, '5'}, + { '2', 0xa2000000, 8, 'n'}, + { '2', 0xa3000000, 9, 'a'}, + { '2', 0xa3800000, 10, '\''}, + { '2', 0xa3d00000, 13, '"'}, + { '2', 0xa3de0000, 15, 'L'}, + { '2', 0xa4000000, 7, '8'}, + { '2', 0xa6000000, 7, '9'}, + { '2', 0xa8000000, 5, '4'}, + { '2', 0xb0000000, 4, ','}, + { '2', 0xc0000000, 2, '0'}, + { '3', 0x00000000, 2, ' '}, + { '3', 0x40000000, 5, '2'}, + { '3', 0x4cda0000, 15, 'm'}, + { '3', 0x50000000, 5, ')'}, + { '3', 0x58000000, 6, 'D'}, + { '3', 0x5c000000, 7, '7'}, + { '3', 0x5e000000, 7, '3'}, + { '3', 0x60000000, 5, ':'}, + { '3', 0x68000000, 6, '4'}, + { '3', 0x70000000, 5, '-'}, + { '3', 0x78980000, 14, ESCAPE}, + { '3', 0x7a000000, 7, '6'}, + { '3', 0x7c000000, 6, '5'}, + { '3', 0x80000000, 2, '0'}, + { '3', 0xc0000000, 3, '.'}, + { '3', 0xe0000000, 4, '/'}, + { '3', 0xf0000000, 6, ','}, + { '3', 0xf4000000, 8, '8'}, + { '3', 0xf5000000, 9, '9'}, + { '3', 0xf5800000, 10, 'r'}, + { '3', 0xf6000000, 7, 't'}, + { '3', 0xf8000000, 5, ']'}, + { '4', 0x00000000, 3, '4'}, + { '4', 0x20000000, 4, '/'}, + { '4', 0x30000000, 5, '1'}, + { '4', 0x38000000, 6, '2'}, + { '4', 0x3c000000, 7, ':'}, + { '4', 0x40000000, 2, ' '}, + { '4', 0x80000000, 3, '.'}, + { '4', 0xa0000000, 4, '5'}, + { '4', 0xb0000000, 4, '-'}, + { '4', 0xc0000000, 3, '0'}, + { '4', 0xe0000000, 7, 't'}, + { '4', 0xe2000000, 7, '3'}, + { '4', 0xe4000000, 6, '8'}, + { '4', 0xe8000000, 5, ']'}, + { '4', 0xf0000000, 5, ','}, + { '4', 0xf8000000, 6, ')'}, + { '4', 0xfc000000, 10, '9'}, + { '4', 0xfc800000, 10, '7'}, + { '4', 0xfce40000, 15, ESCAPE}, + { '4', 0xfd000000, 8, '6'}, + { '5', 0x00000000, 2, '0'}, + { '5', 0x40000000, 3, '.'}, + { '5', 0x60000000, 5, '/'}, + { '5', 0x68000000, 6, '3'}, + { '5', 0x6c000000, 7, ':'}, + { '5', 0x6e000000, 8, '4'}, + { '5', 0x6f200000, 11, ';'}, + { '5', 0x6f440000, 14, 'f'}, + { '5', 0x6fc00000, 10, '1'}, + { '5', 0x70000000, 4, 'p'}, + { '5', 0x80000000, 2, ' '}, + { '5', 0xc0000000, 4, '5'}, + { '5', 0xd0000000, 5, 'a'}, + { '5', 0xd8000000, 5, '-'}, + { '5', 0xe0000000, 7, ')'}, + { '5', 0xe6000000, 7, ','}, + { '5', 0xe8000000, 5, '6'}, + { '5', 0xf0000000, 6, '2'}, + { '5', 0xf4000000, 7, '7'}, + { '5', 0xf6000000, 7, '9'}, + { '5', 0xf8000000, 6, '8'}, + { '5', 0xfc000000, 6, ']'}, + { '6', 0x00000000, 2, ' '}, + { '6', 0x40000000, 7, '6'}, + { '6', 0x44000000, 6, '-'}, + { '6', 0x48000000, 5, '1'}, + { '6', 0x50000000, 4, ']'}, + { '6', 0x60000000, 5, '7'}, + { '6', 0x68000000, 6, '5'}, + { '6', 0x6c000000, 6, '4'}, + { '6', 0x70000000, 5, ')'}, + { '6', 0x78000000, 7, '3'}, + { '6', 0x7a000000, 7, '2'}, + { '6', 0x7c000000, 6, '8'}, + { '6', 0x80000000, 2, '.'}, + { '6', 0xc0000000, 5, ','}, + { '6', 0xc8000000, 5, ':'}, + { '6', 0xd0000000, 5, '/'}, + { '6', 0xd9fc0000, 15, ESCAPE}, + { '6', 0xda000000, 7, '9'}, + { '6', 0xdc000000, 6, 't'}, + { '6', 0xe0000000, 3, '0'}, + { '7', 0x00000000, 4, '8'}, + { '7', 0x10000000, 8, STOP}, + { '7', 0x11200000, 13, ESCAPE}, + { '7', 0x11d00000, 12, '?'}, + { '7', 0x12000000, 7, '3'}, + { '7', 0x14000000, 6, '6'}, + { '7', 0x18000000, 6, '2'}, + { '7', 0x1c000000, 6, '1'}, + { '7', 0x20000000, 3, ' '}, + { '7', 0x40000000, 4, '7'}, + { '7', 0x50000000, 5, '/'}, + { '7', 0x58000000, 8, ':'}, + { '7', 0x59000000, 8, 'p'}, + { '7', 0x5a000000, 7, ','}, + { '7', 0x5c000000, 6, 't'}, + { '7', 0x60000000, 3, '0'}, + { '7', 0x80000000, 6, '9'}, + { '7', 0x84000000, 7, 'a'}, + { '7', 0x86000000, 7, '4'}, + { '7', 0x88000000, 6, ')'}, + { '7', 0x90000000, 4, ']'}, + { '7', 0xa0000000, 3, '-'}, + { '7', 0xc0000000, 2, '.'}, + { '8', 0x00000000, 3, '4'}, + { '8', 0x20000000, 5, '/'}, + { '8', 0x28000000, 7, ':'}, + { '8', 0x2a000000, 7, ','}, + { '8', 0x2c000000, 8, 'p'}, + { '8', 0x2d000000, 8, '-'}, + { '8', 0x2e100000, 12, '\''}, + { '8', 0x2e800000, 9, STOP}, + { '8', 0x2f000000, 8, 'a'}, + { '8', 0x30000000, 4, '0'}, + { '8', 0x40000000, 2, ' '}, + { '8', 0x80000000, 4, '9'}, + { '8', 0x90000000, 4, '7'}, + { '8', 0xa0000000, 5, '3'}, + { '8', 0xa8000000, 6, ')'}, + { '8', 0xad000000, 8, '2'}, + { '8', 0xae000000, 7, 't'}, + { '8', 0xb0000000, 4, '8'}, + { '8', 0xc0000000, 3, '.'}, + { '8', 0xe0000000, 4, '1'}, + { '8', 0xf0000000, 5, '5'}, + { '8', 0xf8000000, 6, '6'}, + { '8', 0xfc000000, 6, ']'}, + { '9', 0x00000000, 3, '5'}, + { '9', 0x20000000, 3, ']'}, + { '9', 0x40000000, 5, '2'}, + { '9', 0x48000000, 6, '1'}, + { '9', 0x4c000000, 6, '/'}, + { '9', 0x50000000, 4, '0'}, + { '9', 0x60000000, 4, '.'}, + { '9', 0x70000000, 4, '-'}, + { '9', 0x80000000, 4, '4'}, + { '9', 0x90000000, 4, '8'}, + { '9', 0xa0000000, 5, '3'}, + { '9', 0xa8000000, 6, 't'}, + { '9', 0xac000000, 8, ':'}, + { '9', 0xad000000, 9, ','}, + { '9', 0xadd80000, 15, ESCAPE}, + { '9', 0xae000000, 7, ')'}, + { '9', 0xb0000000, 4, '6'}, + { '9', 0xc0000000, 4, ' '}, + { '9', 0xd0000000, 4, '7'}, + { '9', 0xe0000000, 3, '9'}, + { ':', 0x40000000, 2, '0'}, + { ':', 0x80000000, 1, ' '}, + { ';', 0x80000000, 1, ' '}, + { '=', 0x80000000, 1, ESCAPE}, + { '?', 0x00000000, 3, ':'}, + { '?', 0x20000000, 5, '!'}, + { '?', 0x28000000, 6, ';'}, + { '?', 0x2c000000, 7, '\''}, + { '?', 0x40000000, 2, STOP}, + { '?', 0x80000000, 1, ' '}, + { '@', 0xd0000000, 4, 'b'}, + { 'A', 0x00000000, 4, 's'}, + { 'A', 0x10000000, 4, 'm'}, + { 'A', 0x20000000, 4, 'd'}, + { 'A', 0x30000000, 5, 'c'}, + { 'A', 0x38000000, 10, 'C'}, + { 'A', 0x38400000, 11, 'P'}, + { 'A', 0x38700000, 12, 'K'}, + { 'A', 0x38800000, 10, ','}, + { 'A', 0x38c00000, 11, '-'}, + { 'A', 0x39c80000, 13, 'W'}, + { 'A', 0x39d00000, 12, 'M'}, + { 'A', 0x39ef8000, 18, ESCAPE}, + { 'A', 0x39f00000, 12, 'Y'}, + { 'A', 0x3ac00000, 11, 'A'}, + { 'A', 0x38f00000, 12, '&'}, + { 'A', 0x39000000, 9, 'h'}, + { 'A', 0x39800000, 10, 'y'}, + { 'A', 0x3a000000, 9, '.'}, + { 'A', 0x3a800000, 10, 'S'}, + { 'A', 0x3b000000, 10, 'k'}, + { 'A', 0x3b400000, 10, 'T'}, + { 'A', 0x3b800000, 9, 'B'}, + { 'A', 0x3c000000, 6, 'b'}, + { 'A', 0x40000000, 2, ' '}, + { 'A', 0x80000000, 4, 'r'}, + { 'A', 0x90000000, 5, 'u'}, + { 'A', 0x98100000, 13, '\''}, + { 'A', 0x98180000, 13, ':'}, + { 'A', 0x98800000, 10, 'F'}, + { 'A', 0x98c00000, 10, 'z'}, + { 'A', 0x99000000, 8, 'v'}, + { 'A', 0x9a000000, 9, 'q'}, + { 'A', 0x9aa00000, 11, 'x'}, + { 'A', 0x9ac00000, 10, 'a'}, + { 'A', 0x9b000000, 8, 'p'}, + { 'A', 0x9c000000, 6, 't'}, + { 'A', 0xa0000000, 5, 'g'}, + { 'A', 0xa8000000, 7, 'w'}, + { 'A', 0xaa000000, 7, 'i'}, + { 'A', 0xac000000, 6, 'f'}, + { 'A', 0xb0000000, 4, 'l'}, + { 'A', 0xc0000000, 3, 'D'}, + { 'A', 0xe0000000, 3, 'n'}, + { 'B', 0x00000000, 2, 'C'}, + { 'B', 0x40000000, 3, 'a'}, + { 'B', 0x60000000, 8, 'T'}, + { 'B', 0x61000000, 8, '.'}, + { 'B', 0x62000000, 9, 'A'}, + { 'B', 0x62800000, 10, 'O'}, + { 'B', 0x62e80000, 15, '-'}, + { 'B', 0x62f00000, 12, 'W'}, + { 'B', 0x63000000, 8, 'y'}, + { 'B', 0x64000000, 8, 'I'}, + { 'B', 0x65000000, 11, '&'}, + { 'B', 0x65600000, 11, 'M'}, + { 'B', 0x65940000, 15, 'S'}, + { 'B', 0x65960000, 15, 'F'}, + { 'B', 0x65a00000, 12, ','}, + { 'B', 0x65b00000, 12, '1'}, + { 'B', 0x65e00000, 12, ESCAPE}, + { 'B', 0x65f00000, 12, 'P'}, + { 'B', 0x66000000, 8, 'h'}, + { 'B', 0x67000000, 8, ' '}, + { 'B', 0x68000000, 5, 'l'}, + { 'B', 0x70000000, 4, 'i'}, + { 'B', 0x80000000, 4, 'u'}, + { 'B', 0x90000000, 4, 'o'}, + { 'B', 0xa0000000, 3, 'r'}, + { 'B', 0xc0000000, 3, 'e'}, + { 'B', 0xe0000000, 3, 'B'}, + { 'C', 0x00000000, 2, 'h'}, + { 'C', 0x40000000, 5, '\''}, + { 'C', 0x48000000, 9, 'A'}, + { 'C', 0x48b00000, 13, 'z'}, + { 'C', 0x48b80000, 16, ':'}, + { 'C', 0x48b90000, 17, ESCAPE}, + { 'C', 0x49000000, 8, 'I'}, + { 'C', 0x4a000000, 7, 'y'}, + { 'C', 0x4c000000, 6, 'e'}, + { 'C', 0x50000000, 4, 'r'}, + { 'C', 0x60000000, 3, 'B'}, + { 'C', 0x80000000, 3, 'a'}, + { 'C', 0xa0000000, 4, '.'}, + { 'C', 0xb0400000, 10, 'D'}, + { 'C', 0xb0920000, 15, '7'}, + { 'C', 0xb0b00000, 12, 'H'}, + { 'C', 0xb1000000, 10, 'S'}, + { 'C', 0xb1400000, 10, 'T'}, + { 'C', 0xb1900000, 14, 'P'}, + { 'C', 0xb1a00000, 11, 'J'}, + { 'C', 0xb1c00000, 10, 'G'}, + { 'C', 0xb2000000, 7, ','}, + { 'C', 0xb4000000, 6, 'u'}, + { 'C', 0xb8000000, 5, 'i'}, + { 'C', 0xc0000000, 3, 'o'}, + { 'C', 0xe0000000, 4, ' '}, + { 'C', 0xf0000000, 4, 'l'}, + { 'D', 0x00000000, 2, 'a'}, + { 'D', 0x40000000, 2, ','}, + { 'D', 0x80000000, 3, 'r'}, + { 'D', 0xa0000000, 3, 'o'}, + { 'D', 0xc0000000, 3, 'e'}, + { 'D', 0xe0000000, 4, 'i'}, + { 'D', 0xf0000000, 8, '.'}, + { 'D', 0xf2000000, 7, ' '}, + { 'D', 0xf4140000, 16, 'B'}, + { 'D', 0xf4180000, 14, '9'}, + { 'D', 0xf4200000, 11, 'M'}, + { 'D', 0xf4400000, 11, '&'}, + { 'D', 0xf4600000, 11, 'V'}, + { 'D', 0xf4800000, 10, 'h'}, + { 'D', 0xf4d00000, 12, 's'}, + { 'D', 0xf4e80000, 13, 'j'}, + { 'D', 0xf5000000, 9, 'w'}, + { 'D', 0xf5800000, 9, 'W'}, + { 'D', 0xf6000000, 7, '\''}, + { 'D', 0xf8400000, 11, '-'}, + { 'D', 0xf8600000, 11, 'G'}, + { 'D', 0xf8800000, 9, 'N'}, + { 'D', 0xf9000000, 9, 'C'}, + { 'D', 0xf9c00000, 10, 'I'}, + { 'D', 0xfa000000, 8, 'y'}, + { 'D', 0xfb000000, 12, 'v'}, + { 'D', 0xfb100000, 13, ESCAPE}, + { 'D', 0xfb400000, 10, ':'}, + { 'D', 0xfb800000, 9, 'J'}, + { 'D', 0xfc000000, 6, 'u'}, + { 'E', 0x00000000, 3, 'p'}, + { 'E', 0x20000000, 5, 's'}, + { 'E', 0x28000000, 6, '.'}, + { 'E', 0x2c000000, 6, 'i'}, + { 'E', 0x30000000, 5, 'r'}, + { 'E', 0x38000000, 5, 'u'}, + { 'E', 0x40000000, 3, 'a'}, + { 'E', 0x60000000, 3, 'n'}, + { 'E', 0x80000000, 5, 'E'}, + { 'E', 0x88000000, 5, ' '}, + { 'E', 0x90000000, 4, 'm'}, + { 'E', 0xa0000000, 4, 'x'}, + { 'E', 0xb0000000, 7, 'y'}, + { 'E', 0xb2000000, 7, 't'}, + { 'E', 0xb4000000, 6, ':'}, + { 'E', 0xb8000000, 7, 'g'}, + { 'E', 0xba040000, 14, 'S'}, + { 'E', 0xba160000, 16, ESCAPE}, + { 'E', 0xba400000, 11, 'f'}, + { 'E', 0xba600000, 11, 'o'}, + { 'E', 0xba800000, 10, 'R'}, + { 'E', 0xbac00000, 10, 'F'}, + { 'E', 0xbb000000, 9, 'w'}, + { 'E', 0xbbc00000, 10, 'C'}, + { 'E', 0xbe000000, 9, 'c'}, + { 'E', 0xbea00000, 11, 'e'}, + { 'E', 0xbef00000, 12, '\''}, + { 'E', 0xbf000000, 9, 'b'}, + { 'E', 0xbf800000, 11, 'h'}, + { 'E', 0xbfe00000, 11, 'D'}, + { 'E', 0xc0000000, 3, 'l'}, + { 'E', 0xe0000000, 4, 'v'}, + { 'E', 0xf0000000, 4, 'd'}, + { 'F', 0x00000000, 2, 'o'}, + { 'F', 0x40000000, 3, 'e'}, + { 'F', 0x60000000, 4, 'l'}, + { 'F', 0x70000000, 5, 'u'}, + { 'F', 0x78000000, 7, ' '}, + { 'F', 0x7a000000, 7, 'O'}, + { 'F', 0x7c000000, 10, '.'}, + { 'F', 0x7c900000, 13, 'y'}, + { 'F', 0x7c980000, 13, ','}, + { 'F', 0x7ca00000, 11, 'T'}, + { 'F', 0x7d000000, 8, 'A'}, + { 'F', 0x7ee80000, 14, 'I'}, + { 'F', 0x7ef00000, 12, '1'}, + { 'F', 0x7f000000, 8, 'B'}, + { 'F', 0x80000000, 2, 'r'}, + { 'F', 0xc0000000, 3, 'i'}, + { 'F', 0xe0000000, 3, 'a'}, + { 'G', 0x00000000, 2, 'r'}, + { 'G', 0x40000000, 2, 'a'}, + { 'G', 0x84800000, 11, ';'}, + { 'G', 0x84000000, 9, '-'}, + { 'G', 0x84a00000, 11, ','}, + { 'G', 0x84c00000, 11, 'A'}, + { 'G', 0x86000000, 9, 'C'}, + { 'G', 0x86d60000, 15, '\''}, + { 'G', 0x87000000, 8, 'P'}, + { 'G', 0x88000000, 5, 'n'}, + { 'G', 0x90000000, 4, 'u'}, + { 'G', 0xa0000000, 3, 'o'}, + { 'G', 0xc0000000, 3, 'e'}, + { 'G', 0xe0000000, 7, 'y'}, + { 'G', 0xe2000000, 7, ' '}, + { 'G', 0xe4000000, 10, '.'}, + { 'G', 0xe4400000, 10, 'I'}, + { 'G', 0xe5000000, 8, 'h'}, + { 'G', 0xe6000000, 7, 'w'}, + { 'G', 0xe8000000, 5, 'l'}, + { 'G', 0xf0000000, 4, 'i'}, + { 'H', 0x00000000, 2, 'e'}, + { 'H', 0x40000000, 2, 'a'}, + { 'H', 0x80000000, 2, 'o'}, + { 'H', 0xc0000000, 3, 'i'}, + { 'H', 0xe0000000, 5, 'R'}, + { 'H', 0xea000000, 10, 'S'}, + { 'H', 0xea400000, 10, '.'}, + { 'H', 0xea8c0000, 15, 'D'}, + { 'H', 0xea8e0000, 16, ESCAPE}, + { 'H', 0xeaa00000, 11, 'G'}, + { 'H', 0xeb000000, 8, 'I'}, + { 'H', 0xec000000, 7, 'y'}, + { 'H', 0xee000000, 9, 'Q'}, + { 'H', 0xee800000, 9, 'M'}, + { 'H', 0xef800000, 9, ' '}, + { 'H', 0xf0000000, 4, 'u'}, + { 'I', 0x00000000, 1, 'n'}, + { 'I', 0x80000000, 5, 'T'}, + { 'I', 0x88000000, 6, 'c'}, + { 'I', 0x8d000000, 9, 'P'}, + { 'I', 0x8da00000, 11, '5'}, + { 'I', 0x8e000000, 7, '\''}, + { 'I', 0x90000000, 4, 's'}, + { 'I', 0xa0000000, 8, 'A'}, + { 'I', 0xa1000000, 8, 'v'}, + { 'I', 0xa2000000, 9, 'w'}, + { 'I', 0xa2a00000, 11, '9'}, + { 'I', 0xa2c00000, 10, 'y'}, + { 'I', 0xa3000000, 9, ':'}, + { 'I', 0xa3d00000, 12, ')'}, + { 'I', 0xa4000000, 6, 'm'}, + { 'I', 0xa8000000, 5, 'a'}, + { 'I', 0xb4000000, 6, '.'}, + { 'I', 0xb8000000, 9, 'p'}, + { 'I', 0xb8800000, 11, 'b'}, + { 'I', 0xb8c00000, 11, '-'}, + { 'I', 0xb9000000, 8, 'V'}, + { 'I', 0xba000000, 7, 'l'}, + { 'I', 0xbc000000, 6, 'd'}, + { 'I', 0xc0000000, 3, 't'}, + { 'I', 0xe0000000, 5, ' '}, + { 'I', 0xe8800000, 9, ','}, + { 'I', 0xe9000000, 8, 'f'}, + { 'I', 0xea000000, 10, 'g'}, + { 'I', 0xea400000, 10, 'D'}, + { 'I', 0xea800000, 9, 'Y'}, + { 'I', 0xeb000000, 8, 'o'}, + { 'I', 0xec000000, 6, 'I'}, + { 'I', 0xf0000000, 4, 'r'}, + { 'J', 0x00000000, 2, 'e'}, + { 'J', 0x40000000, 5, ' '}, + { 'J', 0x48c00000, 10, ','}, + { 'J', 0x49000000, 8, 'r'}, + { 'J', 0x4a400000, 10, '-'}, + { 'J', 0x4ac00000, 11, 'n'}, + { 'J', 0x4aec0000, 15, ESCAPE}, + { 'J', 0x4af80000, 13, '\''}, + { 'J', 0x4b000000, 9, 's'}, + { 'J', 0x4b800000, 10, 'K'}, + { 'J', 0x4bc00000, 10, 'T'}, + { 'J', 0x4c000000, 7, 'D'}, + { 'J', 0x4e000000, 7, '.'}, + { 'J', 0x50000000, 4, 'i'}, + { 'J', 0x60000000, 3, 'u'}, + { 'J', 0x80000000, 2, 'a'}, + { 'J', 0xc0000000, 2, 'o'}, + { 'K', 0x00000000, 2, 'i'}, + { 'K', 0x40000000, 2, 'a'}, + { 'K', 0x80000000, 2, 'e'}, + { 'K', 0xc0000000, 5, 'n'}, + { 'K', 0xc8000000, 5, 'o'}, + { 'K', 0xd0000000, 6, '\''}, + { 'K', 0xd4e00000, 12, '-'}, + { 'K', 0xd5000000, 10, 'w'}, + { 'K', 0xd5600000, 12, ':'}, + { 'K', 0xd5800000, 9, 'G'}, + { 'K', 0xd6000000, 7, '.'}, + { 'K', 0xd8000000, 5, 'r'}, + { 'K', 0xe0000000, 6, 'u'}, + { 'K', 0xe4500000, 12, 'S'}, + { 'K', 0xe4800000, 9, ','}, + { 'K', 0xe5000000, 8, 'h'}, + { 'K', 0xe6000000, 7, 'l'}, + { 'K', 0xe8000000, 5, ' '}, + { 'K', 0xf0000000, 4, 'y'}, + { 'L', 0x00000000, 2, 'i'}, + { 'L', 0x40000000, 4, 'u'}, + { 'L', 0x50000000, 6, 'l'}, + { 'L', 0x54000000, 6, 'A'}, + { 'L', 0x58000000, 9, 'I'}, + { 'L', 0x59400000, 10, '\''}, + { 'L', 0x59a00000, 11, '.'}, + { 'L', 0x5a680000, 16, ESCAPE}, + { 'L', 0x5a700000, 12, 'S'}, + { 'L', 0x5c000000, 6, 'y'}, + { 'L', 0x60000000, 3, ']'}, + { 'L', 0x80000000, 2, 'o'}, + { 'L', 0xc0000000, 3, 'e'}, + { 'L', 0xe0000000, 3, 'a'}, + { 'M', 0x00000000, 2, 'o'}, + { 'M', 0x40000000, 9, '1'}, + { 'M', 0x40800000, 10, 'A'}, + { 'M', 0x41000000, 8, 'C'}, + { 'M', 0x42000000, 7, ' '}, + { 'M', 0x44000000, 9, 'h'}, + { 'M', 0x44800000, 10, 'z'}, + { 'M', 0x45000000, 9, 'I'}, + { 'M', 0x45800000, 12, 'R'}, + { 'M', 0x45b60000, 15, '2'}, + { 'M', 0x45b80000, 13, 'D'}, + { 'M', 0x45c00000, 11, '.'}, + { 'M', 0x45f00000, 13, 'E'}, + { 'M', 0x45fc0000, 14, 'w'}, + { 'M', 0x46000000, 8, 'F'}, + { 'M', 0x47800000, 9, 'X'}, + { 'M', 0x48000000, 5, 'y'}, + { 'M', 0x50000000, 4, 'c'}, + { 'M', 0x60000000, 3, 'e'}, + { 'M', 0x80000000, 6, 'S'}, + { 'M', 0x84000000, 6, 'P'}, + { 'M', 0x88000000, 5, 'r'}, + { 'M', 0x90000000, 4, 'u'}, + { 'M', 0xa0000000, 3, 'i'}, + { 'M', 0xc0000000, 2, 'a'}, + { 'N', 0x00000000, 2, 'a'}, + { 'N', 0x43500000, 12, 'M'}, + { 'N', 0x44000000, 7, 'y'}, + { 'N', 0x47000000, 8, ' '}, + { 'N', 0x48000000, 6, 'A'}, + { 'N', 0x4e000000, 9, 'L'}, + { 'N', 0x4f680000, 13, ESCAPE}, + { 'N', 0x50000000, 5, 'u'}, + { 'N', 0x58000000, 5, 'E'}, + { 'N', 0x60000000, 3, 'i'}, + { 'N', 0x80000000, 2, 'o'}, + { 'N', 0xc0000000, 2, 'e'}, + { 'O', 0x00000000, 4, 's'}, + { 'O', 0x20000000, 6, 'o'}, + { 'O', 0x28000000, 5, 'U'}, + { 'O', 0x40000000, 4, 'r'}, + { 'O', 0x50000000, 6, 'b'}, + { 'O', 0x54000000, 6, 'm'}, + { 'O', 0x58000000, 5, 'h'}, + { 'O', 0x60000000, 9, 'K'}, + { 'O', 0x60a00000, 12, ':'}, + { 'O', 0x61000000, 8, 't'}, + { 'O', 0x62000000, 8, 'k'}, + { 'O', 0x63200000, 11, 'L'}, + { 'O', 0x6c000000, 6, 'v'}, + { 'O', 0x70000000, 5, 'f'}, + { 'O', 0x78000000, 5, 'w'}, + { 'O', 0x80000000, 4, 'u'}, + { 'O', 0x90000000, 5, '.'}, + { 'O', 0x98000000, 8, 'g'}, + { 'O', 0x99c00000, 10, '-'}, + { 'O', 0x9a000000, 7, 'd'}, + { 'O', 0x9c000000, 6, 'c'}, + { 'O', 0xa0000000, 4, 'p'}, + { 'O', 0xb0000000, 4, 'l'}, + { 'O', 0xc0000000, 5, ' '}, + { 'O', 0xc8000000, 7, 'a'}, + { 'O', 0xcb200000, 11, 'A'}, + { 'O', 0xcb600000, 11, 'C'}, + { 'O', 0xcc000000, 6, 'x'}, + { 'O', 0xd0000000, 4, '\''}, + { 'O', 0xe0000000, 3, 'n'}, + { 'P', 0x00000000, 3, 'i'}, + { 'P', 0x20000000, 4, 'h'}, + { 'P', 0x31100000, 12, 'G'}, + { 'P', 0x31400000, 10, 'y'}, + { 'P', 0x32000000, 8, 'D'}, + { 'P', 0x33540000, 16, ESCAPE}, + { 'P', 0x33580000, 13, 'J'}, + { 'P', 0x33600000, 12, 'A'}, + { 'P', 0x33800000, 9, ','}, + { 'P', 0x34000000, 7, 'C'}, + { 'P', 0x36000000, 10, 'E'}, + { 'P', 0x36400000, 10, '\''}, + { 'P', 0x36900000, 12, 'F'}, + { 'P', 0x36a00000, 13, 'f'}, + { 'P', 0x36a80000, 13, 'R'}, + { 'P', 0x36b00000, 14, 'Y'}, + { 'P', 0x37000000, 8, 's'}, + { 'P', 0x38000000, 7, '.'}, + { 'P', 0x3a000000, 7, ' '}, + { 'P', 0x3c000000, 6, 'u'}, + { 'P', 0x40000000, 3, 'e'}, + { 'P', 0x60000000, 3, 'l'}, + { 'P', 0x80000000, 3, 'o'}, + { 'P', 0xa0000000, 3, 'r'}, + { 'P', 0xc0000000, 2, 'a'}, + { 'Q', 0x40000000, 5, 'a'}, + { 'Q', 0x4b000000, 8, '&'}, + { 'Q', 0x50000000, 4, '.'}, + { 'Q', 0x60000000, 3, ' '}, + { 'Q', 0x80000000, 1, 'u'}, + { 'R', 0x10000000, 6, ' '}, + { 'R', 0x15000000, 9, 'F'}, + { 'R', 0x16000000, 8, '.'}, + { 'R', 0x17000000, 10, 'N'}, + { 'R', 0x17c00000, 10, 'H'}, + { 'R', 0x18000000, 5, 'E'}, + { 'R', 0x20000000, 5, 'h'}, + { 'R', 0x28000000, 6, 'y'}, + { 'R', 0x2d800000, 9, 'n'}, + { 'R', 0x2e000000, 8, 'S'}, + { 'R', 0x2f800000, 9, 'A'}, + { 'R', 0x30000000, 4, 'u'}, + { 'R', 0x40000000, 2, 'a'}, + { 'R', 0x80000000, 3, 'i'}, + { 'R', 0xa0000000, 3, 'e'}, + { 'R', 0xc0000000, 2, 'o'}, + { 'S', 0x00000000, 4, 'a'}, + { 'S', 0x10000000, 5, 'p'}, + { 'S', 0x18000000, 5, ','}, + { 'S', 0x20000000, 4, 'h'}, + { 'S', 0x30000000, 5, 'L'}, + { 'S', 0x38000000, 7, 'w'}, + { 'S', 0x3a000000, 8, 'q'}, + { 'S', 0x3b000000, 9, 'P'}, + { 'S', 0x3b800000, 10, 'A'}, + { 'S', 0x3bc40000, 16, 'G'}, + { 'S', 0x3bc60000, 15, '}'}, + { 'S', 0x3be00000, 12, 'S'}, + { 'S', 0x3c000000, 6, 'k'}, + { 'S', 0x40000000, 5, 'i'}, + { 'S', 0x48000000, 5, 'u'}, + { 'S', 0x50000000, 5, 'o'}, + { 'S', 0x58000000, 5, 'c'}, + { 'S', 0x60000000, 5, 'e'}, + { 'S', 0x69000000, 8, 'n'}, + { 'S', 0x6a000000, 7, ' '}, + { 'S', 0x6c000000, 8, 'l'}, + { 'S', 0x6d100000, 14, 'O'}, + { 'S', 0x6d140000, 16, '-'}, + { 'S', 0x6d160000, 15, 'B'}, + { 'S', 0x6d180000, 13, ESCAPE}, + { 'S', 0x6d200000, 11, '.'}, + { 'S', 0x6d4c0000, 16, '3'}, + { 'S', 0x6d4e8000, 17, 's'}, + { 'S', 0x6d500000, 12, 'E'}, + { 'S', 0x6d600000, 12, 'v'}, + { 'S', 0x6d700000, 14, 'z'}, + { 'S', 0x6d740000, 15, 'H'}, + { 'S', 0x6d780000, 13, 'g'}, + { 'S', 0x6d800000, 9, 'y'}, + { 'S', 0x6e000000, 7, 'm'}, + { 'S', 0x70000000, 4, 't'}, + { 'S', 0x80000000, 1, ']'}, + { 'T', 0x00000000, 1, 'h'}, + { 'T', 0x80000000, 3, 'o'}, + { 'T', 0xa0000000, 4, 'V'}, + { 'T', 0xb0000000, 4, 'w'}, + { 'T', 0xc0000000, 4, 'r'}, + { 'T', 0xd0000000, 5, 'a'}, + { 'T', 0xd8000000, 5, 'i'}, + { 'T', 0xe0000000, 5, 'u'}, + { 'T', 0xe8000000, 7, 'H'}, + { 'T', 0xea000000, 8, ' '}, + { 'T', 0xeb000000, 8, 'y'}, + { 'T', 0xec000000, 7, 'W'}, + { 'T', 0xee000000, 10, 'S'}, + { 'T', 0xee400000, 11, 'A'}, + { 'T', 0xee680000, 13, '-'}, + { 'T', 0xee800000, 9, 'M'}, + { 'T', 0xef000000, 12, '.'}, + { 'T', 0xef140000, 14, '4'}, + { 'T', 0xef200000, 11, 's'}, + { 'T', 0xef400000, 13, 'C'}, + { 'T', 0xef480000, 14, 'O'}, + { 'T', 0xef4c0000, 15, 'E'}, + { 'T', 0xef540000, 15, '\''}, + { 'T', 0xef580000, 13, 'c'}, + { 'T', 0xef800000, 9, 'x'}, + { 'T', 0xf0000000, 4, 'e'}, + { 'U', 0x00000000, 2, 'K'}, + { 'U', 0x40000000, 6, 'g'}, + { 'U', 0x44000000, 8, 'k'}, + { 'U', 0x45000000, 8, 't'}, + { 'U', 0x46000000, 8, 'E'}, + { 'U', 0x47000000, 8, '-'}, + { 'U', 0x48000000, 8, 'F'}, + { 'U', 0x4ac00000, 11, 'b'}, + { 'U', 0x4b800000, 9, 'Z'}, + { 'U', 0x4c000000, 8, '2'}, + { 'U', 0x4d000000, 10, 'i'}, + { 'U', 0x4d800000, 10, 'a'}, + { 'U', 0x4e000000, 10, '.'}, + { 'U', 0x50000000, 5, 's'}, + { 'U', 0x58000000, 5, 'r'}, + { 'U', 0x60000000, 3, 'S'}, + { 'U', 0x80000000, 2, 'n'}, + { 'U', 0xc0000000, 3, 'p'}, + { 'U', 0xe0000000, 6, ' '}, + { 'U', 0xe4000000, 7, 'm'}, + { 'U', 0xe8000000, 5, 'R'}, + { 'U', 0xf0000000, 4, 'l'}, + { 'V', 0x00000000, 3, '.'}, + { 'V', 0x20000000, 3, 'a'}, + { 'V', 0x40000000, 2, ' '}, + { 'V', 0x81000000, 8, '1'}, + { 'V', 0x84780000, 13, '8'}, + { 'V', 0x91000000, 9, 'D'}, + { 'V', 0x91800000, 9, 'u'}, + { 'V', 0x94000000, 10, ';'}, + { 'V', 0x94400000, 11, ESCAPE}, + { 'V', 0x94780000, 13, 'W'}, + { 'V', 0x94800000, 9, ','}, + { 'V', 0x95000000, 8, '\''}, + { 'V', 0x96000000, 8, ':'}, + { 'V', 0x97000000, 8, 'l'}, + { 'V', 0x98000000, 5, 'o'}, + { 'V', 0xa0000000, 3, 'e'}, + { 'V', 0xc0000000, 2, 'i'}, + { 'W', 0x00000000, 2, 'h'}, + { 'W', 0x40000000, 4, 'r'}, + { 'W', 0x50800000, 9, '.'}, + { 'W', 0x51000000, 10, '\''}, + { 'W', 0x51800000, 11, '2'}, + { 'W', 0x51a00000, 11, ':'}, + { 'W', 0x52000000, 7, ' '}, + { 'W', 0x54000000, 7, 'y'}, + { 'W', 0x56000000, 9, 'I'}, + { 'W', 0x56b40000, 16, ESCAPE}, + { 'W', 0x56b80000, 13, 'u'}, + { 'W', 0x56c00000, 11, 'V'}, + { 'W', 0x57000000, 9, 'W'}, + { 'W', 0x58000000, 5, 'O'}, + { 'W', 0x60000000, 3, 'a'}, + { 'W', 0x80000000, 2, 'i'}, + { 'W', 0xc0000000, 3, 'o'}, + { 'W', 0xe0000000, 3, 'e'}, + { 'X', 0x00000000, 3, 'a'}, + { 'X', 0x43000000, 10, ')'}, + { 'X', 0x50000000, 5, '-'}, + { 'X', 0x6a000000, 7, '.'}, + { 'X', 0x70000000, 4, 't'}, + { 'X', 0x80000000, 1, ' '}, + { 'Y', 0x00000000, 2, 'e'}, + { 'Y', 0x40000000, 3, 'u'}, + { 'Y', 0x60000000, 5, 'a'}, + { 'Y', 0x6e000000, 13, '-'}, + { 'Y', 0x6e380000, 13, ','}, + { 'Y', 0x6f000000, 8, 'i'}, + { 'Y', 0x78000000, 5, ' '}, + { 'Y', 0x80000000, 1, 'o'}, + { 'Z', 0x08000000, 5, 'Z'}, + { 'Z', 0x10000000, 5, ' '}, + { 'Z', 0x18000000, 5, 'u'}, + { 'Z', 0x20000000, 4, 'z'}, + { 'Z', 0x30000000, 4, 'i'}, + { 'Z', 0x03400000, 10, '-'}, + { 'Z', 0x40000000, 2, 'a'}, + { 'Z', 0x80000000, 2, 'e'}, + { 'Z', 0xc0000000, 2, 'o'}, + { '[', 0x00000000, 4, '2'}, + { '[', 0x10000000, 11, 'J'}, + { '[', 0x10800000, 9, 'C'}, + { '[', 0x11000000, 9, 'f'}, + { '[', 0x14000000, 6, 'n'}, + { '[', 0x1c000000, 11, 'L'}, + { '[', 0x1c240000, 15, ESCAPE}, + { '[', 0x1c280000, 13, 'D'}, + { '[', 0x1c400000, 10, 'T'}, + { '[', 0x1c800000, 9, 'c'}, + { '[', 0x30000000, 4, '1'}, + { '[', 0x40000000, 2, 'A'}, + { '[', 0x80000000, 1, 'S'}, + { '\'', 0x00000000, 4, 'l'}, + { '\'', 0x10000000, 6, 'n'}, + { '\'', 0x14000000, 6, '.'}, + { '\'', 0x18000000, 6, 'C'}, + { '\'', 0x1c000000, 8, 'S'}, + { '\'', 0x1d000000, 9, 'f'}, + { '\'', 0x1d800000, 9, 'g'}, + { '\'', 0x1e000000, 10, 'o'}, + { '\'', 0x1e400000, 10, 'K'}, + { '\'', 0x1e840000, 14, '0'}, + { '\'', 0x1e900000, 12, 'W'}, + { '\'', 0x1ea00000, 11, '?'}, + { '\'', 0x1ec00000, 10, 'a'}, + { '\'', 0x1f000000, 8, 'p'}, + { '\'', 0x20000000, 3, 't'}, + { '\'', 0x40000000, 3, ' '}, + { '\'', 0x60000000, 6, 'B'}, + { '\'', 0x64000000, 9, 'F'}, + { '\'', 0x64800000, 9, 'h'}, + { '\'', 0x65000000, 8, 'D'}, + { '\'', 0x66000000, 11, 'E'}, + { '\'', 0x66400000, 10, 'u'}, + { '\'', 0x66800000, 9, 'H'}, + { '\'', 0x67900000, 12, ':'}, + { '\'', 0x67b40000, 16, ESCAPE}, + { '\'', 0x67b80000, 13, 'y'}, + { '\'', 0x68000000, 5, 'r'}, + { '\'', 0x70000000, 7, 'd'}, + { '\'', 0x72400000, 10, 'I'}, + { '\'', 0x72800000, 9, 'R'}, + { '\'', 0x73800000, 9, 'T'}, + { '\'', 0x74000000, 6, 'A'}, + { '\'', 0x78000000, 7, 'v'}, + { '\'', 0x7a000000, 10, 'w'}, + { '\'', 0x7a400000, 10, 'b'}, + { '\'', 0x7a800000, 9, 'G'}, + { '\'', 0x7b000000, 8, 'i'}, + { '\'', 0x7c000000, 8, 'c'}, + { '\'', 0x7d000000, 8, 'm'}, + { '\'', 0x7e000000, 13, '6'}, + { '\'', 0x7e100000, 12, 'q'}, + { '\'', 0x7e220000, 15, 'U'}, + { '\'', 0x7e300000, 12, 'M'}, + { '\'', 0x7e400000, 10, 'e'}, + { '\'', 0x7e800000, 9, 'L'}, + { '\'', 0x7f000000, 8, ','}, + { '\'', 0x80000000, 1, 's'}, + { ']', 0x04000000, 6, ','}, + { ']', 0x20000000, 3, '.'}, + { ']', 0x40000000, 2, ' '}, + { ']', 0x80000000, 1, STOP}, + { 'a', 0x00000000, 4, 'm'}, + { 'a', 0x10000000, 6, 'p'}, + { 'a', 0x14000000, 7, 'w'}, + { 'a', 0x16000000, 9, ','}, + { 'a', 0x16800000, 9, '\''}, + { 'a', 0x17000000, 8, 'z'}, + { 'a', 0x18000000, 5, 'd'}, + { 'a', 0x20000000, 3, 'r'}, + { 'a', 0x40000000, 2, 'n'}, + { 'a', 0x80000000, 5, 'i'}, + { 'a', 0x88000000, 6, 'u'}, + { 'a', 0x8c000000, 6, 'v'}, + { 'a', 0x90000000, 4, 's'}, + { 'a', 0xa0000000, 3, 't'}, + { 'a', 0xc0000000, 5, 'y'}, + { 'a', 0xc8000000, 8, '.'}, + { 'a', 0xc9000000, 11, 'a'}, + { 'a', 0xc9200000, 11, '-'}, + { 'a', 0xc9400000, 12, 'q'}, + { 'a', 0xc9500000, 14, '!'}, + { 'a', 0xc9550000, 17, 'J'}, + { 'a', 0xc9560000, 16, ';'}, + { 'a', 0xc9570000, 16, ')'}, + { 'a', 0xc9580000, 18, 'R'}, + { 'a', 0xc9590000, 16, '/'}, + { 'a', 0xc95c0000, 14, '?'}, + { 'a', 0xc9600000, 11, 'j'}, + { 'a', 0xc9800000, 9, 'e'}, + { 'a', 0xca000000, 11, ':'}, + { 'a', 0xca200000, 11, 'o'}, + { 'a', 0xca400000, 10, 'x'}, + { 'a', 0xca800000, 9, 'h'}, + { 'a', 0xcb000000, 8, 'f'}, + { 'a', 0xcc000000, 6, 'g'}, + { 'a', 0xd0000000, 5, 'c'}, + { 'a', 0xd8000000, 6, 'b'}, + { 'a', 0xdc000000, 6, 'k'}, + { 'a', 0xe0000000, 4, ' '}, + { 'a', 0xf0000000, 4, 'l'}, + { 'b', 0x00000000, 2, 'e'}, + { 'b', 0x40000000, 3, 'u'}, + { 'b', 0x60000000, 3, 'a'}, + { 'b', 0x80000000, 3, 'y'}, + { 'b', 0xa0000000, 3, 'o'}, + { 'b', 0xc0000000, 4, 'l'}, + { 'b', 0xd0000000, 6, 's'}, + { 'b', 0xd4000000, 9, 'j'}, + { 'b', 0xd4800000, 13, '?'}, + { 'b', 0xd4880000, 14, 'f'}, + { 'b', 0xd48c0000, 16, '/'}, + { 'b', 0xd4900000, 13, 'v'}, + { 'b', 0xd4984000, 19, ESCAPE}, + { 'b', 0xd4a00000, 11, ':'}, + { 'b', 0xd4c00000, 10, '\''}, + { 'b', 0xd5000000, 8, 'c'}, + { 'b', 0xd6000000, 9, ','}, + { 'b', 0xd6800000, 9, '.'}, + { 'b', 0xd7000000, 11, 'w'}, + { 'b', 0xd7200000, 11, 'd'}, + { 'b', 0xd7400000, 11, 'h'}, + { 'b', 0xd7600000, 11, '&'}, + { 'b', 0xd7800000, 12, 'm'}, + { 'b', 0xd7900000, 12, 'n'}, + { 'b', 0xd7a00000, 11, '-'}, + { 'b', 0xd7c00000, 10, 't'}, + { 'b', 0xd8000000, 6, ' '}, + { 'b', 0xdc000000, 6, 'b'}, + { 'b', 0xe0000000, 4, 'r'}, + { 'b', 0xf0000000, 4, 'i'}, + { 'c', 0x00000000, 2, 'o'}, + { 'c', 0x40000000, 4, 'i'}, + { 'c', 0x50000000, 4, 'l'}, + { 'c', 0x60000000, 3, 'a'}, + { 'c', 0x80000000, 3, 'e'}, + { 'c', 0xa0000000, 5, 'u'}, + { 'c', 0xa8000000, 5, 'r'}, + { 'c', 0xb0000000, 4, 'k'}, + { 'c', 0xc0000000, 3, 'h'}, + { 'c', 0xe0000000, 5, ' '}, + { 'c', 0xe8000000, 7, 'y'}, + { 'c', 0xea000000, 7, 'c'}, + { 'c', 0xec000000, 12, ':'}, + { 'c', 0xec100000, 15, 'b'}, + { 'c', 0xec120000, 15, ESCAPE}, + { 'c', 0xec1b0000, 16, 'V'}, + { 'c', 0xec1c0000, 14, 'E'}, + { 'c', 0xec200000, 11, 'n'}, + { 'c', 0xec400000, 10, 'G'}, + { 'c', 0xec800000, 13, 'N'}, + { 'c', 0xec900000, 12, '-'}, + { 'c', 0xeca00000, 12, 'A'}, + { 'c', 0xecb00000, 14, '?'}, + { 'c', 0xecb80000, 15, ';'}, + { 'c', 0xecba0000, 17, 'U'}, + { 'c', 0xecc00000, 11, 'D'}, + { 'c', 0xece00000, 12, 'L'}, + { 'c', 0xecf00000, 12, '\''}, + { 'c', 0xed000000, 8, 's'}, + { 'c', 0xee000000, 8, '.'}, + { 'c', 0xef000000, 11, 'K'}, + { 'c', 0xef200000, 12, 'd'}, + { 'c', 0xef300000, 14, 'M'}, + { 'c', 0xef380000, 13, 'F'}, + { 'c', 0xef400000, 12, 'q'}, + { 'c', 0xef500000, 12, 'I'}, + { 'c', 0xef600000, 11, 'C'}, + { 'c', 0xef800000, 9, ','}, + { 'c', 0xf0000000, 4, 't'}, + { 'd', 0x00000000, 1, ' '}, + { 'd', 0x80000000, 8, 'h'}, + { 'd', 0x81000000, 8, ':'}, + { 'd', 0x82000000, 8, 'm'}, + { 'd', 0x83000000, 11, '!'}, + { 'd', 0x83300000, 12, ')'}, + { 'd', 0x83400000, 12, 'k'}, + { 'd', 0x83500000, 12, ';'}, + { 'd', 0x83600000, 15, 'z'}, + { 'd', 0x83640000, 16, ESCAPE}, + { 'd', 0x83660000, 15, 'q'}, + { 'd', 0x836c0000, 14, 'j'}, + { 'd', 0x83700000, 12, '/'}, + { 'd', 0x83800000, 9, 'f'}, + { 'd', 0x84000000, 6, 'd'}, + { 'd', 0x88000000, 5, '.'}, + { 'd', 0x90000000, 8, 'w'}, + { 'd', 0x91000000, 8, 'n'}, + { 'd', 0x92000000, 7, '-'}, + { 'd', 0x94000000, 6, 'l'}, + { 'd', 0x98000000, 5, 'o'}, + { 'd', 0xa0000000, 3, 'e'}, + { 'd', 0xc0000000, 4, 'a'}, + { 'd', 0xd0000000, 6, 'u'}, + { 'd', 0xd4000000, 11, 'p'}, + { 'd', 0xd4200000, 11, 't'}, + { 'd', 0xd4400000, 10, '?'}, + { 'd', 0xd4800000, 10, 'b'}, + { 'd', 0xd4c00000, 10, 'c'}, + { 'd', 0xd5000000, 8, '\''}, + { 'd', 0xd6000000, 7, 'v'}, + { 'd', 0xd8000000, 5, 'r'}, + { 'd', 0xe0000000, 4, 'i'}, + { 'd', 0xf0000000, 7, 'g'}, + { 'd', 0xf2000000, 7, ','}, + { 'd', 0xf4000000, 6, 'y'}, + { 'd', 0xf8000000, 5, 's'}, + { 'e', 0x00000000, 4, 'd'}, + { 'e', 0x10000000, 5, 'c'}, + { 'e', 0x18000000, 6, 'x'}, + { 'e', 0x1c000000, 7, 'f'}, + { 'e', 0x1e000000, 8, '-'}, + { 'e', 0x1f000000, 8, 'h'}, + { 'e', 0x20000000, 6, 'v'}, + { 'e', 0x24000000, 6, 'i'}, + { 'e', 0x28000000, 6, 'y'}, + { 'e', 0x2c000000, 8, 'k'}, + { 'e', 0x2d000000, 10, ')'}, + { 'e', 0x2d400000, 10, 'q'}, + { 'e', 0x2d800000, 9, ':'}, + { 'e', 0x2e000000, 7, 'b'}, + { 'e', 0x30000000, 4, 'a'}, + { 'e', 0x40000000, 3, 's'}, + { 'e', 0x60000000, 5, 'e'}, + { 'e', 0x68000000, 5, 'w'}, + { 'e', 0x70000000, 6, 'm'}, + { 'e', 0x74000000, 7, ','}, + { 'e', 0x76000000, 8, '\''}, + { 'e', 0x77000000, 11, 'z'}, + { 'e', 0x77240000, 14, '4'}, + { 'e', 0x77280000, 14, 'B'}, + { 'e', 0x772c0000, 16, ESCAPE}, + { 'e', 0x772d4000, 18, 'G'}, + { 'e', 0x772f4000, 21, '2'}, + { 'e', 0x77300000, 13, '/'}, + { 'e', 0x77380000, 14, ']'}, + { 'e', 0x773c0000, 14, ';'}, + { 'e', 0x77400000, 10, '?'}, + { 'e', 0x77800000, 10, 'u'}, + { 'e', 0x77c00000, 11, '!'}, + { 'e', 0x77e00000, 12, STOP}, + { 'e', 0x77f00000, 12, 'j'}, + { 'e', 0x78000000, 5, 't'}, + { 'e', 0x80000000, 2, ' '}, + { 'e', 0xc0000000, 3, 'r'}, + { 'e', 0xe0000000, 5, 'l'}, + { 'e', 0xe8000000, 6, '.'}, + { 'e', 0xec000000, 7, 'p'}, + { 'e', 0xee000000, 8, 'g'}, + { 'e', 0xef000000, 8, 'o'}, + { 'e', 0xf0000000, 4, 'n'}, + { 'f', 0x00000000, 2, 'o'}, + { 'f', 0x40000000, 3, 'i'}, + { 'f', 0x60000000, 5, 't'}, + { 'f', 0x68000000, 8, 's'}, + { 'f', 0x69000000, 8, 'y'}, + { 'f', 0x6a000000, 10, '?'}, + { 'f', 0x6a400000, 12, 'm'}, + { 'f', 0x6a500000, 16, 'h'}, + { 'f', 0x6a560000, 16, ';'}, + { 'f', 0x6a600000, 11, ':'}, + { 'f', 0x6a800000, 11, '\''}, + { 'f', 0x6aa00000, 11, 'g'}, + { 'f', 0x6ac00000, 10, ','}, + { 'f', 0x6b000000, 9, '.'}, + { 'f', 0x6b800000, 12, ESCAPE}, + { 'f', 0x6b980000, 14, ')'}, + { 'f', 0x6b9c0000, 14, 'w'}, + { 'f', 0x6bb00000, 12, 'n'}, + { 'f', 0x6bc00000, 10, '-'}, + { 'f', 0x6c000000, 6, 'l'}, + { 'f', 0x70000000, 4, 'a'}, + { 'f', 0x80000000, 2, ' '}, + { 'f', 0xc0000000, 3, 'r'}, + { 'f', 0xe0000000, 4, 'e'}, + { 'f', 0xf0000000, 5, 'u'}, + { 'f', 0xf8000000, 5, 'f'}, + { 'g', 0x00000000, 3, 'a'}, + { 'g', 0x20000000, 9, 'd'}, + { 'g', 0x20800000, 10, '?'}, + { 'g', 0x20c00000, 10, 'm'}, + { 'g', 0x21000000, 8, '\''}, + { 'g', 0x22000000, 8, '-'}, + { 'g', 0x23000000, 8, ':'}, + { 'g', 0x24000000, 6, ','}, + { 'g', 0x28000000, 6, 'n'}, + { 'g', 0x2c000000, 7, 'y'}, + { 'g', 0x2e000000, 13, 'k'}, + { 'g', 0x2e080000, 14, ')'}, + { 'g', 0x2e0c0000, 14, '"'}, + { 'g', 0x2e100000, 12, ';'}, + { 'g', 0x2e200000, 11, '!'}, + { 'g', 0x2e400000, 13, 'p'}, + { 'g', 0x2e480000, 16, ESCAPE}, + { 'g', 0x2e4e0000, 15, '/'}, + { 'g', 0x2e600000, 11, 'f'}, + { 'g', 0x2e800000, 9, 'b'}, + { 'g', 0x2f000000, 9, 't'}, + { 'g', 0x2f800000, 9, 'w'}, + { 'g', 0x30000000, 4, 'u'}, + { 'g', 0x40000000, 3, 'h'}, + { 'g', 0x60000000, 4, 'r'}, + { 'g', 0x70000000, 5, 'l'}, + { 'g', 0x78000000, 6, 'g'}, + { 'g', 0x7c000000, 6, '.'}, + { 'g', 0x80000000, 4, 'i'}, + { 'g', 0x90000000, 5, 's'}, + { 'g', 0x98000000, 5, 'o'}, + { 'g', 0xa0000000, 3, 'e'}, + { 'g', 0xc0000000, 2, ' '}, + { 'h', 0x00000000, 1, 'e'}, + { 'h', 0x80000000, 3, 'o'}, + { 'h', 0xa0000000, 3, 'i'}, + { 'h', 0xc0000000, 3, ' '}, + { 'h', 0xe0000000, 9, 'd'}, + { 'h', 0xe0880000, 15, 'p'}, + { 'h', 0xe08a0000, 15, ';'}, + { 'h', 0xe08c0000, 15, '/'}, + { 'h', 0xe0900000, 12, 'c'}, + { 'h', 0xe0a00000, 13, 'h'}, + { 'h', 0xe0a80000, 13, 'k'}, + { 'h', 0xe0b00000, 12, '?'}, + { 'h', 0xe0c00000, 10, 'w'}, + { 'h', 0xe1000000, 8, 'y'}, + { 'h', 0xe2000000, 9, 's'}, + { 'h', 0xe2800000, 10, '\''}, + { 'h', 0xe2c00000, 10, '-'}, + { 'h', 0xe3000000, 8, 'l'}, + { 'h', 0xe4000000, 6, 'r'}, + { 'h', 0xe8000000, 8, '.'}, + { 'h', 0xe9000000, 8, 'n'}, + { 'h', 0xea000000, 9, ','}, + { 'h', 0xea800000, 12, '!'}, + { 'h', 0xea910000, 17, ESCAPE}, + { 'h', 0xea940000, 14, 'g'}, + { 'h', 0xea980000, 13, 'f'}, + { 'h', 0xeaa00000, 11, 'm'}, + { 'h', 0xeac00000, 11, ':'}, + { 'h', 0xeae00000, 11, 'b'}, + { 'h', 0xeb000000, 8, 'u'}, + { 'h', 0xec000000, 6, 't'}, + { 'h', 0xf0000000, 4, 'a'}, + { 'i', 0x00000000, 3, 't'}, + { 'i', 0x20000000, 5, 'a'}, + { 'i', 0x28000000, 6, 'p'}, + { 'i', 0x2c000000, 7, 'z'}, + { 'i', 0x2e000000, 9, '-'}, + { 'i', 0x2e800000, 9, 'x'}, + { 'i', 0x2f000000, 8, 'b'}, + { 'i', 0x30000000, 4, 'l'}, + { 'i', 0x40000000, 3, 's'}, + { 'i', 0x60000000, 5, 'm'}, + { 'i', 0x68000000, 5, 'd'}, + { 'i', 0x70000000, 5, 'v'}, + { 'i', 0x78000000, 6, 'f'}, + { 'i', 0x7c000000, 7, ' '}, + { 'i', 0x7e000000, 8, 'k'}, + { 'i', 0x7f000000, 10, 'u'}, + { 'i', 0x7f400000, 11, '.'}, + { 'i', 0x7f600000, 15, '/'}, + { 'i', 0x7f622000, 19, 'C'}, + { 'i', 0x7f624000, 19, ESCAPE}, + { 'i', 0x7f627000, 20, ';'}, + { 'i', 0x7f640000, 14, ':'}, + { 'i', 0x7f680000, 13, 'i'}, + { 'i', 0x7f700000, 12, 'w'}, + { 'i', 0x7f800000, 10, 'q'}, + { 'i', 0x7fc00000, 11, ','}, + { 'i', 0x7fe00000, 14, 'h'}, + { 'i', 0x7fe50000, 18, ')'}, + { 'i', 0x7fe80000, 13, 'j'}, + { 'i', 0x7ff00000, 12, '\''}, + { 'i', 0x80000000, 2, 'n'}, + { 'i', 0xc0000000, 4, 'o'}, + { 'i', 0xd0000000, 4, 'c'}, + { 'i', 0xe0000000, 5, 'g'}, + { 'i', 0xe8000000, 5, 'r'}, + { 'i', 0xf0000000, 4, 'e'}, + { 'j', 0x00000000, 1, 'o'}, + { 'j', 0x80000000, 5, 'i'}, + { 'j', 0x88800000, 11, 'n'}, + { 'j', 0x88a00000, 13, ESCAPE}, + { 'j', 0x8a000000, 7, ' '}, + { 'j', 0x90000000, 4, 'e'}, + { 'j', 0xa0000000, 3, 'a'}, + { 'j', 0xc0000000, 2, 'u'}, + { 'k', 0x00000000, 3, 's'}, + { 'k', 0x20000000, 4, '.'}, + { 'k', 0x30000000, 6, '\''}, + { 'k', 0x34000000, 6, 'a'}, + { 'k', 0x38000000, 6, 'p'}, + { 'k', 0x3c000000, 6, ','}, + { 'k', 0x40000000, 7, '/'}, + { 'k', 0x42000000, 10, 'r'}, + { 'k', 0x42800000, 10, '?'}, + { 'k', 0x42c00000, 11, 'j'}, + { 'k', 0x42e00000, 12, ')'}, + { 'k', 0x43000000, 10, 't'}, + { 'k', 0x43400000, 10, 'g'}, + { 'k', 0x43800000, 9, 'b'}, + { 'k', 0x44000000, 7, '-'}, + { 'k', 0x46000000, 7, 'o'}, + { 'k', 0x48000000, 5, 'y'}, + { 'k', 0x50000000, 6, 'l'}, + { 'k', 0x54000000, 6, 'f'}, + { 'k', 0x58000000, 6, 'n'}, + { 'k', 0x5c000000, 9, 'w'}, + { 'k', 0x5c800000, 9, 'm'}, + { 'k', 0x5d000000, 8, ':'}, + { 'k', 0x5e000000, 9, 'h'}, + { 'k', 0x5e800000, 12, ';'}, + { 'k', 0x5e900000, 12, 'c'}, + { 'k', 0x5eb00000, 13, '!'}, + { 'k', 0x5ec00000, 10, 'd'}, + { 'k', 0x5f000000, 9, 'u'}, + { 'k', 0x5f800000, 9, 'k'}, + { 'k', 0x60000000, 3, 'i'}, + { 'k', 0x80000000, 2, ' '}, + { 'k', 0xc0000000, 2, 'e'}, + { 'l', 0x00000000, 4, 'u'}, + { 'l', 0x10000000, 4, 'd'}, + { 'l', 0x20000000, 4, 'y'}, + { 'l', 0x30000000, 6, '.'}, + { 'l', 0x34000000, 7, 'v'}, + { 'l', 0x36000000, 10, 'r'}, + { 'l', 0x36400000, 10, 'h'}, + { 'l', 0x36800000, 9, ':'}, + { 'l', 0x37000000, 8, 'c'}, + { 'l', 0x38000000, 6, 't'}, + { 'l', 0x3c000000, 7, 'f'}, + { 'l', 0x3e000000, 8, '-'}, + { 'l', 0x3f000000, 10, 'n'}, + { 'l', 0x3f400000, 10, 'g'}, + { 'l', 0x3f800000, 9, 'b'}, + { 'l', 0x40000000, 3, 'a'}, + { 'l', 0x60000000, 3, 'i'}, + { 'l', 0x80000000, 3, 'l'}, + { 'l', 0xa0000000, 5, 's'}, + { 'l', 0xa8000000, 7, 'm'}, + { 'l', 0xaa000000, 7, 'k'}, + { 'l', 0xac000000, 7, 'p'}, + { 'l', 0xae000000, 9, '\''}, + { 'l', 0xae800000, 11, '?'}, + { 'l', 0xaea80000, 15, ';'}, + { 'l', 0xaeaa0000, 17, '@'}, + { 'l', 0xaeaa8000, 17, 'j'}, + { 'l', 0xaeab0000, 16, ESCAPE}, + { 'l', 0xaeac0000, 14, '/'}, + { 'l', 0xaeb00000, 13, 'z'}, + { 'l', 0xaeb80000, 15, 'E'}, + { 'l', 0xaebc0000, 16, ')'}, + { 'l', 0xaec00000, 10, 'w'}, + { 'l', 0xaf000000, 8, ','}, + { 'l', 0xb0000000, 4, 'o'}, + { 'l', 0xc0000000, 3, 'e'}, + { 'l', 0xe0000000, 3, ' '}, + { 'm', 0x00000000, 2, 'a'}, + { 'm', 0x40000000, 2, 'e'}, + { 'm', 0x80000000, 5, '.'}, + { 'm', 0x88000000, 5, 's'}, + { 'm', 0x90000000, 4, 'p'}, + { 'm', 0xa0000000, 7, ','}, + { 'm', 0xa3000000, 9, ':'}, + { 'm', 0xa3800000, 11, '?'}, + { 'm', 0xa3a00000, 11, '!'}, + { 'm', 0xa3c00000, 10, 'r'}, + { 'm', 0xa4000000, 6, 'y'}, + { 'm', 0xa8000000, 7, '/'}, + { 'm', 0xaa000000, 9, '\''}, + { 'm', 0xaa800200, 23, STOP}, + { 'm', 0xaaa00000, 11, 'w'}, + { 'm', 0xaac00000, 10, 'f'}, + { 'm', 0xab000000, 10, 'l'}, + { 'm', 0xab400000, 14, ')'}, + { 'm', 0xab440000, 14, ESCAPE}, + { 'm', 0xab490000, 17, 'k'}, + { 'm', 0xab498000, 17, 'z'}, + { 'm', 0xab4c0000, 14, 'd'}, + { 'm', 0xab500000, 13, 't'}, + { 'm', 0xab600000, 11, 'h'}, + { 'm', 0xab800000, 10, 'n'}, + { 'm', 0xabc00000, 11, '-'}, + { 'm', 0xabf00000, 13, ';'}, + { 'm', 0xabf80000, 13, 'c'}, + { 'm', 0xac000000, 6, 'b'}, + { 'm', 0xb0000000, 4, 'o'}, + { 'm', 0xc0000000, 4, 'i'}, + { 'm', 0xd0000000, 5, 'u'}, + { 'm', 0xd8000000, 5, 'm'}, + { 'm', 0xe0000000, 3, ' '}, + { 'n', 0x00000000, 4, 's'}, + { 'n', 0x10000000, 8, 'm'}, + { 'n', 0x11000000, 11, 'p'}, + { 'n', 0x11200000, 13, '/'}, + { 'n', 0x11300000, 12, ';'}, + { 'n', 0x11400000, 10, 'z'}, + { 'n', 0x11800000, 9, 'w'}, + { 'n', 0x12000000, 7, 'u'}, + { 'n', 0x14000000, 8, 'l'}, + { 'n', 0x15000000, 8, '-'}, + { 'n', 0x16000000, 7, 'v'}, + { 'n', 0x18000000, 7, 'f'}, + { 'n', 0x1a000000, 10, 'h'}, + { 'n', 0x1a400000, 13, ESCAPE}, + { 'n', 0x1a480000, 14, 'B'}, + { 'n', 0x1a500000, 12, ')'}, + { 'n', 0x1a600000, 11, 'x'}, + { 'n', 0x1a800000, 9, ':'}, + { 'n', 0x1b000000, 10, 'b'}, + { 'n', 0x1b400000, 10, 'j'}, + { 'n', 0x1b800000, 10, 'r'}, + { 'n', 0x1bc00000, 12, '!'}, + { 'n', 0x1bd00000, 12, 'q'}, + { 'n', 0x1be00000, 11, '?'}, + { 'n', 0x1c000000, 6, '.'}, + { 'n', 0x20000000, 3, 't'}, + { 'n', 0x40000000, 2, ' '}, + { 'n', 0x80000000, 3, 'g'}, + { 'n', 0xa0000000, 4, 'a'}, + { 'n', 0xb0000000, 5, 'c'}, + { 'n', 0xb8000000, 7, 'k'}, + { 'n', 0xba000000, 7, '\''}, + { 'n', 0xbc000000, 6, 'n'}, + { 'n', 0xc0000000, 5, 'i'}, + { 'n', 0xc8000000, 7, 'y'}, + { 'n', 0xca000000, 7, ','}, + { 'n', 0xcc000000, 6, 'o'}, + { 'n', 0xd0000000, 4, 'e'}, + { 'n', 0xe0000000, 3, 'd'}, + { 'o', 0x00000000, 4, 'l'}, + { 'o', 0x10000000, 5, 'v'}, + { 'o', 0x18000000, 6, 'k'}, + { 'o', 0x1c000000, 6, 'i'}, + { 'o', 0x20000000, 3, 'u'}, + { 'o', 0x40000000, 5, 's'}, + { 'o', 0x48000000, 5, 'p'}, + { 'o', 0x50000000, 6, 'g'}, + { 'o', 0x54000000, 9, '-'}, + { 'o', 0x54800000, 9, ','}, + { 'o', 0x55000000, 8, 'h'}, + { 'o', 0x56000000, 7, 'e'}, + { 'o', 0x58000000, 7, 'y'}, + { 'o', 0x5a000000, 7, 'a'}, + { 'o', 0x5c000000, 6, 'c'}, + { 'o', 0x60000000, 3, ' '}, + { 'o', 0x80000000, 3, 'r'}, + { 'o', 0xa0000000, 5, 't'}, + { 'o', 0xa8000000, 5, 'o'}, + { 'o', 0xb0000000, 8, '.'}, + { 'o', 0xb1000000, 13, '!'}, + { 'o', 0xb10d0000, 16, ';'}, + { 'o', 0xb10e0000, 16, 'G'}, + { 'o', 0xb10ff000, 20, 'C'}, + { 'o', 0xb1100000, 12, '?'}, + { 'o', 0xb1200000, 11, ':'}, + { 'o', 0xb1400000, 10, '\''}, + { 'o', 0xb1800000, 14, '/'}, + { 'o', 0xb1840000, 14, ')'}, + { 'o', 0xb1880000, 13, 'q'}, + { 'o', 0xb1900000, 12, 'j'}, + { 'o', 0xb1a00000, 11, 'z'}, + { 'o', 0xb1c00000, 10, 'x'}, + { 'o', 0xb2000000, 7, 'b'}, + { 'o', 0xb4000000, 6, 'd'}, + { 'o', 0xb8000000, 5, 'w'}, + { 'o', 0xc0000000, 4, 'm'}, + { 'o', 0xd0000000, 4, 'f'}, + { 'o', 0xe0000000, 3, 'n'}, + { 'p', 0x00000000, 4, 'p'}, + { 'p', 0x10000000, 8, '-'}, + { 'p', 0x11200000, 11, 'f'}, + { 'p', 0x11400000, 11, 'k'}, + { 'p', 0x11600000, 11, '!'}, + { 'p', 0x11800000, 9, '?'}, + { 'p', 0x12000000, 7, 'd'}, + { 'p', 0x14000000, 6, 'm'}, + { 'p', 0x18000000, 5, 't'}, + { 'p', 0x20000000, 3, 'l'}, + { 'p', 0x40000000, 3, ' '}, + { 'p', 0x60000000, 3, 'o'}, + { 'p', 0x80000000, 5, 'u'}, + { 'p', 0x88000000, 5, 'h'}, + { 'p', 0x90000000, 5, 's'}, + { 'p', 0x98000000, 17, ESCAPE}, + { 'p', 0x98080000, 13, 'g'}, + { 'p', 0x98100000, 12, '/'}, + { 'p', 0x98200000, 11, 'c'}, + { 'p', 0x98400000, 11, 'n'}, + { 'p', 0x98600000, 11, 'w'}, + { 'p', 0x98800000, 9, ':'}, + { 'p', 0x99000000, 10, '\''}, + { 'p', 0x99c00000, 10, 'b'}, + { 'p', 0x9a000000, 7, 'y'}, + { 'p', 0x9c000000, 7, '.'}, + { 'p', 0x9e000000, 7, ','}, + { 'p', 0xa0000000, 3, 'r'}, + { 'p', 0xc0000000, 4, 'a'}, + { 'p', 0xd0000000, 4, 'i'}, + { 'p', 0xe0000000, 3, 'e'}, + { 'q', 0x00000000, 3, ','}, + { 'q', 0x20000000, 3, '.'}, + { 'q', 0x44000000, 6, 'a'}, + { 'q', 0x60000000, 3, ' '}, + { 'q', 0x80000000, 1, 'u'}, + { 'r', 0x00000000, 3, 'a'}, + { 'r', 0x20000000, 3, 'o'}, + { 'r', 0x40000000, 4, 's'}, + { 'r', 0x50000000, 4, 't'}, + { 'r', 0x60000000, 7, 'f'}, + { 'r', 0x62018000, 17, 'Z'}, + { 'r', 0x62040000, 16, 'x'}, + { 'r', 0x62050000, 16, ESCAPE}, + { 'r', 0x62080000, 13, ';'}, + { 'r', 0x62100000, 12, 'q'}, + { 'r', 0x62200000, 12, 'j'}, + { 'r', 0x62400000, 11, '!'}, + { 'r', 0x62600000, 12, '/'}, + { 'r', 0x62740000, 14, 'z'}, + { 'r', 0x62780000, 13, ')'}, + { 'r', 0x62800000, 9, ':'}, + { 'r', 0x63000000, 8, '\''}, + { 'r', 0x64000000, 7, ','}, + { 'r', 0x66000000, 7, 'v'}, + { 'r', 0x68000000, 6, 'u'}, + { 'r', 0x6c000000, 6, 'm'}, + { 'r', 0x70000000, 5, 'd'}, + { 'r', 0x78000000, 8, '-'}, + { 'r', 0x79000000, 8, 'b'}, + { 'r', 0x7a000000, 9, 'w'}, + { 'r', 0x7a800000, 10, '?'}, + { 'r', 0x7ac00000, 10, 'h'}, + { 'r', 0x7b000000, 8, 'p'}, + { 'r', 0x7c000000, 6, 'k'}, + { 'r', 0x80000000, 3, 'i'}, + { 'r', 0xa0000000, 5, 'n'}, + { 'r', 0xa8000000, 5, 'y'}, + { 'r', 0xb0000000, 7, 'c'}, + { 'r', 0xb2000000, 7, 'g'}, + { 'r', 0xb4000000, 6, 'l'}, + { 'r', 0xb8000000, 6, '.'}, + { 'r', 0xbc000000, 6, 'r'}, + { 'r', 0xc0000000, 3, ' '}, + { 'r', 0xe0000000, 3, 'e'}, + { 's', 0x00000000, 1, ' '}, + { 's', 0x80000000, 4, '.'}, + { 's', 0x90000000, 10, '!'}, + { 's', 0x90400000, 10, 'g'}, + { 's', 0x90800000, 9, 'b'}, + { 's', 0x91000000, 8, 'n'}, + { 's', 0x92000000, 9, 'f'}, + { 's', 0x92800000, 10, 'r'}, + { 's', 0x92c00000, 12, '/'}, + { 's', 0x92d00000, 12, ')'}, + { 's', 0x92e20000, 15, '"'}, + { 's', 0x92e58000, 17, '@'}, + { 's', 0x92e60000, 15, 'z'}, + { 's', 0x92e80000, 13, 'v'}, + { 's', 0x92f00000, 12, STOP}, + { 's', 0x93000000, 8, 'm'}, + { 's', 0x94000000, 6, 'c'}, + { 's', 0x98000000, 5, ','}, + { 's', 0xa0000000, 3, 't'}, + { 's', 0xc0000000, 5, 'o'}, + { 's', 0xc8000000, 5, 's'}, + { 's', 0xd0000000, 6, 'u'}, + { 's', 0xd4000000, 8, 'y'}, + { 's', 0xd5000000, 9, 'w'}, + { 's', 0xd5800000, 10, '?'}, + { 's', 0xd5c00000, 10, '-'}, + { 's', 0xd6000000, 8, ':'}, + { 's', 0xd7000000, 12, ']'}, + { 's', 0xd7100000, 12, ';'}, + { 's', 0xd7200000, 11, 'd'}, + { 's', 0xd7400000, 10, 'q'}, + { 's', 0xd7800000, 9, '\''}, + { 's', 0xd8000000, 6, 'p'}, + { 's', 0xdc000000, 8, 'l'}, + { 's', 0xdd000000, 8, 'k'}, + { 's', 0xde000000, 7, 'a'}, + { 's', 0xe0000000, 4, 'e'}, + { 's', 0xf0000000, 5, 'h'}, + { 's', 0xf8000000, 5, 'i'}, + { 't', 0x00000000, 3, 'i'}, + { 't', 0x20000000, 4, 'a'}, + { 't', 0x30000000, 5, 'u'}, + { 't', 0x38000000, 9, 'n'}, + { 't', 0x38800000, 11, '!'}, + { 't', 0x38a00000, 13, 'g'}, + { 't', 0x38a80000, 13, ';'}, + { 't', 0x38b94000, 19, 'j'}, + { 't', 0x38ba0000, 16, 'E'}, + { 't', 0x38bc0000, 14, ')'}, + { 't', 0x38c00000, 10, '?'}, + { 't', 0x39000000, 8, '-'}, + { 't', 0x3a000000, 7, 'c'}, + { 't', 0x3c000000, 6, '.'}, + { 't', 0x40000000, 3, 'o'}, + { 't', 0x60000000, 3, 'e'}, + { 't', 0x80000000, 2, 'h'}, + { 't', 0xc0000000, 8, 'v'}, + { 't', 0xc1000000, 8, 'm'}, + { 't', 0xc2000000, 7, 'l'}, + { 't', 0xc4000000, 6, 't'}, + { 't', 0xc8000000, 5, 'r'}, + { 't', 0xd0000000, 6, 'y'}, + { 't', 0xd4000000, 11, 'z'}, + { 't', 0xd4300000, 13, 'p'}, + { 't', 0xd4380000, 14, '/'}, + { 't', 0xd43c0000, 14, 'k'}, + { 't', 0xd4400000, 10, 'b'}, + { 't', 0xd4800000, 10, ':'}, + { 't', 0xd4c00000, 11, 'd'}, + { 't', 0xd4e00000, 11, 'f'}, + { 't', 0xd5000000, 8, 'w'}, + { 't', 0xd6000000, 8, ','}, + { 't', 0xd7000000, 8, '\''}, + { 't', 0xd8000000, 5, 's'}, + { 't', 0xe0000000, 3, ' '}, + { 'u', 0x00000000, 5, 'b'}, + { 'u', 0x08000000, 5, ' '}, + { 'u', 0x10000000, 4, 'd'}, + { 'u', 0x20000000, 4, 'e'}, + { 'u', 0x30000000, 5, 'i'}, + { 'u', 0x38000000, 7, 'y'}, + { 'u', 0x3a000000, 8, 'z'}, + { 'u', 0x3b000000, 11, 'w'}, + { 'u', 0x3b200000, 12, 'q'}, + { 'u', 0x3b300000, 13, 'j'}, + { 'u', 0x3b380000, 15, 'u'}, + { 'u', 0x3b3a0000, 15, '?'}, + { 'u', 0x3b400000, 10, '-'}, + { 'u', 0x3b800000, 10, 'o'}, + { 'u', 0x3bc00000, 11, ':'}, + { 'u', 0x3be00000, 12, 'h'}, + { 'u', 0x3bf00000, 12, 'v'}, + { 'u', 0x3c000000, 8, '\''}, + { 'u', 0x3d000000, 9, ','}, + { 'u', 0x3d800000, 10, '.'}, + { 'u', 0x3dc00000, 10, 'x'}, + { 'u', 0x3e000000, 8, 'f'}, + { 'u', 0x3f000000, 8, 'k'}, + { 'u', 0x40000000, 5, 'a'}, + { 'u', 0x48000000, 5, 'g'}, + { 'u', 0x50000000, 4, 'l'}, + { 'u', 0x60000000, 3, 't'}, + { 'u', 0x80000000, 4, 'p'}, + { 'u', 0x90000000, 5, 'c'}, + { 'u', 0x98000000, 5, 'm'}, + { 'u', 0xa0000000, 3, 'n'}, + { 'u', 0xc0000000, 3, 's'}, + { 'u', 0xe0000000, 3, 'r'}, + { 'v', 0x00000000, 3, 'a'}, + { 'v', 0x20000000, 9, 'u'}, + { 'v', 0x20b00000, 12, 'v'}, + { 'v', 0x20c00000, 11, ','}, + { 'v', 0x20e40000, 15, 't'}, + { 'v', 0x20e78000, 18, ESCAPE}, + { 'v', 0x20f00000, 12, 'l'}, + { 'v', 0x21000000, 8, '\''}, + { 'v', 0x22000000, 9, 's'}, + { 'v', 0x22800000, 10, 'r'}, + { 'v', 0x22c00000, 11, 'n'}, + { 'v', 0x22e00000, 12, '@'}, + { 'v', 0x22f00000, 12, ':'}, + { 'v', 0x23000000, 8, 'y'}, + { 'v', 0x24000000, 6, ' '}, + { 'v', 0x28000000, 5, '.'}, + { 'v', 0x30000000, 4, 'o'}, + { 'v', 0x40000000, 2, 'i'}, + { 'v', 0x80000000, 1, 'e'}, + { 'w', 0x00000000, 2, 'i'}, + { 'w', 0x40000000, 5, '.'}, + { 'w', 0x50000000, 4, 'a'}, + { 'w', 0x60000000, 3, 'e'}, + { 'w', 0x80000000, 3, ' '}, + { 'w', 0xa0000000, 3, 's'}, + { 'w', 0xc0000000, 3, 'h'}, + { 'w', 0xe0000000, 5, 'n'}, + { 'w', 0xe8000000, 11, 'f'}, + { 'w', 0xe8200000, 11, ']'}, + { 'w', 0xe8400000, 11, '!'}, + { 'w', 0xe8680000, 13, 'u'}, + { 'w', 0xe8700000, 12, 'g'}, + { 'w', 0xe8800000, 10, ':'}, + { 'w', 0xe8c00000, 12, '?'}, + { 'w', 0xe8d00000, 12, 't'}, + { 'w', 0xe8e00000, 11, 'k'}, + { 'w', 0xe9000000, 9, 'c'}, + { 'w', 0xe9800000, 10, 'm'}, + { 'w', 0xe9c00000, 10, '\''}, + { 'w', 0xea000000, 8, ','}, + { 'w', 0xeb000000, 8, 'l'}, + { 'w', 0xec000000, 7, 'r'}, + { 'w', 0xee000000, 10, 'd'}, + { 'w', 0xee400000, 11, '-'}, + { 'w', 0xee640000, 14, 'j'}, + { 'w', 0xee800000, 9, 'b'}, + { 'w', 0xef000000, 8, 'y'}, + { 'w', 0xf0000000, 4, 'o'}, + { 'x', 0x00000000, 4, 'i'}, + { 'x', 0x10000000, 5, 'u'}, + { 'x', 0x18000000, 6, 'f'}, + { 'x', 0x1c000000, 7, ','}, + { 'x', 0x1e000000, 7, 'm'}, + { 'x', 0x20000000, 4, 'a'}, + { 'x', 0x30b00000, 12, '/'}, + { 'x', 0x30c00000, 10, '?'}, + { 'x', 0x32000000, 7, 'y'}, + { 'x', 0x34000000, 6, 'o'}, + { 'x', 0x38000000, 5, 'e'}, + { 'x', 0x40000000, 2, 'p'}, + { 'x', 0x80000000, 4, 'c'}, + { 'x', 0x90000000, 6, '.'}, + { 'x', 0x94000000, 9, ':'}, + { 'x', 0x94800000, 10, 'l'}, + { 'x', 0x94e00000, 11, 'b'}, + { 'x', 0x95000000, 8, '\''}, + { 'x', 0x97000000, 9, 'h'}, + { 'x', 0x97800000, 10, 'w'}, + { 'x', 0x97d80000, 13, ';'}, + { 'x', 0x97e00000, 11, ')'}, + { 'x', 0x98000000, 5, '-'}, + { 'x', 0xa0000000, 3, ' '}, + { 'x', 0xc0000000, 2, 't'}, + { 'y', 0x00000000, 3, 'o'}, + { 'y', 0x20000000, 7, 'w'}, + { 'y', 0x22000000, 11, ')'}, + { 'y', 0x222a0000, 15, 'x'}, + { 'y', 0x22300000, 12, 'k'}, + { 'y', 0x22400000, 10, ';'}, + { 'y', 0x22c00000, 12, ESCAPE}, + { 'y', 0x22e00000, 11, '/'}, + { 'y', 0x23000000, 8, 'b'}, + { 'y', 0x24000000, 6, 'a'}, + { 'y', 0x28000000, 6, 'i'}, + { 'y', 0x2c000000, 6, 'd'}, + { 'y', 0x30000000, 4, 's'}, + { 'y', 0x40000000, 8, '?'}, + { 'y', 0x41000000, 8, 'r'}, + { 'y', 0x42000000, 8, 'p'}, + { 'y', 0x43000000, 8, 'f'}, + { 'y', 0x44000000, 6, 'n'}, + { 'y', 0x48000000, 5, ','}, + { 'y', 0x50000000, 4, '.'}, + { 'y', 0x60000000, 5, 'e'}, + { 'y', 0x68000000, 7, 't'}, + { 'y', 0x6a000000, 7, 'm'}, + { 'y', 0x6c000000, 6, ':'}, + { 'y', 0x70000000, 5, '\''}, + { 'y', 0x78000000, 10, 'h'}, + { 'y', 0x78400000, 10, '!'}, + { 'y', 0x78810000, 16, 'T'}, + { 'y', 0x78830000, 16, 'P'}, + { 'y', 0x78880000, 13, '"'}, + { 'y', 0x78900000, 12, STOP}, + { 'y', 0x78a00000, 11, ']'}, + { 'y', 0x78c00000, 10, 'g'}, + { 'y', 0x79000000, 8, 'c'}, + { 'y', 0x7a000000, 7, '-'}, + { 'y', 0x7c000000, 6, 'l'}, + { 'y', 0x80000000, 1, ' '}, + { 'z', 0x04000000, 7, '\''}, + { 'z', 0x07000000, 8, 't'}, + { 'z', 0x08000000, 6, ','}, + { 'z', 0x0c000000, 6, '.'}, + { 'z', 0x10000000, 4, 'l'}, + { 'z', 0x20000000, 3, 'a'}, + { 'z', 0x40000000, 4, 'y'}, + { 'z', 0x50000000, 5, 'o'}, + { 'z', 0x5c800000, 11, 's'}, + { 'z', 0x5cc00000, 12, 'h'}, + { 'z', 0x5d000000, 8, 'm'}, + { 'z', 0x5e000000, 9, '-'}, + { 'z', 0x5e800000, 9, 'u'}, + { 'z', 0x5f100000, 14, 'q'}, + { 'z', 0x5f140000, 14, 'n'}, + { 'z', 0x5f180000, 13, 'v'}, + { 'z', 0x5f800000, 9, 'b'}, + { 'z', 0x60000000, 3, 'z'}, + { 'z', 0x80000000, 2, 'e'}, + { 'z', 0xc0000000, 3, ' '}, + { 'z', 0xe0000000, 3, 'i'}, + { '}', 0x0819c000, 18, STOP} +}; diff --git a/src/eitd/Makefile.am b/src/eitd/Makefile.am new file mode 100644 index 000000000..acebc9192 --- /dev/null +++ b/src/eitd/Makefile.am @@ -0,0 +1,22 @@ +INCLUDES = \ + -I$(top_srcdir)/src \ + -I$(top_srcdir)/lib \ + -I$(top_srcdir)/src/zapit/include \ + -I$(top_srcdir)/lib/libconfigfile \ + -I$(top_srcdir)/lib/connection \ + -I$(top_srcdir)/lib/libeventserver \ + -I$(top_srcdir)/lib/xmltree + +if BOXTYPE_COOL +INCLUDES += -I$(top_srcdir)/lib/libcoolstream +endif +if BOXTYPE_TRIPLE +INCLUDES += -I$(top_srcdir)/lib/libtriple +endif + +#AM_CPPFLAGS = +AM_CPPFLAGS = -fno-rtti -fno-exceptions + +noinst_LIBRARIES = libsectionsd.a +libsectionsd_a_SOURCES = sectionsd.cpp dmxapi.cpp debug.cpp dmx.cpp xmlutil.cpp \ + SIsections.cpp SIevents.cpp SIutils.cpp SIlanguage.cpp edvbstring.cpp diff --git a/src/eitd/SIevents.cpp b/src/eitd/SIevents.cpp new file mode 100644 index 000000000..cff53a81e --- /dev/null +++ b/src/eitd/SIevents.cpp @@ -0,0 +1,385 @@ +// +// $Id: SIevents.cpp,v 1.35 2008/08/16 19:23:18 seife Exp $ +// +// classes SIevent and SIevents (dbox-II-project) +// +// Homepage: http://dbox2.elxsi.de +// +// Copyright (C) 2001 fnbrd (fnbrd@gmx.de) +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// +// + +#include +#include + +#include "SIlanguage.hpp" +#include "SIutils.hpp" +#include "SIevents.hpp" + +#include +#include +#include +#include +#include +#include +#include + +const std::string languangeOFF = "OFF"; + +SIevent::SIevent(const t_original_network_id _original_network_id, const t_transport_stream_id _transport_stream_id, const t_service_id _service_id, + const unsigned short _event_id) +{ + original_network_id = _original_network_id; + transport_stream_id = _transport_stream_id; + service_id = _service_id; + eventID = _event_id; + table_id = 0xFF; /* not set */ + version = 0xFF; +} + +void SIevent::parse(Event &event) +{ + int tsidonid = (transport_stream_id << 16) | original_network_id; + time_t start_time = parseDVBtime(event.getStartTimeMjd(), event.getStartTimeBcd()); + + running = event.getRunningStatus(); + + uint32_t duration = event.getDuration(); + uint8_t duration_hi = (duration >> 16) & 0xFF; + uint8_t duration_mid = (duration >> 8) & 0xFF; + uint8_t duration_lo = duration & 0xFF; + + if (!((duration_hi == 0xff) && (duration_mid == 0xff) && (duration_lo == 0xff))) + duration = ((duration_hi)>>4)*10*3600L + ((duration_hi)&0x0f)*3600L + + ((duration_mid)>>4)*10*60L + ((duration_mid)&0x0f)*60L + + ((duration_lo)>>4)*10 + ((duration_lo)&0x0f); + +//printf("SIevent::parse : eventID %x start %d duration %d\n", eventID, (int) start_time, (int) duration); + if (start_time && duration) + times.insert(SItime(start_time, duration)); + const DescriptorList &dlist = *event.getDescriptors(); + for (DescriptorConstIterator dit = dlist.begin(); dit != dlist.end(); ++dit) { + uint8_t dtype = (*dit)->getTag(); + if(dtype == SHORT_EVENT_DESCRIPTOR) { + const ShortEventDescriptor *d = (ShortEventDescriptor*) *dit; + std::string lang = d->getIso639LanguageCode(); + std::transform(lang.begin(), lang.end(), lang.begin(), tolower); + int table = getCountryCodeDefaultMapping(lang); + setName(lang, stringDVBUTF8(d->getEventName(), table, tsidonid)); + setText(lang, stringDVBUTF8(d->getText(), table, tsidonid)); + } + else if(dtype == EXTENDED_EVENT_DESCRIPTOR) { + const ExtendedEventDescriptor *d = (ExtendedEventDescriptor*) *dit; + std::string lang = d->getIso639LanguageCode(); + std::transform(lang.begin(), lang.end(), lang.begin(), tolower); + int table = getCountryCodeDefaultMapping(lang); + + const ExtendedEventList *itemlist = d->getItems(); + for (ExtendedEventConstIterator it = itemlist->begin(); it != itemlist->end(); ++it) { + itemDescription.append(stringDVBUTF8((*it)->getItemDescription(), table, tsidonid)); + itemDescription.append("\n"); + item.append(stringDVBUTF8((*it)->getItem(), table, tsidonid)); + item.append("\n"); + } + appendExtendedText(lang, stringDVBUTF8(d->getText(), table, tsidonid)); + } + else if(dtype == CONTENT_DESCRIPTOR) { + const ContentDescriptor * d = (ContentDescriptor *) *dit; + const ContentClassificationList *clist = d->getClassifications(); + for (ContentClassificationConstIterator cit = clist->begin(); cit != clist->end(); ++cit) { + ContentClassification * c = *cit; + char content = c->getContentNibbleLevel1() << 4 | c->getContentNibbleLevel2(); + contentClassification += content; + char user = c->getUserNibble1() << 4 | c->getUserNibble2(); + userClassification += user; + } + } + else if(dtype == COMPONENT_DESCRIPTOR) { + const ComponentDescriptor *d = (ComponentDescriptor*)*dit; + SIcomponent c; + c.streamContent = d->getStreamContent(); + c.componentType = d->getComponentType(); + c.componentTag = d->getComponentTag(); + std::string lang = d->getIso639LanguageCode(); + std::transform(lang.begin(), lang.end(), lang.begin(), tolower); + int table = getCountryCodeDefaultMapping(lang); + c.component = stringDVBUTF8(d->getText(), table, tsidonid); + components.insert(c); + } + else if(dtype == PARENTAL_RATING_DESCRIPTOR) { + const ParentalRatingDescriptor *d = (ParentalRatingDescriptor*) *dit; + const ParentalRatingList *plist = d->getParentalRatings(); + for (ParentalRatingConstIterator it = plist->begin(); it != plist->end(); ++it) { + SIparentalRating p((*it)->getCountryCode(), (*it)->getRating()); + ratings.insert(p); + } + } + else if(dtype == LINKAGE_DESCRIPTOR) { + const LinkageDescriptor * d = (LinkageDescriptor *) *dit; + SIlinkage l; + l.linkageType = d->getLinkageType(); + l.transportStreamId = d->getTransportStreamId(); + l.originalNetworkId = d->getOriginalNetworkId(); + l.serviceId = d->getServiceId(); + const PrivateDataByteVector *privateData = d->getPrivateDataBytes(); + l.name = convertDVBUTF8((const char*)&((*privateData)[0]), privateData->size(), 1, tsidonid); + linkage_descs.insert(linkage_descs.end(), l); + } +#if 0 // TODO ? vps was never used + else if(dtype == PDC_DESCRIPTOR) { + } +#endif + } +} + +char SIevent::getFSK() const +{ + for (SIparentalRatings::iterator it = ratings.begin(); it != ratings.end(); ++it) + { + if (it->countryCode == "DEU") + { + if ((it->rating >= 0x01) && (it->rating <= 0x0F)) + return (it->rating + 3); // 0x01 to 0x0F minimum age = rating + 3 years + else + return (it->rating == 0 ? 0 : 18); // return FSK 18 for : 0x10 to 0xFF defined by the broadcaster + } + } + if (!ratings.empty()) + { + if ((ratings.begin()->rating >= 0x01) && (ratings.begin()->rating <= 0x0F)) + return (ratings.begin()->rating + 3); + else + return (ratings.begin()->rating == 0 ? 0 : 18); + } + + return 0x00; // 0x00 undefined +} + +std::string SIevent::getName() const +{ + if (CSectionsdClient::LANGUAGE_MODE_OFF == SIlanguage::getMode()) { + std::map::const_iterator it = langName.begin() ; + if (it != langName.end()) return it->second; + else return(""); + } else { + std::string retval; + SIlanguage::filter(langName, 1, retval); + return retval; + } +} + +void SIevent::setName(const std::string &lang, const std::string &name) +{ + std::string tmp = name; + std::replace(tmp.begin(), tmp.end(), '\n', ' '); +//printf("setName: lang %s text %s\n", lang.c_str(), name.c_str()); + if (CSectionsdClient::LANGUAGE_MODE_OFF == SIlanguage::getMode()) { + langName[languangeOFF] = tmp; //name; + } else { + langName[lang] = tmp; //name; + } +} + +std::string SIevent::getText() const +{ + if (CSectionsdClient::LANGUAGE_MODE_OFF == SIlanguage::getMode()) { + std::map::const_iterator it = langText.begin() ; + if (it != langText.end()) return it->second; + else return(""); + } else { + std::string retval; + SIlanguage::filter(langText, 0, retval); + return retval; + } +} + +void SIevent::setText(const std::string &lang, const std::string &text) +{ +//printf("setText: lang %s text %s\n", lang.c_str(), text.c_str()); + if (CSectionsdClient::LANGUAGE_MODE_OFF == SIlanguage::getMode()) { + langText[languangeOFF] = text; + } else { + langText[lang] = text; + } +} + +std::string SIevent::getExtendedText() const +{ + if (CSectionsdClient::LANGUAGE_MODE_OFF == SIlanguage::getMode()) { + std::map::const_iterator it = langExtendedText.begin() ; + if (it != langExtendedText.end()) return it->second; + else return(""); + } else { + std::string retval; + SIlanguage::filter(langExtendedText, 0, retval); + return retval; + } +} + +void SIevent::appendExtendedText(const std::string &lang, const std::string &text) +{ + if (CSectionsdClient::LANGUAGE_MODE_OFF == SIlanguage::getMode()) { + langExtendedText[languangeOFF] += text; + } else { + langExtendedText[lang] += text; + } +} + +void SIevent::setExtendedText(const std::string &lang, const std::string &text) +{ +//printf("setExtendedText: lang %s text %s\n", lang.c_str(), text.c_str()); + if (CSectionsdClient::LANGUAGE_MODE_OFF == SIlanguage::getMode()) { + langExtendedText[languangeOFF] = text; + } else { + langExtendedText[lang] = text; + } +} + +int SIevent::saveXML(FILE *file, const char *serviceName) const +{ + if(saveXML0(file)) + return 1; + if(serviceName) { + if(fprintf(file, " ")<0) + return 2; + saveStringToXMLfile(file, serviceName); + if(fprintf(file, "\n")<0) + return 3; + } + return saveXML2(file); +} + +int SIevent::saveXML0(FILE *file) const +{ + if(fprintf(file, "\t\t\n", eventID, table_id)<0) + return 1; + return 0; +} + +int SIevent::saveXML2(FILE *file) const +{ + for (std::map::const_iterator + i = langName.begin() ; + i != langName.end() ; + i++) { + if (i->second.length()) { + fprintf(file, "\t\t\tfirst.c_str()); + saveStringToXMLfile(file, i->second.c_str()); + fprintf(file, "\"/>\n"); + } + } + for (std::map::const_iterator + i = langText.begin() ; + i != langText.end() ; + i++) { + if (i->second.length()) { + fprintf(file, "\t\t\tfirst.c_str()); + saveStringToXMLfile(file, i->second.c_str()); + fprintf(file, "\"/>\n"); + } + } + if(item.length()) { + fprintf(file, "\t\t\t\n"); + } + if(itemDescription.length()) { + fprintf(file, "\t\t\t\n"); + } + for (std::map::const_iterator + i = langExtendedText.begin() ; + i != langExtendedText.end() ; + i++) { + if (i->second.length()) { + fprintf(file, "\t\t\tfirst.c_str()); + saveStringToXMLfile(file, i->second.c_str()); + fprintf(file, "\"/>\n"); + } + } + for_each(times.begin(), times.end(), saveSItimeXML(file)); + for(unsigned i=0; i\n", contentClassification[i], userClassification[i]); + } + for_each(components.begin(), components.end(), saveSIcomponentXML(file)); + for_each(ratings.begin(), ratings.end(), saveSIparentalRatingXML(file)); + for_each(linkage_descs.begin(), linkage_descs.end(), saveSIlinkageXML(file)); + fprintf(file, "\t\t\n"); + return 0; +} + +void SIevent::dump(void) const +{ + printf("Unique key: %llx\n", uniqueKey()); + if(original_network_id) + printf("Original-Network-ID: %hu\n", original_network_id); + if (service_id) + printf("Service-ID: %hu\n", service_id); + printf("Event-ID: %hu\n", eventID); + if(item.length()) + printf("Item: %s\n", item.c_str()); + if(itemDescription.length()) + printf("Item-Description: %s\n", itemDescription.c_str()); + + for (std::map::const_iterator it = langName.begin() ; + it != langName.end() ; ++it) + printf("Name (%s): %s\n", it->first.c_str(), it->second.c_str()); + for (std::map::const_iterator it = langText.begin() ; + it != langText.end() ; ++it) + printf("Text (%s): %s\n", it->first.c_str(), it->second.c_str()); + for (std::map::const_iterator it = langExtendedText.begin() ; + it != langExtendedText.end() ; ++it) + printf("Extended-Text (%s): %s\n", it->first.c_str(), it->second.c_str()); + + if(contentClassification.length()) { + printf("Content classification:"); + for(unsigned i=0; i::const_iterator it = langName.begin() ; + it != langName.end() ; ++it) + printf("Name (%s): %s\n", it->first.c_str(), it->second.c_str()); + for (std::map::const_iterator it = langText.begin() ; + it != langText.end() ; ++it) + printf("Text (%s): %s\n", it->first.c_str(), it->second.c_str()); + for (std::map::const_iterator it = langExtendedText.begin() ; + it != langExtendedText.end() ; ++it) + printf("Extended-Text (%s): %s\n", it->first.c_str(), it->second.c_str()); + + for_each(times.begin(), times.end(), printSItime()); + for_each(ratings.begin(), ratings.end(), printSIparentalRating()); + for_each(linkage_descs.begin(), linkage_descs.end(), printSIlinkage()); +} diff --git a/src/eitd/SIevents.hpp b/src/eitd/SIevents.hpp new file mode 100644 index 000000000..da7b75122 --- /dev/null +++ b/src/eitd/SIevents.hpp @@ -0,0 +1,409 @@ +// +// $Id: SIevents.hpp,v 1.29 2008/08/16 19:23:18 seife Exp $ +// +// classes SIevent and SIevents (dbox-II-project) +// +// Homepage: http://dbox2.elxsi.de +// +// Copyright (C) 2001 fnbrd (fnbrd@gmx.de) +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// +#ifndef SIEVENTS_HPP +#define SIEVENTS_HPP + +#include +#include +#include +#include +#include + +#include +#include "edvbstring.h" +#include + +class SIlinkage { +public: + unsigned char linkageType; + std::string name; + t_transport_stream_id transportStreamId; + t_original_network_id originalNetworkId; + t_service_id serviceId; + + SIlinkage(void) { + linkageType = 0; + transportStreamId = 0; + originalNetworkId = 0; + serviceId = 0; + } + + + void dump(void) const { + printf("Linakge Type: 0x%02hhx\n", linkageType); + if (name.length()) + printf("Name: %s\n", name.c_str()); + printf("Transport Stream Id: 0x%04hhx\n", transportStreamId); + printf("Original Network Id: 0x%04hhx\n", originalNetworkId); + printf("Service Id: 0x%04hhx\n", serviceId); + } + + int saveXML(FILE *file) const { + fprintf(file, "\t\t\t\n", transportStreamId, originalNetworkId, serviceId); +// %s, , name.c_str())<0) +// return 1; + return 0; + } + // Der Operator zum sortieren + bool operator < (const SIlinkage& l) const { + return name < l.name; + } + bool operator==(const SIlinkage& s) const { + return (linkageType == s.linkageType) && + (transportStreamId == s.transportStreamId) && + (originalNetworkId == s.originalNetworkId) && + (serviceId == s.serviceId) && + (name == s.name); + } + bool operator!=(const SIlinkage& s) const { + return (linkageType != s.linkageType) || + (transportStreamId != s.transportStreamId) || + (originalNetworkId != s.originalNetworkId) || + (serviceId != s.serviceId) || + (name != s.name); + } +}; +typedef std::vector SIlinkage_descs; + +// Fuer for_each +struct printSIlinkage : public std::unary_function +{ + void operator() (const SIlinkage &l) { l.dump();} +}; + +// Fuer for_each +struct saveSIlinkageXML : public std::unary_function +{ + FILE *f; + saveSIlinkageXML(FILE *fi) { f=fi;} + void operator() (const SIlinkage &l) { l.saveXML(f);} +}; + +class SIcomponent +{ + public: + std::string component; + unsigned char componentType; + unsigned char componentTag; + unsigned char streamContent; + + SIcomponent(void) { + streamContent=0; + componentType=0; + componentTag=0; + } + void dump(void) const { + if(component.length()) + printf("Component: %s\n", component.c_str()); + printf("Stream Content: 0x%02hhx\n", streamContent); + printf("Component type: 0x%02hhx\n", componentType); + printf("Component tag: 0x%02hhx\n", componentTag); + } + int saveXML(FILE *file) const { + fprintf(file, "\t\t\t\n"); + return 0; + } + // Der Operator zum sortieren + bool operator < (const SIcomponent& c) const { + return streamContent < c.streamContent; + } + bool operator==(const SIcomponent& c) const { + return (componentType == c.componentType) && + (componentTag == c.componentTag) && + (streamContent == c.streamContent) && + (component == c.component); + } + bool operator!=(const SIcomponent& c) const { + return (componentType != c.componentType) || + (componentTag != c.componentTag) || + (streamContent != c.streamContent) || + (component != c.component); + } +}; + +typedef std::multiset > SIcomponents; + +// Fuer for_each +struct printSIcomponent : public std::unary_function +{ + void operator() (const SIcomponent &c) { c.dump();} +}; + +// Fuer for_each +struct saveSIcomponentXML : public std::unary_function +{ + FILE *f; + saveSIcomponentXML(FILE *fi) { f=fi;} + void operator() (const SIcomponent &c) { c.saveXML(f);} +}; + +class SIparentalRating +{ + public: + std::string countryCode; + unsigned char rating; // Bei 1-16 -> Minumim Alter = rating +3 + + SIparentalRating(const std::string &cc, unsigned char rate) { + rating=rate; + countryCode=cc; + } + + // Der Operator zum sortieren + bool operator < (const SIparentalRating& c) const { + return countryCode < c.countryCode; + } + void dump(void) const { + printf("Rating: %s %hhu (+3)\n", countryCode.c_str(), rating); + } + int saveXML(FILE *file) const { + if(fprintf(file, "\t\t\t\n", countryCode.c_str(), rating)<0) + return 1; + return 0; + } + bool operator==(const SIparentalRating& p) const { + return (rating == p.rating) && + (countryCode == p.countryCode); + } + bool operator!=(const SIparentalRating& p) const { + return (rating != p.rating) || + (countryCode != p.countryCode); + } +}; +typedef std::set > SIparentalRatings; + +// Fuer for_each +struct printSIparentalRating : public std::unary_function +{ + void operator() (const SIparentalRating &r) { r.dump();} +}; + +// Fuer for_each +struct saveSIparentalRatingXML : public std::unary_function +{ + FILE *f; + saveSIparentalRatingXML(FILE *fi) { f=fi;} + void operator() (const SIparentalRating &r) { r.saveXML(f);} +}; + +class SItime { + public: + time_t startzeit; // lokale Zeit, 0 -> time shifted (cinedoms) + unsigned dauer; // in Sekunden, 0 -> time shifted (cinedoms) + + SItime(time_t s, unsigned d) { + startzeit=s; + dauer=d; // in Sekunden, 0 -> time shifted (cinedoms) + } + + // Der Operator zum sortieren + bool operator < (const SItime& t) const { + return startzeit < t.startzeit; + } + void dump(void) const { + printf("Startzeit: %s", ctime(&startzeit)); + printf("Dauer: %02u:%02u:%02u (%umin, %us)\n", dauer/3600, (dauer%3600)/60, dauer%60, dauer/60, dauer); + } + int saveXML(FILE *file) const { // saves the time + fprintf(file, "\t\t\t