1
0
mirror of https://github.com/rofafor/vdr-plugin-femon.git synced 2023-10-10 11:36:53 +00:00

Compare commits

..

16 Commits

Author SHA1 Message Date
Rolf Ahrenberg
6670f85a20 Cleaned up finnish translations (Thanks to Ville Skyttä). 2005-04-02 04:20:00 +03:00
Rolf Ahrenberg
9814970182 Default make target is now all.
Fixed the access rights of symbols subdirectory (Thanks to Harri Kukkonen).
Added a new theme: Moronimo (Thanks to Morone).
2005-04-01 04:20:00 +03:00
Rolf Ahrenberg
5bda0fa833 Horizontal offset setup option should be functional now. 2005-02-26 04:20:00 +02:00
Rolf Ahrenberg
ca954757db Updated for vdr-1.3.21.
Minor modification for DEBUG mode.
Added preliminary support for themes and some GUI tweaks.
Added horizontal offset setup option.
2005-02-24 04:20:00 +02:00
Rolf Ahrenberg
825755281f Added Estonian translations (Thanks to Arthur Konovalov). 2005-01-24 04:20:00 +02:00
Rolf Ahrenberg
ab3f270eed Updated for vdr-1.3.19. 2005-01-23 04:20:00 +02:00
Rolf Ahrenberg
995b2567e5 Some minor cosmetic fixes. 2005-01-23 04:20:00 +02:00
Rolf Ahrenberg
6f9961f499 Updated for vdr-1.3.18.
Added DEBUG mode (make DEBUG=1 plugins).
OSD height is now user configurable.
Added audio channel selection into Yellow key.
2005-01-15 04:20:00 +02:00
Rolf Ahrenberg
c454189adf Updated for vdr-1.3.17.
Fixed receiver related crash (Thanks to Marco Schluessler).
2004-11-28 04:20:00 +02:00
Rolf Ahrenberg
5339f71b33 Yet Another Minor Release.
Integrated the CA system names patch: "Setup / Show CA System".
2004-09-11 04:20:00 +03:00
Rolf Ahrenberg
8e53fa8521 Fixed OSDSTATUSWIN_XC define.
Added preliminary NTSC support (make NTSC_SYSTEM=1 plugins).
Fixed "Setup/OSD/Use Small Fonts" bug (Thanks to Winni for reporting this one).
Added patches directory: CA system names by Lauri Tischler.
2004-08-18 04:20:00 +03:00
Rolf Ahrenberg
9514ed5387 Added some new symbols and beautified the old ones.
Added audio track selection feature.
Added preliminary device switching feature (disabled at the moment).
2004-06-24 04:20:00 +03:00
Rolf Ahrenberg
a6039cdd66 Added "AC-3 Stream Information" display mode (Thanks to Lothar Englisch). 2004-06-11 04:20:00 +03:00
Rolf Ahrenberg
848a2ba78d Fixed the channel switch bug (reported by Stefan Lucke).
Nid/Tid/Rid are now included in translations.
Added video format and aspect ratio symbols into status window.
2004-06-06 04:20:00 +03:00
Rolf Ahrenberg
74ed4d8490 Added "Stream Information" display mode.
Toggle between different modes with 'OK' key:
 .-> basic -> transponder -> stream -.
 `-----------------------------------´
Added missing german translations (Thanks to Peter Marquardt).
2004-05-30 04:20:00 +03:00
Rolf Ahrenberg
8c7c110cf2 Updated for vdr-1.3.7 and removed compability with older versions. 2004-05-18 04:20:00 +03:00
37 changed files with 1826 additions and 688 deletions

45
HISTORY
View File

@@ -106,3 +106,48 @@ VDR Plugin 'femon' Revision History
- Yet Another Minor Release.
- Integrated the CA system names patch: "Setup / Show CA System".
2004-11-28: Version 0.1.7
- Updated for vdr-1.3.17.
- Fixed receiver related crash (Thanks to Marco Schluessler).
2005-01-15: Version 0.7.7
- Updated for vdr-1.3.18.
- Added DEBUG mode (make DEBUG=1 plugins).
- OSD height is now user configurable.
- Added audio channel selection into Yellow key.
2005-01-23: Version 0.7.9
- Some minor cosmetic fixes.
2005-01-23: Version 0.8.0
- Updated for vdr-1.3.19.
2005-01-24: Version 0.8.1
- Added Estonian translations (Thanks to Arthur Konovalov).
2005-02-24: Version 0.8.5
- Updated for vdr-1.3.21.
- Minor modification for DEBUG mode.
- Added preliminary support for themes and some GUI tweaks.
- Added horizontal offset setup option.
2005-02-26: Version 0.8.6
- Horizontal offset setup option should be functional now.
2005-04-01: Version 0.8.7
- Default make target is now all.
- Fixed the access rights of symbols subdirectory (Thanks to Harri Kukkonen).
- Added a new theme: Moronimo (Thanks to Morone).
2005-04-02: Version 0.8.8
- Cleaned up finnish translations (Thanks to Ville Skytt<74>).

View File

@@ -16,7 +16,7 @@ VERSION = $(shell grep 'static const char \*VERSION *=' $(PLUGIN).h | awk '{ pri
### The C++ compiler and options:
CXX ?= g++
CXXFLAGS ?= -O2 -Wall -Woverloaded-virtual
CXXFLAGS ?= -g -O2 -Wall -Woverloaded-virtual -fPIC
### The directory environment:
@@ -48,6 +48,13 @@ ifdef NTSC_SYSTEM
DEFINES += -DNTSC_SYSTEM
endif
ifdef DEBUG
DEFINES += -DDEBUG
endif
.PHONY: all all-redirect
all-redirect: all
### The object files (add further files here):
OBJS = femon.o femonosd.o femonreceiver.o femoncfg.o femoni18n.o

26
README
View File

@@ -21,16 +21,14 @@ transponder and stream information are also available in advanced display modes.
The plugin is based on a neat console frontend status monitor application
called 'femon' by Johannes Stezenbach (see DVB-apps/szap/femon.c for further
information). The other parts of plugin code are borrowed from the excellent
'OSD Picture-In-Picture' plugin by Sascha Volkenandt and Andreas Regel. The
bitrate calculation algorithm originates from the 'dvbstream' application by
Dave Chapman and the stream information routines from the 'libdvb' library by
Metzler Brothers.
information). The bitrate calculation trick originates from the 'dvbstream'
application by Dave Chapman and the stream information routines are taken from
the 'libdvb' library by Metzler Brothers.
Terminology:
--------------------------------------------------------------
|## Channel Name ######################### [DD][AR][VF][A][D]|
|## Channel Name ########################## [AR][VF][A/DD][D]|
|[=====Signal Strength in % ==============|=================]|
|[=====Signal-to-Noise Ratio in % ========|=================]|
| STR: #0000 (0%) BER: #00000000 Video: 0 Mbit/s |
@@ -51,10 +49,9 @@ CARRIER - Found a DVB signal
VITERBI - FEC (forward error correction) is stable
SYNC - Found sync bytes
DD - AC-3 stream (optional)
AR - Aspect Ratio: 1:1/4:3/16:9/2.21:1 (optional)
VF - Video format: PAL/NTSC (optional)
A - Audio track: 1..2 (optional)
A/DD - Audio (0..5) / AC-3 track (optional)
D - Device number: 0..3 (optional)
Controls:
@@ -63,9 +60,10 @@ ChanUp/ChanDn - Switch channel up/down
Up/Down - Switch channel up/down
0-9 - Select channel
Ok - Switch between display modes: basic, transponder, stream, AC-3
Right/Left - Switch to next/previous device that provides the current channel
Green - Select language (APID)
Green - Select next audio track
Yellow - Select audio channel: stereo, mono left, mono right
Back - Exit plugin
(Left/Right - Switch to next/previous device that provides the current channel)
Installation:
@@ -82,14 +80,14 @@ Notes:
- The plugin supports only those DVB cards with _one_ frontend (do any cards
with multiple frontends even exist?), because I haven't yet figured howto do
it without patching the VDR core.
- Sometimes (read always) ttxtsubs plugin messes up the OSD - user should disable
ttxtsubs, but closing and reopening the femon plugin might help temporarily as
well. Btw., this same thing happens with OSDTeletext plugin too :)
- Disable the stream analyze to speed up heavy zapping sessions.
- The signal strength and signal-to-noise ratio values are comparable only
between the same brand/model frontends. Due to the lack of proper frontend
specifications those values cannot be calculated into any real units.
- Shrinked OSD is available for NTSC users: make NTSC_SYSTEM=1
- If the OSD isn't visible, you've configured the OSD height too big or too
small. Please, try to adjust the variable on the setup page before writing
any bug reports.
- There's a shrinked default OSD height for NTSC users: make NTSC_SYSTEM=1
- The device switching feature is still non-functional.
"Femon - A real womon who lives according to her natural feminine inclinations."

52
femon.c
View File

@@ -12,7 +12,7 @@
#include "femonosd.h"
#include "femon.h"
#if VDRVERSNUM && VDRVERSNUM >= 10307
#if VDRVERSNUM && VDRVERSNUM < 10321
#error "You don't exist! Go away!"
#endif
@@ -53,6 +53,11 @@ bool cPluginFemon::Start(void)
return true;
}
void cPluginFemon::Stop(void)
{
// Stop the background activities.
}
void cPluginFemon::Housekeeping(void)
{
// Perform any cleanup or other regular tasks.
@@ -71,6 +76,9 @@ bool cPluginFemon::SetupParse(const char *Name, const char *Value)
else if (!strcasecmp(Name, "SyslogOutput")) femonConfig.syslogoutput = atoi(Value);
else if (!strcasecmp(Name, "DisplayMode")) femonConfig.displaymode = atoi(Value);
else if (!strcasecmp(Name, "Position")) femonConfig.position = atoi(Value);
else if (!strcasecmp(Name, "OSDHeight")) femonConfig.osdheight = atoi(Value);
else if (!strcasecmp(Name, "OSDOffset")) femonConfig.osdoffset = atoi(Value);
else if (!strcasecmp(Name, "Theme")) femonConfig.theme = atoi(Value);
else if (!strcasecmp(Name, "ShowCASystem")) femonConfig.showcasystem = atoi(Value);
else if (!strcasecmp(Name, "RedLimit")) femonConfig.redlimit = atoi(Value);
else if (!strcasecmp(Name, "GreenLimit")) femonConfig.greenlimit = atoi(Value);
@@ -79,17 +87,23 @@ bool cPluginFemon::SetupParse(const char *Name, const char *Value)
else if (!strcasecmp(Name, "CalcInterval")) femonConfig.calcinterval = atoi(Value);
else
return false;
if (femonConfig.displaymode < 0 || femonConfig.displaymode >= modeMaxNumber) femonConfig.displaymode = 0;
if (femonConfig.displaymode < 0 || femonConfig.displaymode >= eFemonModeMaxNumber) femonConfig.displaymode = 0;
return true;
}
cMenuFemonSetup::cMenuFemonSetup(void)
{
dispmodes[modeBasic] = tr("basic");
dispmodes[modeTransponder] = tr("transponder");
dispmodes[modeStream] = tr("stream");
dispmodes[modeAC3] = tr("AC-3");
dispmodes[eFemonModeBasic] = tr("basic");
dispmodes[eFemonModeTransponder] = tr("transponder");
dispmodes[eFemonModeStream] = tr("stream");
dispmodes[eFemonModeAC3] = tr("AC-3");
themes[eFemonThemeClassic] = tr("Classic");
themes[eFemonThemeElchi] = tr("Elchi");
themes[eFemonThemeDeepBlue] = tr("DeepBlue");
themes[eFemonThemeMoronimo] = tr("Moronimo");
Setup();
}
@@ -98,17 +112,20 @@ void cMenuFemonSetup::Setup(void)
int current = Current();
Clear();
Add(new cMenuEditBoolItem( tr("Hide Mainmenu Entry"), &femonConfig.hidemenu, tr("no"), tr("yes")));
Add(new cMenuEditBoolItem( tr("Use Syslog Output"), &femonConfig.syslogoutput, tr("no"), tr("yes")));
Add(new cMenuEditStraItem( tr("Default Display Mode"), &femonConfig.displaymode, modeMaxNumber, dispmodes));
Add(new cMenuEditBoolItem( tr("Position"), &femonConfig.position, tr("bottom"), tr("top")));
Add(new cMenuEditBoolItem( tr("Show CA System"), &femonConfig.showcasystem, tr("no"), tr("yes")));
Add(new cMenuEditIntItem( tr("Red Limit [%]"), &femonConfig.redlimit, 1, 50));
Add(new cMenuEditIntItem( tr("Green Limit [%]"), &femonConfig.greenlimit, 51, 100));
Add(new cMenuEditIntItem( tr("OSD Update Interval [0.1s]"), &femonConfig.updateinterval, 1, 100));
Add(new cMenuEditBoolItem( tr("Analyze Stream"), &femonConfig.analyzestream, tr("no"), tr("yes")));
Add(new cMenuEditBoolItem( tr("Hide main menu entry"), &femonConfig.hidemenu, tr("no"), tr("yes")));
Add(new cMenuEditBoolItem( tr("Use syslog output"), &femonConfig.syslogoutput, tr("no"), tr("yes")));
Add(new cMenuEditStraItem( tr("Default display mode"), &femonConfig.displaymode, eFemonModeMaxNumber, dispmodes));
Add(new cMenuEditStraItem( tr("Theme"), &femonConfig.theme, eFemonThemeMaxNumber,themes));
Add(new cMenuEditBoolItem( tr("Position"), &femonConfig.position, tr("bottom"), tr("top")));
Add(new cMenuEditIntItem( tr("Height"), &femonConfig.osdheight, 400, 500));
Add(new cMenuEditIntItem( tr("Horizontal offset"), &femonConfig.osdoffset, -50, 50));
Add(new cMenuEditBoolItem( tr("Show CA system"), &femonConfig.showcasystem, tr("no"), tr("yes")));
Add(new cMenuEditIntItem( tr("Red limit [%]"), &femonConfig.redlimit, 1, 50));
Add(new cMenuEditIntItem( tr("Green limit [%]"), &femonConfig.greenlimit, 51, 100));
Add(new cMenuEditIntItem( tr("OSD update interval [0.1s]"), &femonConfig.updateinterval, 1, 100));
Add(new cMenuEditBoolItem( tr("Analyze stream"), &femonConfig.analyzestream, tr("no"), tr("yes")));
if (femonConfig.analyzestream)
Add(new cMenuEditIntItem(tr("Calculation Interval [0.1s]"), &femonConfig.calcinterval, 1, 100));
Add(new cMenuEditIntItem(tr("Calculation interval [0.1s]"), &femonConfig.calcinterval, 1, 100));
SetCurrent(Get(current));
Display();
@@ -119,7 +136,10 @@ void cMenuFemonSetup::Store(void)
SetupStore("HideMenu", femonConfig.hidemenu);
SetupStore("SyslogOutput", femonConfig.syslogoutput);
SetupStore("DisplayMode", femonConfig.displaymode);
SetupStore("Theme", femonConfig.theme);
SetupStore("Position", femonConfig.position);
SetupStore("OSDHeight", femonConfig.osdheight);
SetupStore("OSDOffset", femonConfig.osdoffset);
SetupStore("ShowCASystem", femonConfig.showcasystem);
SetupStore("RedLimit", femonConfig.redlimit);
SetupStore("GreenLimit", femonConfig.greenlimit);

View File

@@ -11,7 +11,7 @@
#include <vdr/plugin.h>
static const char *VERSION = "0.0.7";
static const char *VERSION = "0.8.8";
static const char *DESCRIPTION = "DVB Signal Information Monitor (OSD)";
static const char *MAINMENUENTRY = "Signal Information";
@@ -27,6 +27,7 @@ public:
virtual bool ProcessArgs(int argc, char *argv[]);
virtual bool Initialize(void);
virtual bool Start(void);
virtual void Stop(void);
virtual void Housekeeping(void);
virtual const char *MainMenuEntry(void) { return (femonConfig.hidemenu ? NULL : tr(MAINMENUENTRY)); }
virtual cOsdObject *MainMenuAction(void);
@@ -36,7 +37,8 @@ public:
class cMenuFemonSetup : public cMenuSetupPage {
private:
const char *dispmodes[modeMaxNumber];
const char *dispmodes[eFemonModeMaxNumber];
const char *themes[eFemonThemeMaxNumber];
virtual void Setup(void);
protected:
virtual eOSState ProcessKey(eKeys Key);

View File

@@ -14,6 +14,7 @@ cFemonConfig::cFemonConfig(void)
{
hidemenu = 0;
displaymode = 0;
theme = 0;
position = 1;
redlimit = 33;
greenlimit = 66;
@@ -22,4 +23,59 @@ cFemonConfig::cFemonConfig(void)
calcinterval = 20;
syslogoutput = 0;
showcasystem = 0;
#ifdef NTSC_SYSTEM
osdheight = 420;
#else
osdheight = 480;
#endif
osdoffset = 0;
}
const cFemonTheme femonTheme[eFemonThemeMaxNumber] =
{
{
// eFemonThemeClassic
0x7F000000, // clrBackground
0xFFFCFCFC, // clrTitleBackground
0xFF000000, // clrTitleText
0xFFFCC024, // clrActiveText
0xFFFCFCFC, // clrInactiveText
0xFFFC1414, // clrRed
0xFFFCC024, // clrYellow
0xFF24FC24, // clrGreen
},
{
// eFemonThemeElchi
0xC8000066, // clrBackground
0xC833AAEE, // clrTitleBackground
0xFF000000, // clrTitleText
0xFFCCBB22, // clrActiveText
0xFFFFFFFF, // clrInactiveText
0xFFFF0000, // clrRed
0xFFFFEE00, // clrYellow
0xFF33CC33, // clrGreen
},
{
// eFemonThemeDeepBlue
0xC80C0C0C, // clrBackground
0xC832557A, // clrTitleBackground
0xFF000000, // clrTitleText
0xFFCE7B00, // clrActiveText
0xFF9A9A9A, // clrInactiveText
0xFF992900, // clrRed
0xFFCE7B00, // clrYellow
0xFF336600, // clrGreen
},
{
// eFemonThemeMoronimo
0xDF294A6B, // clrBackground
0xDF3E5578, // clrTitleBackground
0xFF9BBAD7, // clrTitleText
0xFFCE7B00, // clrActiveText
0xFF9A9A9A, // clrInactiveText
0xFF992900, // clrRed
0xFFCE7B00, // clrYellow
0xFF336600, // clrGreen
},
};

View File

@@ -9,13 +9,20 @@
#ifndef __FEMONCFG_H
#define __FEMONCFG_H
enum dispModes {
modeBasic,
modeTransponder,
modeStream,
modeAC3,
modeMaxNumber
};
#ifdef DEBUG
#define Dprintf(x...) printf(x);
#else
#define Dprintf(x...) ;
#endif
enum eFemonModes
{
eFemonModeBasic,
eFemonModeTransponder,
eFemonModeStream,
eFemonModeAC3,
eFemonModeMaxNumber
};
struct cFemonConfig
{
@@ -23,6 +30,7 @@ public:
cFemonConfig(void);
int hidemenu;
int displaymode;
int theme;
int position;
int redlimit;
int greenlimit;
@@ -31,8 +39,33 @@ public:
int calcinterval;
int syslogoutput;
int showcasystem;
int osdheight;
int osdoffset;
};
extern cFemonConfig femonConfig;
enum eFemonThemes
{
eFemonThemeClassic,
eFemonThemeElchi,
eFemonThemeDeepBlue,
eFemonThemeMoronimo,
eFemonThemeMaxNumber
};
struct cFemonTheme
{
int clrBackground;
int clrTitleBackground;
int clrTitleText;
int clrActiveText;
int clrInactiveText;
int clrRed;
int clrYellow;
int clrGreen;
};
extern const cFemonTheme femonTheme[eFemonThemeMaxNumber];
#endif // __FEMONCFG_H

File diff suppressed because it is too large Load Diff

View File

@@ -9,7 +9,6 @@
#ifndef __FEMONI18N_H
#define __FEMONI18N_H
#include <vdr/config.h> // for VDRVERSNUM
#include <vdr/i18n.h>
extern const tI18nPhrase Phrases[];

File diff suppressed because it is too large Load Diff

View File

@@ -16,34 +16,38 @@
#include <vdr/thread.h>
#include <vdr/status.h>
#include <vdr/channels.h>
#include <vdr/font.h>
#include <vdr/transfer.h>
#include <vdr/tools.h>
class cFemonOsd : public cOsdObject, public cThread, public cStatus {
private:
bool m_Active;
cOsdBase *m_Osd;
tWindowHandle m_InfoWindow;
tWindowHandle m_StatusWindow;
cOsd *m_Osd;
cFemonReceiver *m_Receiver;
int m_Frontend;
struct dvb_frontend_info m_FrontendInfo;
int m_Number;
int m_OldNumber;
int m_InputTime;
uint16_t m_SNR;
uint16_t m_Signal;
uint32_t m_BER;
uint32_t m_UNC;
fe_status_t m_FrontendStatus;
int m_DisplayMode;
eDvbFont m_Font;
const cFont *m_Font;
cTimeMs m_InputTime;
cMutex* m_Mutex;
static cBitmap bmStereo, bmMonoLeft, bmMonoRight, bmDD, bmDD20, bmDD51;
static cBitmap bmZero, bmDevice, bmPAL, bmNTSC, bmOne, bmTwo, bmThree, bmFour, bmFive;
static cBitmap bmAspectRatio_1_1, bmAspectRatio_16_9, bmAspectRatio_2_21_1, bmAspectRatio_4_3;
static cBitmap bmLock, bmSignal, bmCarrier, bmViterbi, bmSync;
void DrawStatusWindow(void);
void DrawInfoWindow(void);
protected:
virtual void Action(void);
virtual void ChannelSwitch(const cDevice * device, int channelNumber);
virtual void SetAudioTrack(int Index, const char * const *Tracks);
public:
cFemonOsd(void);

View File

@@ -7,6 +7,7 @@
*/
#include <unistd.h>
#include <vdr/tools.h>
#include "femoncfg.h"
#include "femonreceiver.h"
@@ -16,18 +17,14 @@
#define PAYLOAD 0x10
#define PTS_DTS_FLAGS 0xC0
cFemonReceiver::cFemonReceiver(int Ca, int Vpid, int Apid, int Dpid)
#if VDRVERSNUM >= 10300
:cReceiver(Ca, -1, 3, Vpid, Apid, Dpid), cThread("femon receiver")
#else
:cReceiver(Ca, -1, 3, Vpid, Apid, Dpid)
#endif
cFemonReceiver::cFemonReceiver(int Ca, int Vpid, int Apid[], int Dpid[])
:cReceiver(Ca, -1, Vpid, Apid, Dpid, NULL), cThread("femon receiver")
{
//printf("cFemonReceiver::cFemonReceiver()\n");
Dprintf("%s()\n", __PRETTY_FUNCTION__);
m_Active = false;
m_VideoPid = Vpid;
m_AudioPid = Apid;
m_AC3Pid = Dpid;
m_AudioPid = Apid[0];
m_AC3Pid = Dpid[0];
m_VideoValid = false;
m_VideoPacketCount = 0;
m_VideoHorizontalSize = 0;
@@ -61,17 +58,17 @@ cFemonReceiver::cFemonReceiver(int Ca, int Vpid, int Apid, int Dpid)
cFemonReceiver::~cFemonReceiver(void)
{
//printf("cFemonReceiver::~cFemonReceiver()\n");
Dprintf("%s()\n", __PRETTY_FUNCTION__);
Detach();
if (m_Active) {
m_Active = false;
Cancel(0);
Cancel();
}
}
/* The following function originates from libdvbmpeg: */
void cFemonReceiver::GetVideoInfo(uint8_t *mbuf, int count)
{
//printf("cFemonReceiver::GetVideoInfo()\n");
uint8_t *headr;
int found = 0;
int c = 0;
@@ -164,7 +161,6 @@ static unsigned int samplerates[4] =
/* The following function originates from libdvbmpeg: */
void cFemonReceiver::GetAudioInfo(uint8_t *mbuf, int count)
{
//printf("cFemonReceiver::GetAudioInfo()\n");
uint8_t *headr;
int found = 0;
int c = 0;
@@ -256,13 +252,19 @@ void cFemonReceiver::GetAC3Info(uint8_t *mbuf, int count)
void cFemonReceiver::Activate(bool On)
{
//printf("cFemonReceiver::Activate()\n");
Start();
Dprintf("%s(%d)\n", __PRETTY_FUNCTION__, On);
if (On) {
if (!m_Active)
Start();
}
else if (m_Active) {
m_Active = false;
Cancel();
}
}
void cFemonReceiver::Receive(uchar *Data, int Length)
{
//printf("cFemonReceiver::Receive()\n");
// TS packet length: TS_SIZE
if (Length == TS_SIZE) {
int pid = ((Data[1] & 0x1f) << 8) | (Data[2]);
@@ -305,12 +307,11 @@ void cFemonReceiver::Receive(uchar *Data, int Length)
void cFemonReceiver::Action(void)
{
//printf("cFemonReceiver::Action()\n");
#if (VDRVERSNUM < 10300)
isyslog("femon receiver: thread started (pid = %d)", getpid());
#endif
Dprintf("%s()\n", __PRETTY_FUNCTION__);
cTimeMs t;
m_Active = true;
while (m_Active) {
t.Set(0);
// TS packet 188 bytes - 4 byte header; MPEG standard defines 1Mbit = 1000000bit
m_VideoBitrate = (8.0 * 184.0 * m_VideoPacketCount) / (femonConfig.calcinterval * 100000.0);
m_VideoPacketCount = 0;
@@ -318,9 +319,6 @@ void cFemonReceiver::Action(void)
m_AudioPacketCount = 0;
m_AC3Bitrate = (8.0 * 184.0 * m_AC3PacketCount) / (femonConfig.calcinterval * 100.0);
m_AC3PacketCount = 0;
usleep(100000L * femonConfig.calcinterval);
cCondWait::SleepMs(100 * femonConfig.calcinterval - t.Elapsed());
}
#if (VDRVERSNUM < 10300)
isyslog("femon receiver: thread stopped (pid = %d)", getpid());
#endif
}

View File

@@ -95,7 +95,7 @@ protected:
virtual void Action(void);
public:
cFemonReceiver(int Ca, int Vpid, int Apid, int Dpid);
cFemonReceiver(int Ca, int Vpid, int Apid[], int Dpid[]);
virtual ~cFemonReceiver();
bool VideoValid(void) { return m_VideoValid; }; // boolean

23
symbols/ar11.xpm Normal file
View File

@@ -0,0 +1,23 @@
/* XPM */
static char * ar11_xpm[] = {
"26 18 2 1",
". c #FFFFFF",
"+ c #000000",
"++++++++++++++++++++++++++",
"+........................+",
"+......++..........++....+",
"+...+++++.......+++++....+",
"+...+++++.......+++++....+",
"+......++...++.....++....+",
"+......++...++.....++....+",
"+......++..........++....+",
"+......++..........++....+",
"+......++..........++....+",
"+......++..........++....+",
"+......++..........++....+",
"+......++..........++....+",
"+......++..........++....+",
"+......++...++.....++....+",
"+......++...++.....++....+",
"+........................+",
"++++++++++++++++++++++++++"};

23
symbols/ar169.xpm Normal file
View File

@@ -0,0 +1,23 @@
/* XPM */
static char * ar169_xpm[] = {
"38 18 2 1",
". c #FFFFFF",
"+ c #000000",
"++++++++++++++++++++++++++++++++++++++",
"+....................................+",
"+......++.....++++..........++++.....+",
"+...+++++....+++++++.......++++++....+",
"+...+++++....++...++......++...+++...+",
"+......++...++........++..++....++...+",
"+......++...++........++..++....++...+",
"+......++...++............++....++...+",
"+......++...++.+++.........+++++++...+",
"+......++...+++++++.........+++.++...+",
"+......++...++....++............++...+",
"+......++...++....++............++...+",
"+......++...++....++............++...+",
"+......++...+++...++......++...++....+",
"+......++....++++++...++..+++++++....+",
"+......++.....++++....++...+++++.....+",
"+....................................+",
"++++++++++++++++++++++++++++++++++++++"};

23
symbols/ar2211.xpm Normal file
View File

@@ -0,0 +1,23 @@
/* XPM */
static char * ar2211_xpm[] = {
"52 18 2 1",
". c #FFFFFF",
"+ c #000000",
"++++++++++++++++++++++++++++++++++++++++++++++++++++",
"+..................................................+",
"+.....++++..........++++........++...........++....+",
"+...+++++++.......+++++++....+++++........+++++....+",
"+...++....++......++....++...+++++........+++++....+",
"+.........++............++......++...++......++....+",
"+.........++............++......++...++......++....+",
"+........+++...........+++......++...........++....+",
"+.......+++...........+++.......++...........++....+",
"+......+++...........+++........++...........++....+",
"+.....+++...........+++.........++...........++....+",
"+....+++...........+++..........++...........++....+",
"+...+++...........+++...........++...........++....+",
"+...++............++............++...........++....+",
"+...++++++++..++..++++++++......++...++......++....+",
"+...++++++++..++..++++++++......++...++......++....+",
"+..................................................+",
"++++++++++++++++++++++++++++++++++++++++++++++++++++"};

23
symbols/ar43.xpm Normal file
View File

@@ -0,0 +1,23 @@
/* XPM */
static char * ar43_xpm[] = {
"31 18 2 1",
". c #FFFFFF",
"+ c #000000",
"+++++++++++++++++++++++++++++++",
"+.............................+",
"+.........++.........+++++....+",
"+........+++........+++++++...+",
"+.......++++.......++....++...+",
"+......++.++...++..++....++...+",
"+.....++..++...++........++...+",
"+.....++..++............++....+",
"+....++...++..........+++.....+",
"+...++....++..........++++....+",
"+...+++++++++...........+++...+",
"+...+++++++++............++...+",
"+.........++.......++....++...+",
"+.........++.......++...+++...+",
"+.........++...++...++++++....+",
"+.........++...++....++++.....+",
"+.............................+",
"+++++++++++++++++++++++++++++++"};

24
symbols/carrier.xpm Normal file
View File

@@ -0,0 +1,24 @@
/* XPM */
static char * carrier_xpm[] = {
"96 19 2 1",
". c #FFFFFF",
"+ c #000000",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"++............................................................................................++",
"++............................................................................................++",
"++...........+++++.......+++++.....++++++++....++++++++....+++...++++++++...++++++++..........++",
"++..........+++++++......+++++.....+++++++++...+++++++++...+++...++++++++...+++++++++.........++",
"++..........+++.++++.....+++++.....+++...+++...+++...+++...+++...+++........+++...+++.........++",
"++.........+++...++.....+++.+++....+++...+++...+++...+++...+++...+++........+++...+++.........++",
"++.........+++..........+++.+++....++++++++....++++++++....+++...+++++++....++++++++..........++",
"++.........+++..........+++.+++....+++++++.....+++++++.....+++...+++++++....+++++++...........++",
"++.........+++.........+++...+++...+++..+++....+++..+++....+++...+++........+++..+++..........++",
"++.........+++...++....+++++++++...+++..+++....+++..+++....+++...+++........+++..+++..........++",
"++..........+++.++++...+++++++++...+++...+++...+++...+++...+++...+++........+++...+++.........++",
"++..........+++++++...+++.....+++..+++...+++...+++...+++...+++...++++++++...+++...+++.........++",
"++...........+++++....+++.....+++..+++....+++..+++....+++..+++...++++++++...+++....+++........++",
"++............................................................................................++",
"++............................................................................................++",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"};

23
symbols/device.xpm Normal file
View File

@@ -0,0 +1,23 @@
/* XPM */
static char * device_xpm[] = {
"14 18 2 1",
". c #FFFFFF",
"+ c #000000",
"++++++++++++++",
"+.............",
"+.......+..+..",
"+.......+..+..",
"+.......+..+..",
"+....+++++++++",
"+....+++++++++",
"+......+..+...",
"+......+..+...",
"+......+..+...",
"+......+..+...",
"+...+++++++++.",
"+...+++++++++.",
"+.....+..+....",
"+.....+..+....",
"+.....+..+....",
"+.............",
"++++++++++++++"};

23
symbols/dolbydigital.xpm Normal file
View File

@@ -0,0 +1,23 @@
/* XPM */
static char * dolbydigital_xpm[] = {
"31 18 2 1",
". c #FFFFFF",
"+ c #000000",
"+++++++++++++++++++++++++++++++",
"+.............................+",
"+...+++++++++++.+++++++++++...+",
"+...++.++++++++.++++++++.++...+",
"+...++...++++++.++++++...++...+",
"+...++.....++++.++++.....++...+",
"+...++......+++.+++......++...+",
"+...++.......++.++.......++...+",
"+...++.......++.++.......++...+",
"+...++.......++.++.......++...+",
"+...++.......++.++.......++...+",
"+...++......+++.+++......++...+",
"+...++.....++++.++++.....++...+",
"+...++...++++++.++++++...++...+",
"+...++.++++++++.++++++++.++...+",
"+...+++++++++++.+++++++++++...+",
"+.............................+",
"+++++++++++++++++++++++++++++++"};

View File

@@ -0,0 +1,23 @@
/* XPM */
static char * dolbydigital20_xpm[] = {
"55 18 2 1",
". c #FFFFFF",
"+ c #000000",
"+++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"+.....................................................+",
"+...+++++++++++.+++++++++++.....++++.........++++.....+",
"+...++.++++++++.++++++++.++...+++++++.......++++++....+",
"+...++...++++++.++++++...++...++....++......++..++....+",
"+...++.....++++.++++.....++.........++.....++....++...+",
"+...++......+++.+++......++.........++.....++....++...+",
"+...++.......++.++.......++........+++.....++....++...+",
"+...++.......++.++.......++.......+++......++....++...+",
"+...++.......++.++.......++......+++.......++....++...+",
"+...++.......++.++.......++.....+++........++....++...+",
"+...++......+++.+++......++....+++.........++....++...+",
"+...++.....++++.++++.....++...+++..........++....++...+",
"+...++...++++++.++++++...++...++............++..++....+",
"+...++.++++++++.++++++++.++...++++++++..++..++++++....+",
"+...+++++++++++.+++++++++++...++++++++..++...++++.....+",
"+.....................................................+",
"+++++++++++++++++++++++++++++++++++++++++++++++++++++++"};

View File

@@ -0,0 +1,23 @@
/* XPM */
static char * dolbydigital51_xpm[] = {
"51 18 2 1",
". c #FFFFFF",
"+ c #000000",
"+++++++++++++++++++++++++++++++++++++++++++++++++++",
"+.................................................+",
"+...+++++++++++.+++++++++++...+++++++........++...+",
"+...++.++++++++.++++++++.++...+++++++.....+++++...+",
"+...++...++++++.++++++...++...++..........+++++...+",
"+...++.....++++.++++.....++...++.............++...+",
"+...++......+++.+++......++...++++++.........++...+",
"+...++.......++.++.......++...+++++++........++...+",
"+...++.......++.++.......++...++...+++.......++...+",
"+...++.......++.++.......++.........++.......++...+",
"+...++.......++.++.......++.........++.......++...+",
"+...++......+++.+++......++.........++.......++...+",
"+...++.....++++.++++.....++...++....++.......++...+",
"+...++...++++++.++++++...++...++...+++.......++...+",
"+...++.++++++++.++++++++.++...+++++++...++...++...+",
"+...+++++++++++.+++++++++++....+++++....++...++...+",
"+.................................................+",
"+++++++++++++++++++++++++++++++++++++++++++++++++++"};

23
symbols/five.xpm Normal file
View File

@@ -0,0 +1,23 @@
/* XPM */
static char * five_xpm[] = {
"15 18 2 1",
". c #FFFFFF",
"+ c #000000",
"+++++++++++++++",
"..............+",
"...+++++++....+",
"...+++++++....+",
"...++.........+",
"...++.........+",
"...++.........+",
"...++++++.....+",
"...+++++++....+",
"...++...+++...+",
".........++...+",
".........++...+",
"...++....++...+",
"...++...+++...+",
"...+++++++....+",
"....+++++.....+",
"..............+",
"+++++++++++++++"};

23
symbols/four.xpm Normal file
View File

@@ -0,0 +1,23 @@
/* XPM */
static char * four_xpm[] = {
"15 18 2 1",
". c #FFFFFF",
"+ c #000000",
"+++++++++++++++",
"..............+",
".........++...+",
"........+++...+",
".......++++...+",
"......++.++...+",
".....++..++...+",
".....++..++...+",
"....++...++...+",
"...++....++...+",
"...+++++++++..+",
"...+++++++++..+",
".........++...+",
".........++...+",
".........++...+",
".........++...+",
"..............+",
"+++++++++++++++"};

24
symbols/lock.xpm Normal file
View File

@@ -0,0 +1,24 @@
/* XPM */
static char * lock_xpm[] = {
"96 19 2 1",
". c #FFFFFF",
"+ c #000000",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"++............................................................................................++",
"++............................................................................................++",
"++........................+++........+++++........+++++.....+++....+++........................++",
"++........................+++.......++++++++.....+++++++....+++...+++.........................++",
"++........................+++.......+++..+++.....+++.++++...+++..+++..........................++",
"++........................+++......+++....+++...+++...++....+++.+++...........................++",
"++........................+++......+++....+++...+++.........+++++++...........................++",
"++........................+++......+++....+++...+++.........++++.+++..........................++",
"++........................+++......+++....+++...+++.........+++..+++..........................++",
"++........................+++......+++....+++...+++...++....+++...+++.........................++",
"++........................+++.......+++..+++.....+++.++++...+++...+++.........................++",
"++........................+++++++...++++++++.....+++++++....+++....+++........................++",
"++........................+++++++.....++++........+++++.....+++.....+++.......................++",
"++............................................................................................++",
"++............................................................................................++",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"};

23
symbols/monoleft.xpm Normal file
View File

@@ -0,0 +1,23 @@
/* XPM */
static char * monoleft_xpm[] = {
"17 18 2 1",
". c #FFFFFF",
"+ c #000000",
"+++++++++++++++++",
"+................",
"+...++...........",
"+...++++.........",
"+...++++++.......",
"+...++++++++.....",
"+...+++++++++++++",
"+...+++++++++++++",
"+...+++++++++..++",
"+...+++++++++..++",
"+...+++++++++++++",
"+...+++++++++++++",
"+...++++++++.....",
"+...++++++.......",
"+...++++.........",
"+...+++..........",
"+................",
"+++++++++++++++++"};

23
symbols/monoright.xpm Normal file
View File

@@ -0,0 +1,23 @@
/* XPM */
static char * monoright_xpm[] = {
"17 18 2 1",
". c #FFFFFF",
"+ c #000000",
"+++++++++++++++++",
"+................",
"+..............++",
"+............++++",
"+..........++++++",
"+........++++++++",
"+...+++++++++++++",
"+...+++++++++++++",
"+...++..+++++++++",
"+...++..+++++++++",
"+...+++++++++++++",
"+...+++++++++++++",
"+........++++++++",
"+..........++++++",
"+............++++",
"+.............+++",
"+................",
"+++++++++++++++++"};

23
symbols/ntsc.xpm Normal file
View File

@@ -0,0 +1,23 @@
/* XPM */
static char * ntsc_xpm[] = {
"19 18 2 1",
". c #FFFFFF",
"+ c #000000",
"+++++++++++++++++++",
"+.................+",
"+...++.......++...+",
"+...+++......++...+",
"+...++++.....++...+",
"+...++++.....++...+",
"+...++.++....++...+",
"+...++..++...++...+",
"+...++..++...++...+",
"+...++...++..++...+",
"+...++...++..++...+",
"+...++....++.++...+",
"+...++.....++++...+",
"+...++.....++++...+",
"+...++......+++...+",
"+...++.......++...+",
"+.................+",
"+++++++++++++++++++"};

23
symbols/one.xpm Normal file
View File

@@ -0,0 +1,23 @@
/* XPM */
static char * one_xpm[] = {
"15 18 2 1",
". c #FFFFFF",
"+ c #000000",
"+++++++++++++++",
"..............+",
".......++.....+",
"....+++++.....+",
"....+++++.....+",
".......++.....+",
".......++.....+",
".......++.....+",
".......++.....+",
".......++.....+",
".......++.....+",
".......++.....+",
".......++.....+",
".......++.....+",
".......++.....+",
".......++.....+",
"..............+",
"+++++++++++++++"};

23
symbols/pal.xpm Normal file
View File

@@ -0,0 +1,23 @@
/* XPM */
static char * pal_xpm[] = {
"18 18 2 1",
". c #FFFFFF",
"+ c #000000",
"++++++++++++++++++",
"+................+",
"+...++++++++.....+",
"+...+++++++++....+",
"+...++.....+++...+",
"+...++......++...+",
"+...++......++...+",
"+...++.....+++...+",
"+...+++++++++....+",
"+...++++++++.....+",
"+...++...........+",
"+...++...........+",
"+...++...........+",
"+...++...........+",
"+...++...........+",
"+...++...........+",
"+................+",
"++++++++++++++++++"};

24
symbols/signal.xpm Normal file
View File

@@ -0,0 +1,24 @@
/* XPM */
static char * signal_xpm[] = {
"96 19 2 1",
". c #FFFFFF",
"+ c #000000",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"++............................................................................................++",
"++............................................................................................++",
"++.................+++++....+++......+++++.....+++....+++.....+++++.....+++...................++",
"++...............++++++++...+++....++++++++....++++...+++.....+++++.....+++...................++",
"++...............+++..+++...+++....+++..++++...+++++..+++.....+++++.....+++...................++",
"++...............+++........+++...+++....++....+++++..+++....+++.+++....+++...................++",
"++...............++++++.....+++...+++..........++++++.+++....+++.+++....+++...................++",
"++................++++++....+++...+++..+++++...+++.++.+++....+++.+++....+++...................++",
"++..................+++++...+++...+++..+++++...+++.++++++...+++...+++...+++...................++",
"++...............+++..+++...+++...+++....+++...+++..+++++...+++++++++...+++...................++",
"++...............+++..+++...+++....+++...+++...+++..+++++...+++++++++...+++...................++",
"++................++++++....+++....+++++++++...+++...++++..+++.....+++..+++++++...............++",
"++.................++++.....+++......+++++.....+++....+++..+++.....+++..+++++++...............++",
"++............................................................................................++",
"++............................................................................................++",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"};

23
symbols/stereo.xpm Normal file
View File

@@ -0,0 +1,23 @@
/* XPM */
static char * stereo_xpm[] = {
"17 18 2 1",
". c #FFFFFF",
"+ c #000000",
"+++++++++++++++++",
"+................",
"+..............++",
"+............++++",
"+..........+++.++",
"+........+++...++",
"+...+++++++....++",
"+...++++++.....++",
"+...++..++.....++",
"+...++..++.....++",
"+...++++++.....++",
"+...+++++++....++",
"+........+++...++",
"+..........+++.++",
"+............++++",
"+.............+++",
"+................",
"+++++++++++++++++"};

24
symbols/sync.xpm Normal file
View File

@@ -0,0 +1,24 @@
/* XPM */
static char * sync_xpm[] = {
"96 19 2 1",
". c #FFFFFF",
"+ c #000000",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"++............................................................................................++",
"++............................................................................................++",
"++.........................+++++...+++.....+++..+++....+++.....+++++..........................++",
"++.......................++++++++...+++...+++...++++...+++....+++++++.........................++",
"++.......................+++..+++....+++.+++....+++++..+++....+++.++++........................++",
"++.......................+++.........+++.+++....+++++..+++...+++...++.........................++",
"++.......................++++++.......+++++.....++++++.+++...+++..............................++",
"++........................++++++......+++++.....+++.++.+++...+++..............................++",
"++..........................+++++......+++......+++.++++++...+++..............................++",
"++.......................+++..+++......+++......+++..+++++...+++...++.........................++",
"++.......................+++..+++......+++......+++..+++++....+++.++++........................++",
"++........................++++++.......+++......+++...++++....+++++++.........................++",
"++.........................++++........+++......+++....+++.....+++++..........................++",
"++............................................................................................++",
"++............................................................................................++",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"};

23
symbols/three.xpm Normal file
View File

@@ -0,0 +1,23 @@
/* XPM */
static char * three_xpm[] = {
"15 18 2 1",
". c #FFFFFF",
"+ c #000000",
"+++++++++++++++",
"..............+",
".....+++++....+",
"....+++++++...+",
"...++....++...+",
"...++....++...+",
".........++...+",
"........++....+",
"......+++.....+",
"......++++....+",
"........+++...+",
".........++...+",
"...++....++...+",
"...++...+++...+",
"....++++++....+",
".....++++.....+",
"..............+",
"+++++++++++++++"};

23
symbols/two.xpm Normal file
View File

@@ -0,0 +1,23 @@
/* XPM */
static char * two_xpm[] = {
"15 18 2 1",
". c #FFFFFF",
"+ c #000000",
"+++++++++++++++",
"..............+",
".....++++.....+",
"...+++++++....+",
"...++....++...+",
".........++...+",
".........++...+",
"........+++...+",
".......+++....+",
"......+++.....+",
".....+++......+",
"....+++.......+",
"...+++........+",
"...++.........+",
"...++++++++...+",
"...++++++++...+",
"..............+",
"+++++++++++++++"};

24
symbols/viterbi.xpm Normal file
View File

@@ -0,0 +1,24 @@
/* XPM */
static char * viterbi_xpm[] = {
"96 19 2 1",
". c #FFFFFF",
"+ c #000000",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"++............................................................................................++",
"++............................................................................................++",
"++............+++.....+++..+++...+++++++++..++++++++...++++++++....++++++++....+++............++",
"++.............++.....++...+++...+++++++++..++++++++...+++++++++...+++++++++...+++............++",
"++.............+++...+++...+++......+++.....+++........+++...+++...+++...+++...+++............++",
"++.............+++...+++...+++......+++.....+++........+++...+++...+++...+++...+++............++",
"++..............++...++....+++......+++.....+++++++....++++++++....++++++++....+++............++",
"++..............+++.+++....+++......+++.....+++++++....+++++++.....++++++++....+++............++",
"++..............+++.+++....+++......+++.....+++........+++..+++....+++...+++...+++............++",
"++...............++.++.....+++......+++.....+++........+++..+++....+++...+++...+++............++",
"++...............+++++.....+++......+++.....+++........+++...+++...+++...+++...+++............++",
"++...............+++++.....+++......+++.....++++++++...+++...+++...+++++++++...+++............++",
"++................+++......+++......+++.....++++++++...+++....+++..++++++++....+++............++",
"++............................................................................................++",
"++............................................................................................++",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++",
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"};

23
symbols/zero.xpm Normal file
View File

@@ -0,0 +1,23 @@
/* XPM */
static char * zero_xpm[] = {
"15 18 2 1",
". c #FFFFFF",
"+ c #000000",
"+++++++++++++++",
"..............+",
".....++++.....+",
"....++++++....+",
"....++..++....+",
"...++....++...+",
"...++....++...+",
"...++....++...+",
"...++....++...+",
"...++....++...+",
"...++....++...+",
"...++....++...+",
"...++....++...+",
"....++..++....+",
"....++++++....+",
".....++++.....+",
"..............+",
"+++++++++++++++"};