mirror of
				https://github.com/rofafor/vdr-plugin-femon.git
				synced 2023-10-10 11:36:53 +00:00 
			
		
		
		
	Compare commits
	
		
			2 Commits
		
	
	
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					5819441c03 | ||
| 
						 | 
					b0b0fe4f02 | 
							
								
								
									
										18
									
								
								COPYING
									
									
									
									
									
								
							
							
						
						
									
										18
									
								
								COPYING
									
									
									
									
									
								
							@@ -2,7 +2,7 @@
 | 
				
			|||||||
		       Version 2, June 1991
 | 
							       Version 2, June 1991
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
 | 
					 Copyright (C) 1989, 1991 Free Software Foundation, Inc.
 | 
				
			||||||
                       59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
					 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 | 
				
			||||||
 Everyone is permitted to copy and distribute verbatim copies
 | 
					 Everyone is permitted to copy and distribute verbatim copies
 | 
				
			||||||
 of this license document, but changing it is not allowed.
 | 
					 of this license document, but changing it is not allowed.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -15,7 +15,7 @@ software--to make sure the software is free for all its users.  This
 | 
				
			|||||||
General Public License applies to most of the Free Software
 | 
					General Public License applies to most of the Free Software
 | 
				
			||||||
Foundation's software and to any other program whose authors commit to
 | 
					Foundation's software and to any other program whose authors commit to
 | 
				
			||||||
using it.  (Some other Free Software Foundation software is covered by
 | 
					using it.  (Some other Free Software Foundation software is covered by
 | 
				
			||||||
the GNU Library General Public License instead.)  You can apply it to
 | 
					the GNU Lesser General Public License instead.)  You can apply it to
 | 
				
			||||||
your programs, too.
 | 
					your programs, too.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  When we speak of free software, we are referring to freedom, not
 | 
					  When we speak of free software, we are referring to freedom, not
 | 
				
			||||||
@@ -55,7 +55,7 @@ patent must be licensed for everyone's free use or not licensed at all.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
  The precise terms and conditions for copying, distribution and
 | 
					  The precise terms and conditions for copying, distribution and
 | 
				
			||||||
modification follow.
 | 
					modification follow.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		    GNU GENERAL PUBLIC LICENSE
 | 
							    GNU GENERAL PUBLIC LICENSE
 | 
				
			||||||
   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 | 
					   TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -110,7 +110,7 @@ above, provided that you also meet all of these conditions:
 | 
				
			|||||||
    License.  (Exception: if the Program itself is interactive but
 | 
					    License.  (Exception: if the Program itself is interactive but
 | 
				
			||||||
    does not normally print such an announcement, your work based on
 | 
					    does not normally print such an announcement, your work based on
 | 
				
			||||||
    the Program is not required to print an announcement.)
 | 
					    the Program is not required to print an announcement.)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
These requirements apply to the modified work as a whole.  If
 | 
					These requirements apply to the modified work as a whole.  If
 | 
				
			||||||
identifiable sections of that work are not derived from the Program,
 | 
					identifiable sections of that work are not derived from the Program,
 | 
				
			||||||
and can be reasonably considered independent and separate works in
 | 
					and can be reasonably considered independent and separate works in
 | 
				
			||||||
@@ -168,7 +168,7 @@ access to copy from a designated place, then offering equivalent
 | 
				
			|||||||
access to copy the source code from the same place counts as
 | 
					access to copy the source code from the same place counts as
 | 
				
			||||||
distribution of the source code, even though third parties are not
 | 
					distribution of the source code, even though third parties are not
 | 
				
			||||||
compelled to copy the source along with the object code.
 | 
					compelled to copy the source along with the object code.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  4. You may not copy, modify, sublicense, or distribute the Program
 | 
					  4. You may not copy, modify, sublicense, or distribute the Program
 | 
				
			||||||
except as expressly provided under this License.  Any attempt
 | 
					except as expressly provided under this License.  Any attempt
 | 
				
			||||||
otherwise to copy, modify, sublicense or distribute the Program is
 | 
					otherwise to copy, modify, sublicense or distribute the Program is
 | 
				
			||||||
@@ -225,7 +225,7 @@ impose that choice.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
This section is intended to make thoroughly clear what is believed to
 | 
					This section is intended to make thoroughly clear what is believed to
 | 
				
			||||||
be a consequence of the rest of this License.
 | 
					be a consequence of the rest of this License.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  8. If the distribution and/or use of the Program is restricted in
 | 
					  8. If the distribution and/or use of the Program is restricted in
 | 
				
			||||||
certain countries either by patents or by copyrighted interfaces, the
 | 
					certain countries either by patents or by copyrighted interfaces, the
 | 
				
			||||||
original copyright holder who places the Program under this License
 | 
					original copyright holder who places the Program under this License
 | 
				
			||||||
@@ -278,7 +278,7 @@ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
 | 
				
			|||||||
POSSIBILITY OF SUCH DAMAGES.
 | 
					POSSIBILITY OF SUCH DAMAGES.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		     END OF TERMS AND CONDITIONS
 | 
							     END OF TERMS AND CONDITIONS
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	    How to Apply These Terms to Your New Programs
 | 
						    How to Apply These Terms to Your New Programs
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  If you develop a new program, and you want it to be of the greatest
 | 
					  If you develop a new program, and you want it to be of the greatest
 | 
				
			||||||
@@ -305,7 +305,7 @@ the "copyright" line and a pointer to where the full notice is found.
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
    You should have received a copy of the GNU General Public License
 | 
					    You should have received a copy of the GNU General Public License
 | 
				
			||||||
    along with this program; if not, write to the Free Software
 | 
					    along with this program; if not, write to the Free Software
 | 
				
			||||||
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 | 
					    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Also add information on how to contact you by electronic and paper mail.
 | 
					Also add information on how to contact you by electronic and paper mail.
 | 
				
			||||||
@@ -336,5 +336,5 @@ necessary.  Here is a sample; alter the names:
 | 
				
			|||||||
This General Public License does not permit incorporating your program into
 | 
					This General Public License does not permit incorporating your program into
 | 
				
			||||||
proprietary programs.  If your program is a subroutine library, you may
 | 
					proprietary programs.  If your program is a subroutine library, you may
 | 
				
			||||||
consider it more useful to permit linking proprietary applications with the
 | 
					consider it more useful to permit linking proprietary applications with the
 | 
				
			||||||
library.  If this is what you want to do, use the GNU Library General
 | 
					library.  If this is what you want to do, use the GNU Lesser General
 | 
				
			||||||
Public License instead of this License.
 | 
					Public License instead of this License.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										28
									
								
								HISTORY
									
									
									
									
									
								
							
							
						
						
									
										28
									
								
								HISTORY
									
									
									
									
									
								
							@@ -252,3 +252,31 @@ VDR Plugin 'femon' Revision History
 | 
				
			|||||||
2007-05-15: Version 1.1.3
 | 
					2007-05-15: Version 1.1.3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
- Fixed a race condition in cFemonReceiver (Thanks to Reinhard Nissl).
 | 
					- Fixed a race condition in cFemonReceiver (Thanks to Reinhard Nissl).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2007-10-14: Version 1.1.4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Backported from 1.2.2.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2008-01-20: Version 1.1.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Updated Italian translation (Thanks to Gringo).
 | 
				
			||||||
 | 
					- Added '-Wno-parentheses' to the compiler options.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2007-08-14: Version 1.2.0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Updated for vdr-1.5.7.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2007-08-19: Version 1.2.1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Updated for vdr-1.5.8.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2007-10-14: Version 1.2.2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Added Spids support.
 | 
				
			||||||
 | 
					- Minor OSD layout changes.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					2008-01-20: Version 1.2.3
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					- Updated Italian translation (Thanks to Gringo).
 | 
				
			||||||
 | 
					- Added '-Wno-parentheses' to the compiler options.
 | 
				
			||||||
 | 
					- Mapped 'kInfo' as help key in setup menu.
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										16
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								Makefile
									
									
									
									
									
								
							@@ -15,17 +15,19 @@ STRIP = strip
 | 
				
			|||||||
# The official name of this plugin.
 | 
					# The official name of this plugin.
 | 
				
			||||||
# This name will be used in the '-P...' option of VDR to load the plugin.
 | 
					# This name will be used in the '-P...' option of VDR to load the plugin.
 | 
				
			||||||
# By default the main source file also carries this name.
 | 
					# By default the main source file also carries this name.
 | 
				
			||||||
 | 
					# IMPORTANT: the presence of this macro is important for the Make.config
 | 
				
			||||||
 | 
					# file. So it must be defined, even if it is not used here!
 | 
				
			||||||
#
 | 
					#
 | 
				
			||||||
PLUGIN = femon
 | 
					PLUGIN = femon
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### The version number of this plugin (taken from the main source file):
 | 
					### The version number of this plugin (taken from the main source file):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VERSION = $(shell grep 'static const char VERSION\[\] *=' $(PLUGIN).h | awk '{ print $$6 }' | sed -e 's/[";]//g')
 | 
					VERSION = $(shell grep 'static const char VERSION\[\] *=' $(PLUGIN).c | awk '{ print $$6 }' | sed -e 's/[";]//g')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### The C++ compiler and options:
 | 
					### The C++ compiler and options:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
CXX      ?= g++
 | 
					CXX      ?= g++
 | 
				
			||||||
CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual
 | 
					CXXFLAGS ?= -fPIC -g -O2 -Wall -Woverloaded-virtual -Wno-parentheses
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### The directory environment:
 | 
					### The directory environment:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -67,14 +69,18 @@ all-redirect: all
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
OBJS = femon.o femonosd.o femonreceiver.o femoncfg.o femoni18n.o femontools.o
 | 
					OBJS = femon.o femonosd.o femonreceiver.o femoncfg.o femoni18n.o femontools.o
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					### The main target:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					all: libvdr-$(PLUGIN).so
 | 
				
			||||||
 | 
					
 | 
				
			||||||
### Implicit rules:
 | 
					### Implicit rules:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
%.o: %.c
 | 
					%.o: %.c
 | 
				
			||||||
	$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) $<
 | 
						$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) $<
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# Dependencies:
 | 
					### Dependencies:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
MAKEDEP = g++ -MM -MG
 | 
					MAKEDEP = $(CXX) -MM -MG
 | 
				
			||||||
DEPFILE = .dependencies
 | 
					DEPFILE = .dependencies
 | 
				
			||||||
$(DEPFILE): Makefile
 | 
					$(DEPFILE): Makefile
 | 
				
			||||||
	@$(MAKEDEP) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
 | 
						@$(MAKEDEP) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
 | 
				
			||||||
@@ -83,8 +89,6 @@ $(DEPFILE): Makefile
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
### Targets:
 | 
					### Targets:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
all: libvdr-$(PLUGIN).so
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
libvdr-$(PLUGIN).so: $(OBJS)
 | 
					libvdr-$(PLUGIN).so: $(OBJS)
 | 
				
			||||||
	$(CXX) $(CXXFLAGS) -shared $(OBJS) -o $@
 | 
						$(CXX) $(CXXFLAGS) -shared $(OBJS) -o $@
 | 
				
			||||||
ifndef FEMON_DEBUG
 | 
					ifndef FEMON_DEBUG
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										7
									
								
								README
									
									
									
									
									
								
							
							
						
						
									
										7
									
								
								README
									
									
									
									
									
								
							@@ -1,11 +1,16 @@
 | 
				
			|||||||
This is a DVB Frontend Status Monitor plugin for the Video Disk Recorder (VDR).
 | 
					This is a DVB Frontend Status Monitor plugin for the Video Disk Recorder (VDR).
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Written by:                  R o l f . A h r e n b e r g @ s c i . f i
 | 
					Written by:                  Rolf Ahrenberg
 | 
				
			||||||
 | 
					                             < R o l f . A h r e n b e r g @ s c i . f i >
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Project's homepage:          http://www.saunalahti.fi/~rahrenbe/vdr/femon/
 | 
					Project's homepage:          http://www.saunalahti.fi/~rahrenbe/vdr/femon/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Latest version available at: http://www.saunalahti.fi/~rahrenbe/vdr/femon/
 | 
					Latest version available at: http://www.saunalahti.fi/~rahrenbe/vdr/femon/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					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.
 | 
				
			||||||
See the file COPYING for license information.
 | 
					See the file COPYING for license information.
 | 
				
			||||||
 | 
					
 | 
				
			||||||
Requirements:
 | 
					Requirements:
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										42
									
								
								femon.c
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								femon.c
									
									
									
									
									
								
							@@ -14,12 +14,38 @@
 | 
				
			|||||||
#include "femonosd.h"
 | 
					#include "femonosd.h"
 | 
				
			||||||
#include "femonservice.h"
 | 
					#include "femonservice.h"
 | 
				
			||||||
#include "femontools.h"
 | 
					#include "femontools.h"
 | 
				
			||||||
#include "femon.h"
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
#if defined(APIVERSNUM) && APIVERSNUM < 10400
 | 
					#if defined(APIVERSNUM) && APIVERSNUM < 10400
 | 
				
			||||||
#error "VDR-1.4.0 API version or greater is required!"
 | 
					#error "VDR-1.4.0 API version or greater is required!"
 | 
				
			||||||
#endif
 | 
					#endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static const char VERSION[]       = "1.1.5";
 | 
				
			||||||
 | 
					static const char DESCRIPTION[]   = "DVB Signal Information Monitor (OSD)";
 | 
				
			||||||
 | 
					static const char MAINMENUENTRY[] = "Signal Information";
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class cPluginFemon : public cPlugin {
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					  cPluginFemon(void);
 | 
				
			||||||
 | 
					  virtual ~cPluginFemon();
 | 
				
			||||||
 | 
					  virtual const char *Version(void) { return VERSION; }
 | 
				
			||||||
 | 
					  virtual const char *Description(void) { return tr(DESCRIPTION); }
 | 
				
			||||||
 | 
					  virtual const char *CommandLineHelp(void);
 | 
				
			||||||
 | 
					  virtual bool ProcessArgs(int argc, char *argv[]);
 | 
				
			||||||
 | 
					  virtual bool Initialize(void);
 | 
				
			||||||
 | 
					  virtual bool Start(void);
 | 
				
			||||||
 | 
					  virtual void Stop(void);
 | 
				
			||||||
 | 
					  virtual void Housekeeping(void);
 | 
				
			||||||
 | 
					  virtual void MainThreadHook(void) {}
 | 
				
			||||||
 | 
					  virtual cString Active(void) { return NULL; }
 | 
				
			||||||
 | 
					  virtual const char *MainMenuEntry(void) { return (femonConfig.hidemenu ? NULL : tr(MAINMENUENTRY)); }
 | 
				
			||||||
 | 
					  virtual cOsdObject *MainMenuAction(void);
 | 
				
			||||||
 | 
					  virtual cMenuSetupPage *SetupMenu(void);
 | 
				
			||||||
 | 
					  virtual bool SetupParse(const char *Name, const char *Value);
 | 
				
			||||||
 | 
					  virtual bool Service(const char *Id, void *Data);
 | 
				
			||||||
 | 
					  virtual const char **SVDRPHelpPages(void);
 | 
				
			||||||
 | 
					  virtual cString SVDRPCommand(const char *Command, const char *Option, int &ReplyCode);
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cPluginFemon::cPluginFemon()
 | 
					cPluginFemon::cPluginFemon()
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  // Initialize any member variables here.
 | 
					  // Initialize any member variables here.
 | 
				
			||||||
@@ -234,6 +260,20 @@ cString cPluginFemon::SVDRPCommand(const char *Command, const char *Option, int
 | 
				
			|||||||
  return NULL;
 | 
					  return NULL;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class cMenuFemonSetup : public cMenuSetupPage {
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
					  const char *dispmodes[eFemonModeMaxNumber];
 | 
				
			||||||
 | 
					  const char *skins[eFemonSkinMaxNumber];
 | 
				
			||||||
 | 
					  const char *themes[eFemonThemeMaxNumber];
 | 
				
			||||||
 | 
					  cFemonConfig data;
 | 
				
			||||||
 | 
					  virtual void Setup(void);
 | 
				
			||||||
 | 
					protected:
 | 
				
			||||||
 | 
					  virtual eOSState ProcessKey(eKeys Key);
 | 
				
			||||||
 | 
					  virtual void Store(void);
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
					  cMenuFemonSetup(void);
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cMenuFemonSetup::cMenuFemonSetup(void)
 | 
					cMenuFemonSetup::cMenuFemonSetup(void)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  Dprintf("%s()\n", __PRETTY_FUNCTION__);
 | 
					  Dprintf("%s()\n", __PRETTY_FUNCTION__);
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										56
									
								
								femon.h
									
									
									
									
									
								
							
							
						
						
									
										56
									
								
								femon.h
									
									
									
									
									
								
							@@ -1,56 +0,0 @@
 | 
				
			|||||||
/*
 | 
					 | 
				
			||||||
 * Frontend Status Monitor plugin for the Video Disk Recorder
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * See the README file for copyright information and how to reach the author.
 | 
					 | 
				
			||||||
 *
 | 
					 | 
				
			||||||
 * $Id$
 | 
					 | 
				
			||||||
 */
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#ifndef __FEMON_H
 | 
					 | 
				
			||||||
#define __FEMON_H
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#include <vdr/plugin.h>
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
static const char VERSION[]       = "1.1.3";
 | 
					 | 
				
			||||||
static const char DESCRIPTION[]   = "DVB Signal Information Monitor (OSD)";
 | 
					 | 
				
			||||||
static const char MAINMENUENTRY[] = "Signal Information";
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class cPluginFemon : public cPlugin {
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
  cPluginFemon(void);
 | 
					 | 
				
			||||||
  virtual ~cPluginFemon();
 | 
					 | 
				
			||||||
  virtual const char *Version(void) { return VERSION; }
 | 
					 | 
				
			||||||
  virtual const char *Description(void) { return tr(DESCRIPTION); }
 | 
					 | 
				
			||||||
  virtual const char *CommandLineHelp(void);
 | 
					 | 
				
			||||||
  virtual bool ProcessArgs(int argc, char *argv[]);
 | 
					 | 
				
			||||||
  virtual bool Initialize(void);
 | 
					 | 
				
			||||||
  virtual bool Start(void);
 | 
					 | 
				
			||||||
  virtual void Stop(void);
 | 
					 | 
				
			||||||
  virtual void Housekeeping(void);
 | 
					 | 
				
			||||||
  virtual void MainThreadHook(void) {}
 | 
					 | 
				
			||||||
  virtual cString Active(void) { return NULL; }
 | 
					 | 
				
			||||||
  virtual const char *MainMenuEntry(void) { return (femonConfig.hidemenu ? NULL : tr(MAINMENUENTRY)); }
 | 
					 | 
				
			||||||
  virtual cOsdObject *MainMenuAction(void);
 | 
					 | 
				
			||||||
  virtual cMenuSetupPage *SetupMenu(void);
 | 
					 | 
				
			||||||
  virtual bool SetupParse(const char *Name, const char *Value);
 | 
					 | 
				
			||||||
  virtual bool Service(const char *Id, void *Data);
 | 
					 | 
				
			||||||
  virtual const char **SVDRPHelpPages(void);
 | 
					 | 
				
			||||||
  virtual cString SVDRPCommand(const char *Command, const char *Option, int &ReplyCode);
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
class cMenuFemonSetup : public cMenuSetupPage {
 | 
					 | 
				
			||||||
private:
 | 
					 | 
				
			||||||
  const char *dispmodes[eFemonModeMaxNumber];
 | 
					 | 
				
			||||||
  const char *skins[eFemonSkinMaxNumber];
 | 
					 | 
				
			||||||
  const char *themes[eFemonThemeMaxNumber];
 | 
					 | 
				
			||||||
  cFemonConfig data;
 | 
					 | 
				
			||||||
  virtual void Setup(void);
 | 
					 | 
				
			||||||
protected:
 | 
					 | 
				
			||||||
  virtual eOSState ProcessKey(eKeys Key);
 | 
					 | 
				
			||||||
  virtual void Store(void);
 | 
					 | 
				
			||||||
public:
 | 
					 | 
				
			||||||
  cMenuFemonSetup(void);
 | 
					 | 
				
			||||||
  };
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
#endif //__FEMON_H
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
							
								
								
									
										152
									
								
								femoni18n.c
									
									
									
									
									
								
							
							
						
						
									
										152
									
								
								femoni18n.c
									
									
									
									
									
								
							@@ -12,7 +12,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "DVB Signal Information Monitor (OSD)", // English
 | 
					  { "DVB Signal Information Monitor (OSD)", // English
 | 
				
			||||||
    "DVB Signal Informationsanzeige (OSD)", // Deutsch
 | 
					    "DVB Signal Informationsanzeige (OSD)", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "Visualizza le informazioni sul segnale DVB", // Italiano
 | 
					    "Visualizza informazioni segnale DVB", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Affiche les informations du signal DVB", // Fran<61>ais
 | 
					    "Affiche les informations du signal DVB", // Fran<61>ais
 | 
				
			||||||
@@ -34,7 +34,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Signal Information", // English
 | 
					  { "Signal Information", // English
 | 
				
			||||||
    "Signalinformationen", // Deutsch
 | 
					    "Signalinformationen", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "Informazioni sul segnale", // Italiano
 | 
					    "Informazioni segnale", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Signal DVB", // Fran<61>ais
 | 
					    "Signal DVB", // Fran<61>ais
 | 
				
			||||||
@@ -100,7 +100,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Horizontal offset", // English
 | 
					  { "Horizontal offset", // English
 | 
				
			||||||
    "Horizontaler Offset", // Deutsch
 | 
					    "Horizontaler Offset", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Limite orizzontale", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "D<EFBFBD>placement horizontal", // Fran<61>ais
 | 
					    "D<EFBFBD>placement horizontal", // Fran<61>ais
 | 
				
			||||||
@@ -122,7 +122,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Default display mode", // English
 | 
					  { "Default display mode", // English
 | 
				
			||||||
    "Standard Anzeigemodus", // Deutsch
 | 
					    "Standard Anzeigemodus", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "Modo di visualizzazione standard", // Italiano
 | 
					    "Modalit<EFBFBD> visualizz. standard", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Affichage par d<>faut", // Fran<61>ais
 | 
					    "Affichage par d<>faut", // Fran<61>ais
 | 
				
			||||||
@@ -144,7 +144,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "basic", // English
 | 
					  { "basic", // English
 | 
				
			||||||
    "Standard", // Deutsch
 | 
					    "Standard", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "base", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "basique", // Fran<61>ais
 | 
					    "basique", // Fran<61>ais
 | 
				
			||||||
@@ -166,7 +166,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "transponder", // English
 | 
					  { "transponder", // English
 | 
				
			||||||
    "Transponder", // Deutsch
 | 
					    "Transponder", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "transponder", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "transpondeur", // Fran<61>ais
 | 
					    "transpondeur", // Fran<61>ais
 | 
				
			||||||
@@ -188,7 +188,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "stream", // English
 | 
					  { "stream", // English
 | 
				
			||||||
    "Stream", // Deutsch
 | 
					    "Stream", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "flusso", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "flux", // Fran<61>ais
 | 
					    "flux", // Fran<61>ais
 | 
				
			||||||
@@ -210,7 +210,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Skin", // English
 | 
					  { "Skin", // English
 | 
				
			||||||
    "Oberfl<EFBFBD>che", // Deutsch
 | 
					    "Oberfl<EFBFBD>che", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Interfaccia", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Skin", // Fran<61>ais
 | 
					    "Skin", // Fran<61>ais
 | 
				
			||||||
@@ -232,7 +232,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Theme", // English
 | 
					  { "Theme", // English
 | 
				
			||||||
    "Thema", // Deutsch
 | 
					    "Thema", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Tema", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Th<EFBFBD>me", // Fran<61>ais
 | 
					    "Th<EFBFBD>me", // Fran<61>ais
 | 
				
			||||||
@@ -254,7 +254,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Classic", // English
 | 
					  { "Classic", // English
 | 
				
			||||||
    "Klassischer", // Deutsch
 | 
					    "Klassischer", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Classico", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Classique", // Fran<61>ais
 | 
					    "Classique", // Fran<61>ais
 | 
				
			||||||
@@ -430,7 +430,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Hide main menu entry", // English
 | 
					  { "Hide main menu entry", // English
 | 
				
			||||||
    "Hauptmen<EFBFBD>eintrag verstecken", // Deutsch
 | 
					    "Hauptmen<EFBFBD>eintrag verstecken", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "Nascondi voce men<EFBFBD>", // Italiano
 | 
					    "Nascondi voce menu principale", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Masquer dans le menu principal", // Fran<61>ais
 | 
					    "Masquer dans le menu principal", // Fran<61>ais
 | 
				
			||||||
@@ -452,7 +452,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "OSD update interval [0.1s]", // English
 | 
					  { "OSD update interval [0.1s]", // English
 | 
				
			||||||
    "OSD Updateintervall [0.1s]", // Deutsch
 | 
					    "OSD Updateintervall [0.1s]", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "Intervallo di aggiornamento [0.1s]", // Italiano
 | 
					    "Intervallo aggiornamento OSD [0.1s]", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Intervalle de mise <20> jour (0,1s)", // Fran<61>ais
 | 
					    "Intervalle de mise <20> jour (0,1s)", // Fran<61>ais
 | 
				
			||||||
@@ -474,7 +474,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Analyze stream", // English
 | 
					  { "Analyze stream", // English
 | 
				
			||||||
    "Stream analysieren", // Deutsch
 | 
					    "Stream analysieren", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Analizza flusso", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Analyser le flux", // Fran<61>ais
 | 
					    "Analyser le flux", // Fran<61>ais
 | 
				
			||||||
@@ -496,7 +496,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Calculation interval [0.1s]", // English
 | 
					  { "Calculation interval [0.1s]", // English
 | 
				
			||||||
    "Berechnungsintervall [0.1s]", // Deutsch
 | 
					    "Berechnungsintervall [0.1s]", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "Intervallo di calcolo [0.1s]", // Italiano
 | 
					    "Intervallo calcolo [0.1s]", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Intervalle de calcul (0,1s)", // Fran<61>ais
 | 
					    "Intervalle de calcul (0,1s)", // Fran<61>ais
 | 
				
			||||||
@@ -540,7 +540,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Green limit [%]", // English
 | 
					  { "Green limit [%]", // English
 | 
				
			||||||
    "Grenze Gr<47>n [%]", // Deutsch
 | 
					    "Grenze Gr<47>n [%]", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "Limite de verde [%]", // Italiano
 | 
					    "Limite verde [%]", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Limite du vert (%)", // Fran<61>ais
 | 
					    "Limite du vert (%)", // Fran<61>ais
 | 
				
			||||||
@@ -716,7 +716,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "None", // English
 | 
					  { "None", // English
 | 
				
			||||||
    "Nichts", // Deutsch
 | 
					    "Nichts", // Deutsch
 | 
				
			||||||
    "None", // Slovenski
 | 
					    "None", // Slovenski
 | 
				
			||||||
    "None", // Italiano
 | 
					    "Nessuno", // Italiano
 | 
				
			||||||
    "None", // Nederlands
 | 
					    "None", // Nederlands
 | 
				
			||||||
    "None", // Portugu<67>s
 | 
					    "None", // Portugu<67>s
 | 
				
			||||||
    "Aucun", // Fran<61>ais
 | 
					    "Aucun", // Fran<61>ais
 | 
				
			||||||
@@ -738,7 +738,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Off", // English
 | 
					  { "Off", // English
 | 
				
			||||||
    "Aus", // Deutsch
 | 
					    "Aus", // Deutsch
 | 
				
			||||||
    "Off", // Slovenski
 | 
					    "Off", // Slovenski
 | 
				
			||||||
    "Off", // Italiano
 | 
					    "Disattivo", // Italiano
 | 
				
			||||||
    "Off", // Nederlands
 | 
					    "Off", // Nederlands
 | 
				
			||||||
    "Off", // Portugu<67>s
 | 
					    "Off", // Portugu<67>s
 | 
				
			||||||
    "Non", // Fran<61>ais
 | 
					    "Non", // Fran<61>ais
 | 
				
			||||||
@@ -760,7 +760,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "On", // English
 | 
					  { "On", // English
 | 
				
			||||||
    "Ein", // Deutsch
 | 
					    "Ein", // Deutsch
 | 
				
			||||||
    "On", // Slovenski
 | 
					    "On", // Slovenski
 | 
				
			||||||
    "On", // Italiano
 | 
					    "Attivo", // Italiano
 | 
				
			||||||
    "On", // Nederlands
 | 
					    "On", // Nederlands
 | 
				
			||||||
    "On", // Portugu<67>s
 | 
					    "On", // Portugu<67>s
 | 
				
			||||||
    "Oui", // Fran<61>ais
 | 
					    "Oui", // Fran<61>ais
 | 
				
			||||||
@@ -848,7 +848,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Stream Information", // English
 | 
					  { "Stream Information", // English
 | 
				
			||||||
    "Streaminformation", // Deutsch
 | 
					    "Streaminformation", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Informazione flusso", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Information flux", // Fran<61>ais
 | 
					    "Information flux", // Fran<61>ais
 | 
				
			||||||
@@ -870,7 +870,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "MPEG Layer", // English
 | 
					  { "MPEG Layer", // English
 | 
				
			||||||
    "MPEG Layer", // Deutsch
 | 
					    "MPEG Layer", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Formato MPEG", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "MPEG Layer", // Fran<61>ais
 | 
					    "MPEG Layer", // Fran<61>ais
 | 
				
			||||||
@@ -892,7 +892,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Video Stream", // English
 | 
					  { "Video Stream", // English
 | 
				
			||||||
    "Video Stream", // Deutsch
 | 
					    "Video Stream", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Flusso video", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Flux vid<69>o", // Fran<61>ais
 | 
					    "Flux vid<69>o", // Fran<61>ais
 | 
				
			||||||
@@ -914,7 +914,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Bitrate", // English
 | 
					  { "Bitrate", // English
 | 
				
			||||||
    "Bitrate", // Deutsch
 | 
					    "Bitrate", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Bitrate", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Bitrate", // Fran<61>ais
 | 
					    "Bitrate", // Fran<61>ais
 | 
				
			||||||
@@ -936,7 +936,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Frame Rate", // English
 | 
					  { "Frame Rate", // English
 | 
				
			||||||
    "Bildrate", // Deutsch
 | 
					    "Bildrate", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Frame rate", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Rafra<EFBFBD>chissement", // Fran<61>ais
 | 
					    "Rafra<EFBFBD>chissement", // Fran<61>ais
 | 
				
			||||||
@@ -980,7 +980,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Aspect Ratio", // English
 | 
					  { "Aspect Ratio", // English
 | 
				
			||||||
    "Seitenverh<EFBFBD>ltnis", // Deutsch
 | 
					    "Seitenverh<EFBFBD>ltnis", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Dimensione immagine", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Proportions d'image", // Fran<61>ais
 | 
					    "Proportions d'image", // Fran<61>ais
 | 
				
			||||||
@@ -1002,7 +1002,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "reserved", // English
 | 
					  { "reserved", // English
 | 
				
			||||||
    "belegt", // Deutsch
 | 
					    "belegt", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "riservato", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "r<EFBFBD>serv<EFBFBD>", // Fran<61>ais
 | 
					    "r<EFBFBD>serv<EFBFBD>", // Fran<61>ais
 | 
				
			||||||
@@ -1024,7 +1024,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "free", // English
 | 
					  { "free", // English
 | 
				
			||||||
    "frei", // Deutsch
 | 
					    "frei", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "libero", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "libre", // Fran<61>ais
 | 
					    "libre", // Fran<61>ais
 | 
				
			||||||
@@ -1046,7 +1046,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Video Format", // English
 | 
					  { "Video Format", // English
 | 
				
			||||||
    "Bildformat", // Deutsch
 | 
					    "Bildformat", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Formato video", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Standard vid<69>o", // Fran<61>ais
 | 
					    "Standard vid<69>o", // Fran<61>ais
 | 
				
			||||||
@@ -1112,7 +1112,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "unknown", // English
 | 
					  { "unknown", // English
 | 
				
			||||||
    "unbekannt", // Deutsch
 | 
					    "unbekannt", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "sconosciuto", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "inconnu", // Fran<61>ais
 | 
					    "inconnu", // Fran<61>ais
 | 
				
			||||||
@@ -1134,7 +1134,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Resolution", // English
 | 
					  { "Resolution", // English
 | 
				
			||||||
    "Aufl<EFBFBD>sung", // Deutsch
 | 
					    "Aufl<EFBFBD>sung", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Risoluzione", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "R<EFBFBD>solution", // Fran<61>ais
 | 
					    "R<EFBFBD>solution", // Fran<61>ais
 | 
				
			||||||
@@ -1156,7 +1156,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Audio Stream", // English
 | 
					  { "Audio Stream", // English
 | 
				
			||||||
    "Audio Stream", // Deutsch
 | 
					    "Audio Stream", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Flusso audio", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Flux audio", // Fran<61>ais
 | 
					    "Flux audio", // Fran<61>ais
 | 
				
			||||||
@@ -1178,7 +1178,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Sampling Frequency", // English
 | 
					  { "Sampling Frequency", // English
 | 
				
			||||||
    "Abtastrate", // Deutsch
 | 
					    "Abtastrate", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Frequenza campionamento", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Fr<EFBFBD>quence d'<27>chantillonage", // Fran<61>ais
 | 
					    "Fr<EFBFBD>quence d'<27>chantillonage", // Fran<61>ais
 | 
				
			||||||
@@ -1376,7 +1376,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "not indicated", // English
 | 
					  { "not indicated", // English
 | 
				
			||||||
    "nicht angegeben", // Deutsch
 | 
					    "nicht angegeben", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "non indicato", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "non indiqu<71>", // Fran<61>ais
 | 
					    "non indiqu<71>", // Fran<61>ais
 | 
				
			||||||
@@ -1420,7 +1420,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "AC-3 Stream", // English
 | 
					  { "AC-3 Stream", // English
 | 
				
			||||||
    "AC-3 Stream", // Deutsch
 | 
					    "AC-3 Stream", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Flusso AC-3", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Flux AC-3", // Fran<61>ais
 | 
					    "Flux AC-3", // Fran<61>ais
 | 
				
			||||||
@@ -1442,7 +1442,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Frame Size", // English
 | 
					  { "Frame Size", // English
 | 
				
			||||||
    "Frame Gr<47><72>e", // Deutsch
 | 
					    "Frame Gr<47><72>e", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Dimensione frame", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Taille de paquet", // Fran<61>ais
 | 
					    "Taille de paquet", // Fran<61>ais
 | 
				
			||||||
@@ -1464,7 +1464,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Bit Stream Mode", // English
 | 
					  { "Bit Stream Mode", // English
 | 
				
			||||||
    "Bitstream Modus", // Deutsch
 | 
					    "Bitstream Modus", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Modalit<EFBFBD> bitstream", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Mode bitstream", // Fran<61>ais
 | 
					    "Mode bitstream", // Fran<61>ais
 | 
				
			||||||
@@ -1486,7 +1486,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Audio Coding Mode", // English
 | 
					  { "Audio Coding Mode", // English
 | 
				
			||||||
    "Audiokodierung", // Deutsch
 | 
					    "Audiokodierung", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Modalit<EFBFBD> codifica audio", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Mode de codage audio", // Fran<61>ais
 | 
					    "Mode de codage audio", // Fran<61>ais
 | 
				
			||||||
@@ -1508,7 +1508,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Center Mix Level", // English
 | 
					  { "Center Mix Level", // English
 | 
				
			||||||
    "Center Mix Pegel", // Deutsch
 | 
					    "Center Mix Pegel", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Livello sonoro centrale", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Niveau sonore milieu", // Fran<61>ais
 | 
					    "Niveau sonore milieu", // Fran<61>ais
 | 
				
			||||||
@@ -1530,7 +1530,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Surround Mix Level", // English
 | 
					  { "Surround Mix Level", // English
 | 
				
			||||||
    "Surround Mix Pegel", // Deutsch
 | 
					    "Surround Mix Pegel", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Livello sonoro surround", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Niveau sonore surround", // Fran<61>ais
 | 
					    "Niveau sonore surround", // Fran<61>ais
 | 
				
			||||||
@@ -1552,7 +1552,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Dolby Surround Mode", // English
 | 
					  { "Dolby Surround Mode", // English
 | 
				
			||||||
    "Dolby Surround Modus", // Deutsch
 | 
					    "Dolby Surround Modus", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Modalit<EFBFBD> Dolby Surround", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Mode Dolby Surround", // Fran<61>ais
 | 
					    "Mode Dolby Surround", // Fran<61>ais
 | 
				
			||||||
@@ -1574,7 +1574,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Low Frequency Effects", // English
 | 
					  { "Low Frequency Effects", // English
 | 
				
			||||||
    "Tieft<EFBFBD>ner Effekte", // Deutsch
 | 
					    "Tieft<EFBFBD>ner Effekte", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Effetti bassa frequenza", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Effets de basses", // Fran<61>ais
 | 
					    "Effets de basses", // Fran<61>ais
 | 
				
			||||||
@@ -1596,7 +1596,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Dialogue Normalization", // English
 | 
					  { "Dialogue Normalization", // English
 | 
				
			||||||
    "Dialog Normalisierung", // Deutsch
 | 
					    "Dialog Normalisierung", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Normalizzazione dialoghi", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Normalisation des dialogues", // Fran<61>ais
 | 
					    "Normalisation des dialogues", // Fran<61>ais
 | 
				
			||||||
@@ -1618,7 +1618,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Complete Main (CM)", // English
 | 
					  { "Complete Main (CM)", // English
 | 
				
			||||||
    "Complete Main (CM)", // Deutsch
 | 
					    "Complete Main (CM)", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Principale (CM)", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Principal (CM)", // Fran<61>ais
 | 
					    "Principal (CM)", // Fran<61>ais
 | 
				
			||||||
@@ -1640,7 +1640,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Music and Effects (ME)", // English
 | 
					  { "Music and Effects (ME)", // English
 | 
				
			||||||
    "Musik und Effekte (ME)", // Deutsch
 | 
					    "Musik und Effekte (ME)", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Musica ed effetti (ME)", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Musique et effets (ME)", // Fran<61>ais
 | 
					    "Musique et effets (ME)", // Fran<61>ais
 | 
				
			||||||
@@ -1662,7 +1662,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Visually Impaired (VI)", // English
 | 
					  { "Visually Impaired (VI)", // English
 | 
				
			||||||
    "Sehbehindert (VI)", // Deutsch
 | 
					    "Sehbehindert (VI)", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Immagine alterata (VI)", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Malvoyants (VI)", // Fran<61>ais
 | 
					    "Malvoyants (VI)", // Fran<61>ais
 | 
				
			||||||
@@ -1684,7 +1684,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Hearing Impaired (HI)", // English
 | 
					  { "Hearing Impaired (HI)", // English
 | 
				
			||||||
    "H<EFBFBD>rbehindert (HI)", // Deutsch
 | 
					    "H<EFBFBD>rbehindert (HI)", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Suono deteriorato (HI)", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Malentendants (HI)", // Fran<61>ais
 | 
					    "Malentendants (HI)", // Fran<61>ais
 | 
				
			||||||
@@ -1706,7 +1706,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Dialogue (D)", // English
 | 
					  { "Dialogue (D)", // English
 | 
				
			||||||
    "Dialog (D)", // Deutsch
 | 
					    "Dialog (D)", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Dialogo (D)", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Dialogue (D)", // Fran<61>ais
 | 
					    "Dialogue (D)", // Fran<61>ais
 | 
				
			||||||
@@ -1728,7 +1728,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Commentary (C)", // English
 | 
					  { "Commentary (C)", // English
 | 
				
			||||||
    "Kommentar (C)", // Deutsch
 | 
					    "Kommentar (C)", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Commenti (C)", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Commentaires (C)", // Fran<61>ais
 | 
					    "Commentaires (C)", // Fran<61>ais
 | 
				
			||||||
@@ -1750,7 +1750,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Emergency (E)", // English
 | 
					  { "Emergency (E)", // English
 | 
				
			||||||
    "Notfall (E)", // Deutsch
 | 
					    "Notfall (E)", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Emergenza (E)", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Urgence (E)", // Fran<61>ais
 | 
					    "Urgence (E)", // Fran<61>ais
 | 
				
			||||||
@@ -1772,7 +1772,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Voice Over (VO)", // English
 | 
					  { "Voice Over (VO)", // English
 | 
				
			||||||
    "<EFBFBD>berlagerte Stimme (VO)", // Deutsch
 | 
					    "<EFBFBD>berlagerte Stimme (VO)", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Voce off (VO)", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Voix off (VO)", // Fran<61>ais
 | 
					    "Voix off (VO)", // Fran<61>ais
 | 
				
			||||||
@@ -1794,7 +1794,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Karaoke", // English
 | 
					  { "Karaoke", // English
 | 
				
			||||||
    "Karaoke", // Deutsch
 | 
					    "Karaoke", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Karaoke", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Karaoke", // Fran<61>ais
 | 
					    "Karaoke", // Fran<61>ais
 | 
				
			||||||
@@ -1816,7 +1816,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Ch1", // English "Channel 1"
 | 
					  { "Ch1", // English "Channel 1"
 | 
				
			||||||
    "Kan1", // Deutsch
 | 
					    "Kan1", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Can. 1", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Can. 1", // Fran<61>ais
 | 
					    "Can. 1", // Fran<61>ais
 | 
				
			||||||
@@ -1838,7 +1838,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Ch2", // English "Channel 2"
 | 
					  { "Ch2", // English "Channel 2"
 | 
				
			||||||
    "Kan2", // Deutsch
 | 
					    "Kan2", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Can. 2", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Can. 2", // Fran<61>ais
 | 
					    "Can. 2", // Fran<61>ais
 | 
				
			||||||
@@ -1860,7 +1860,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "C", // English "Center"
 | 
					  { "C", // English "Center"
 | 
				
			||||||
    "C", // Deutsch
 | 
					    "C", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "C", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Centre", // Fran<61>ais
 | 
					    "Centre", // Fran<61>ais
 | 
				
			||||||
@@ -1882,7 +1882,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "L", // English "Left"
 | 
					  { "L", // English "Left"
 | 
				
			||||||
    "L", // Deutsch
 | 
					    "L", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "S", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Gauche", // Fran<61>ais
 | 
					    "Gauche", // Fran<61>ais
 | 
				
			||||||
@@ -1904,7 +1904,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "R", // English "Right"
 | 
					  { "R", // English "Right"
 | 
				
			||||||
    "R", // Deutsch
 | 
					    "R", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "D", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Droite", // Fran<61>ais
 | 
					    "Droite", // Fran<61>ais
 | 
				
			||||||
@@ -1926,7 +1926,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "S", // English "Surround"
 | 
					  { "S", // English "Surround"
 | 
				
			||||||
    "S", // Deutsch
 | 
					    "S", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "S", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Surround", // Fran<61>ais
 | 
					    "Surround", // Fran<61>ais
 | 
				
			||||||
@@ -1948,7 +1948,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "SL", // English "Surround Left"
 | 
					  { "SL", // English "Surround Left"
 | 
				
			||||||
    "SL", // Deutsch
 | 
					    "SL", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "SS", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Surround gauche", // Fran<61>ais
 | 
					    "Surround gauche", // Fran<61>ais
 | 
				
			||||||
@@ -1970,7 +1970,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "SR", // English "Surround Right"
 | 
					  { "SR", // English "Surround Right"
 | 
				
			||||||
    "SR", // Deutsch
 | 
					    "SR", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "SD", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Surround droit", // Fran<61>ais
 | 
					    "Surround droit", // Fran<61>ais
 | 
				
			||||||
@@ -1992,7 +1992,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Show CA system", // English
 | 
					  { "Show CA system", // English
 | 
				
			||||||
    "CA System anzeigen", // Deutsch
 | 
					    "CA System anzeigen", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Mostra sistema CA", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Syst<EFBFBD>me CA", // Fran<61>ais
 | 
					    "Syst<EFBFBD>me CA", // Fran<61>ais
 | 
				
			||||||
@@ -2014,7 +2014,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Fixed", // English
 | 
					  { "Fixed", // English
 | 
				
			||||||
    "Fest", // Deutsch
 | 
					    "Fest", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Fisso", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Fixe", // Fran<61>ais
 | 
					    "Fixe", // Fran<61>ais
 | 
				
			||||||
@@ -2036,7 +2036,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Analog", // English
 | 
					  { "Analog", // English
 | 
				
			||||||
    "Analog", // Deutsch
 | 
					    "Analog", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Analogico", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Analogique", // Fran<61>ais
 | 
					    "Analogique", // Fran<61>ais
 | 
				
			||||||
@@ -2058,7 +2058,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Free to Air", // English
 | 
					  { "Free to Air", // English
 | 
				
			||||||
    "Frei empfangbar", // Deutsch
 | 
					    "Frei empfangbar", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "In chiaro", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Free To Air", // Fran<61>ais
 | 
					    "Free To Air", // Fran<61>ais
 | 
				
			||||||
@@ -2080,7 +2080,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "SECA/Mediaguard", // English
 | 
					  { "SECA/Mediaguard", // English
 | 
				
			||||||
    "SECA/Mediaguard", // Deutsch
 | 
					    "SECA/Mediaguard", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "SECA/Mediaguard", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "SECA/Mediaguard", // Fran<61>ais
 | 
					    "SECA/Mediaguard", // Fran<61>ais
 | 
				
			||||||
@@ -2102,7 +2102,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Viaccess", // English
 | 
					  { "Viaccess", // English
 | 
				
			||||||
    "Viaccess", // Deutsch
 | 
					    "Viaccess", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Viaccess", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Viaccess", // Fran<61>ais
 | 
					    "Viaccess", // Fran<61>ais
 | 
				
			||||||
@@ -2124,7 +2124,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Irdeto", // English
 | 
					  { "Irdeto", // English
 | 
				
			||||||
    "Irdeto", // Deutsch
 | 
					    "Irdeto", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Irdeto", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Irdeto", // Fran<61>ais
 | 
					    "Irdeto", // Fran<61>ais
 | 
				
			||||||
@@ -2146,7 +2146,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "NDS/Videoguard", // English
 | 
					  { "NDS/Videoguard", // English
 | 
				
			||||||
    "NDS/Videoguard", // Deutsch
 | 
					    "NDS/Videoguard", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "NDS/Videoguard", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "NDS/Videoguard", // Fran<61>ais
 | 
					    "NDS/Videoguard", // Fran<61>ais
 | 
				
			||||||
@@ -2168,7 +2168,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Conax", // English
 | 
					  { "Conax", // English
 | 
				
			||||||
    "Conax", // Deutsch
 | 
					    "Conax", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Conax", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "Conax", // Fran<61>ais
 | 
					    "Conax", // Fran<61>ais
 | 
				
			||||||
@@ -2190,7 +2190,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "CryptoWorks", // English
 | 
					  { "CryptoWorks", // English
 | 
				
			||||||
    "CryptoWorks", // Deutsch
 | 
					    "CryptoWorks", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "CryptoWorks", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "CryptoWorks", // Fran<61>ais
 | 
					    "CryptoWorks", // Fran<61>ais
 | 
				
			||||||
@@ -2212,7 +2212,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "PowerVu", // English
 | 
					  { "PowerVu", // English
 | 
				
			||||||
    "PowerVu", // Deutsch
 | 
					    "PowerVu", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "PowerVu", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "PowerVu", // Fran<61>ais
 | 
					    "PowerVu", // Fran<61>ais
 | 
				
			||||||
@@ -2234,7 +2234,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "BetaCrypt", // English
 | 
					  { "BetaCrypt", // English
 | 
				
			||||||
    "BetaCrypt", // Deutsch
 | 
					    "BetaCrypt", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "BetaCrypt", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "BetaCrypt", // Fran<61>ais
 | 
					    "BetaCrypt", // Fran<61>ais
 | 
				
			||||||
@@ -2256,7 +2256,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "NagraVision", // English
 | 
					  { "NagraVision", // English
 | 
				
			||||||
    "NagraVision", // Deutsch
 | 
					    "NagraVision", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "NagraVision", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "NagraVision", // Fran<61>ais
 | 
					    "NagraVision", // Fran<61>ais
 | 
				
			||||||
@@ -2278,7 +2278,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "SkyCrypt", // English
 | 
					  { "SkyCrypt", // English
 | 
				
			||||||
    "SkyCrypt", // Deutsch
 | 
					    "SkyCrypt", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "SkyCrypt", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "SkyCrypt", // Fran<61>ais
 | 
					    "SkyCrypt", // Fran<61>ais
 | 
				
			||||||
@@ -2300,7 +2300,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Use SVDRP service", // English
 | 
					  { "Use SVDRP service", // English
 | 
				
			||||||
    "SVDRP Service verwenden", // Deutsch
 | 
					    "SVDRP Service verwenden", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Utilizza servizio SVDRP", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "", // Fran<61>ais
 | 
					    "", // Fran<61>ais
 | 
				
			||||||
@@ -2322,7 +2322,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "SVDRP service IP", // English
 | 
					  { "SVDRP service IP", // English
 | 
				
			||||||
    "SVDRP Service IP", // Deutsch
 | 
					    "SVDRP Service IP", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "IP servizio SVDRP", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "", // Fran<61>ais
 | 
					    "", // Fran<61>ais
 | 
				
			||||||
@@ -2344,7 +2344,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "SVDRP service port", // English
 | 
					  { "SVDRP service port", // English
 | 
				
			||||||
    "SVDRP Service Port", // Deutsch
 | 
					    "SVDRP Service Port", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Porta servizio SVDRP", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "", // Fran<61>ais
 | 
					    "", // Fran<61>ais
 | 
				
			||||||
@@ -2366,7 +2366,7 @@ const tI18nPhrase Phrases[] = {
 | 
				
			|||||||
  { "Femon not available while replaying", // English
 | 
					  { "Femon not available while replaying", // English
 | 
				
			||||||
    "", // Deutsch
 | 
					    "", // Deutsch
 | 
				
			||||||
    "", // Slovenski
 | 
					    "", // Slovenski
 | 
				
			||||||
    "", // Italiano
 | 
					    "Femon non disponibile durante la riproduzione", // Italiano
 | 
				
			||||||
    "", // Nederlands
 | 
					    "", // Nederlands
 | 
				
			||||||
    "", // Portugu<67>s
 | 
					    "", // Portugu<67>s
 | 
				
			||||||
    "", // Fran<61>ais
 | 
					    "", // Fran<61>ais
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										15
									
								
								femonosd.c
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								femonosd.c
									
									
									
									
									
								
							@@ -44,7 +44,7 @@
 | 
				
			|||||||
#define OSDHEIGHT                 femonConfig.osdheight   // in pixels
 | 
					#define OSDHEIGHT                 femonConfig.osdheight   // in pixels
 | 
				
			||||||
#define OSDWIDTH                  600                     // in pixels
 | 
					#define OSDWIDTH                  600                     // in pixels
 | 
				
			||||||
#define OSDROWHEIGHT              m_Font->Height()        // in pixels
 | 
					#define OSDROWHEIGHT              m_Font->Height()        // in pixels
 | 
				
			||||||
#define OSDINFOHEIGHT             (OSDROWHEIGHT * 11)     // in pixels (11 rows)
 | 
					#define OSDINFOHEIGHT             (OSDROWHEIGHT * 12)     // in pixels (12 rows)
 | 
				
			||||||
#define OSDSTATUSHEIGHT           (OSDROWHEIGHT * 6)      // in pixels (6 rows)
 | 
					#define OSDSTATUSHEIGHT           (OSDROWHEIGHT * 6)      // in pixels (6 rows)
 | 
				
			||||||
#define OSDSPACING                5
 | 
					#define OSDSPACING                5
 | 
				
			||||||
#define OSDCORNERING              10
 | 
					#define OSDCORNERING              10
 | 
				
			||||||
@@ -319,8 +319,8 @@ void cFemonOsd::DrawInfoWindow(void)
 | 
				
			|||||||
        m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Dpid"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Dpid"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
				
			||||||
        m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), *getDpids(channel), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), *getDpids(channel), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
				
			||||||
        offset += OSDROWHEIGHT;
 | 
					        offset += OSDROWHEIGHT;
 | 
				
			||||||
        m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("CA"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Spid"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
				
			||||||
        m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), *getCAids(channel, femonConfig.showcasystem), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), *getSpids(channel), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
				
			||||||
        m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Tpid"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Tpid"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
				
			||||||
        m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), *cString::sprintf("%d", channel->Tpid()), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), *cString::sprintf("%d", channel->Tpid()), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
				
			||||||
        offset += OSDROWHEIGHT;
 | 
					        offset += OSDROWHEIGHT;
 | 
				
			||||||
@@ -334,6 +334,9 @@ void cFemonOsd::DrawInfoWindow(void)
 | 
				
			|||||||
        m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Rid"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), tr("Rid"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
				
			||||||
        m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), *cString::sprintf("%d", channel->Rid()), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(4), OSDINFOWIN_Y(offset), *cString::sprintf("%d", channel->Rid()), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
				
			||||||
        offset += OSDROWHEIGHT;
 | 
					        offset += OSDROWHEIGHT;
 | 
				
			||||||
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("CA"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
				
			||||||
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(2), OSDINFOWIN_Y(offset), *getCAids(channel, femonConfig.showcasystem), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
				
			||||||
 | 
					        offset += OSDROWHEIGHT;
 | 
				
			||||||
        switch (m_FrontendInfo.type) {
 | 
					        switch (m_FrontendInfo.type) {
 | 
				
			||||||
          case FE_QPSK:
 | 
					          case FE_QPSK:
 | 
				
			||||||
               m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), *cString::sprintf("%s #%d - %s", tr("Satellite Card"), (m_SvdrpFrontend >= 0) ? m_SvdrpFrontend : cDevice::ActualDevice()->CardIndex(), m_FrontendInfo.name), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
					               m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), *cString::sprintf("%s #%d - %s", tr("Satellite Card"), (m_SvdrpFrontend >= 0) ? m_SvdrpFrontend : cDevice::ActualDevice()->CardIndex(), m_FrontendInfo.name), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
				
			||||||
@@ -432,6 +435,7 @@ void cFemonOsd::DrawInfoWindow(void)
 | 
				
			|||||||
        m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Resolution"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Resolution"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
				
			||||||
        m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), m_Receiver ? *cString::sprintf("%d x %d", m_Receiver->VideoHorizontalSize(), m_Receiver->VideoVerticalSize()) : *cString::sprintf("---"), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), m_Receiver ? *cString::sprintf("%d x %d", m_Receiver->VideoHorizontalSize(), m_Receiver->VideoVerticalSize()) : *cString::sprintf("---"), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
				
			||||||
        offset += OSDROWHEIGHT;
 | 
					        offset += OSDROWHEIGHT;
 | 
				
			||||||
 | 
					        offset += OSDROWHEIGHT;
 | 
				
			||||||
        m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Audio Stream"), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Audio Stream"), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
				
			||||||
        m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), *cString::sprintf("#%d %s", IS_AUDIO_TRACK(track) ? channel->Apid(int(track - ttAudioFirst)) : channel->Apid(0), IS_AUDIO_TRACK(track) ? channel->Alang(int(track - ttAudioFirst)) : channel->Alang(0)), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
					        m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), *cString::sprintf("#%d %s", IS_AUDIO_TRACK(track) ? channel->Apid(int(track - ttAudioFirst)) : channel->Apid(0), IS_AUDIO_TRACK(track) ? channel->Alang(int(track - ttAudioFirst)) : channel->Alang(0)), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
				
			||||||
        offset += OSDROWHEIGHT;
 | 
					        offset += OSDROWHEIGHT;
 | 
				
			||||||
@@ -451,13 +455,16 @@ void cFemonOsd::DrawInfoWindow(void)
 | 
				
			|||||||
     else if (m_DisplayMode == eFemonModeAC3) {
 | 
					     else if (m_DisplayMode == eFemonModeAC3) {
 | 
				
			||||||
        m_Osd->DrawRectangle(0, OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDINFOHEIGHT), femonTheme[femonConfig.theme].clrBackground);
 | 
					        m_Osd->DrawRectangle(0, OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDINFOHEIGHT), femonTheme[femonConfig.theme].clrBackground);
 | 
				
			||||||
        m_Osd->DrawRectangle(0, OSDINFOWIN_Y(offset), OSDWIDTH, OSDINFOWIN_Y(offset+OSDROWHEIGHT-1), femonTheme[femonConfig.theme].clrTitleBackground);
 | 
					        m_Osd->DrawRectangle(0, OSDINFOWIN_Y(offset), OSDWIDTH, OSDINFOWIN_Y(offset+OSDROWHEIGHT-1), femonTheme[femonConfig.theme].clrTitleBackground);
 | 
				
			||||||
        m_Osd->DrawText( OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), *cString::sprintf("%s - %s #%d %s", tr("Stream Information"), tr("AC-3 Stream"), IS_DOLBY_TRACK(track) ? channel->Dpid(int(track - ttDolbyFirst)) : channel->Dpid(0), IS_DOLBY_TRACK(track) ? channel->Dlang(int(track - ttDolbyFirst)) : channel->Dlang(0)), femonTheme[femonConfig.theme].clrTitleText, femonTheme[femonConfig.theme].clrTitleBackground, m_Font);
 | 
					        m_Osd->DrawText( OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Stream Information"), femonTheme[femonConfig.theme].clrTitleText, femonTheme[femonConfig.theme].clrTitleBackground, m_Font);
 | 
				
			||||||
        if (IS_OSDCORNERING) {
 | 
					        if (IS_OSDCORNERING) {
 | 
				
			||||||
           m_Osd->DrawEllipse(0, OSDINFOWIN_Y(0), OSDCORNERING, OSDINFOWIN_Y(OSDCORNERING), clrTransparent, -2);
 | 
					           m_Osd->DrawEllipse(0, OSDINFOWIN_Y(0), OSDCORNERING, OSDINFOWIN_Y(OSDCORNERING), clrTransparent, -2);
 | 
				
			||||||
           m_Osd->DrawEllipse((OSDWIDTH-OSDCORNERING), OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDCORNERING), clrTransparent, -1);
 | 
					           m_Osd->DrawEllipse((OSDWIDTH-OSDCORNERING), OSDINFOWIN_Y(0), OSDWIDTH, OSDINFOWIN_Y(OSDCORNERING), clrTransparent, -1);
 | 
				
			||||||
           }
 | 
					           }
 | 
				
			||||||
        offset += OSDROWHEIGHT;
 | 
					        offset += OSDROWHEIGHT;
 | 
				
			||||||
        if (m_Receiver && m_Receiver->AC3Valid() && IS_DOLBY_TRACK(track)) {
 | 
					        if (m_Receiver && m_Receiver->AC3Valid() && IS_DOLBY_TRACK(track)) {
 | 
				
			||||||
 | 
					           m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("AC-3 Stream"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
				
			||||||
 | 
					           m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), *cString::sprintf("#%d %s", channel->Dpid(int(track - ttDolbyFirst)), channel->Dlang(int(track - ttDolbyFirst))), femonTheme[femonConfig.theme].clrTitleText, femonTheme[femonConfig.theme].clrTitleBackground, m_Font);
 | 
				
			||||||
 | 
					           offset += OSDROWHEIGHT;
 | 
				
			||||||
           m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Bitrate"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
					           m_Osd->DrawText(OSDINFOWIN_X(1), OSDINFOWIN_Y(offset), tr("Bitrate"), femonTheme[femonConfig.theme].clrInactiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
				
			||||||
           m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), *cString::sprintf("%s (%s)", *getBitrateKbits(m_Receiver->AC3StreamBitrate()), *getBitrateKbits(m_Receiver->AC3Bitrate())), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
					           m_Osd->DrawText(OSDINFOWIN_X(3), OSDINFOWIN_Y(offset), *cString::sprintf("%s (%s)", *getBitrateKbits(m_Receiver->AC3StreamBitrate()), *getBitrateKbits(m_Receiver->AC3Bitrate())), femonTheme[femonConfig.theme].clrActiveText, femonTheme[femonConfig.theme].clrBackground, m_Font);
 | 
				
			||||||
           offset += OSDROWHEIGHT;
 | 
					           offset += OSDROWHEIGHT;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -165,6 +165,15 @@ cString getDpids(const cChannel *channel)
 | 
				
			|||||||
  return dpids;
 | 
					  return dpids;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cString getSpids(const cChannel *channel)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					  int value = 0;
 | 
				
			||||||
 | 
					  cString spids = cString::sprintf("%d", channel->Spid(value));
 | 
				
			||||||
 | 
					  while (channel->Spid(++value) && (value < MAXSPIDS))
 | 
				
			||||||
 | 
					    spids = cString::sprintf("%s, %d", *spids, channel->Spid(value));
 | 
				
			||||||
 | 
					  return spids;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cString getCAids(const cChannel *channel, bool identify)
 | 
					cString getCAids(const cChannel *channel, bool identify)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  cString caids;
 | 
					  cString caids;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -33,6 +33,7 @@ uint32_t getUNC(int cardIndex = 0);
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
cString getApids(const cChannel *channel);
 | 
					cString getApids(const cChannel *channel);
 | 
				
			||||||
cString getDpids(const cChannel *channel);
 | 
					cString getDpids(const cChannel *channel);
 | 
				
			||||||
 | 
					cString getSpids(const cChannel *channel);
 | 
				
			||||||
cString getCAids(const cChannel *channel, bool identify = false);
 | 
					cString getCAids(const cChannel *channel, bool identify = false);
 | 
				
			||||||
cString getCA(int value);
 | 
					cString getCA(int value);
 | 
				
			||||||
cString getCoderate(int value);
 | 
					cString getCoderate(int value);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user