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

Compare commits

..

3 Commits

Author SHA1 Message Date
Rolf Ahrenberg
eb2da4721c Added whitespace cleanups. 2008-12-16 12:51:59 +02:00
Rolf Ahrenberg
5cf9b4af0b Updated for vdr-1.7.2.
Removed the "Show CA system" setup option.
2008-12-16 12:26:46 +02:00
Rolf Ahrenberg
83556bf2d3 Added whitespace cleanups.
Changed info window to use the channel source instead of the frontend type.
2008-12-13 22:25:26 +02:00
12 changed files with 79 additions and 132 deletions

48
HISTORY
View File

@@ -29,8 +29,7 @@ VDR Plugin 'femon' Revision History
- Redesigned the user interface. - Redesigned the user interface.
- Transponder information is now available in advanced display mode: - Transponder information is now available in advanced display mode:
Press 'OK' key to switch between the simple and the advanced display Press 'OK' key to switch between the simple and the advanced display mode.
mode.
- Moved bitrate calculation to it's own thread for improved accurancy. - Moved bitrate calculation to it's own thread for improved accurancy.
2004-03-07: Version 0.0.3a 2004-03-07: Version 0.0.3a
@@ -42,8 +41,7 @@ VDR Plugin 'femon' Revision History
2004-03-16: Version 0.0.3b 2004-03-16: Version 0.0.3b
- Fixed channel toggling with '0' key. - Fixed channel toggling with '0' key.
- Bitrate calculation thread is now canceled immediately to speed up - Bitrate calculation thread is now canceled immediately to speed up channel switching.
channel switching.
2004-04-04: Version 0.0.3c 2004-04-04: Version 0.0.3c
@@ -90,8 +88,7 @@ VDR Plugin 'femon' Revision History
2004-06-11: Version 0.1.3 2004-06-11: Version 0.1.3
- Added "AC-3 Stream Information" display mode (Thanks to Lothar - Added "AC-3 Stream Information" display mode (Thanks to Lothar Englisch).
Englisch).
2004-06-24: Version 0.1.4 2004-06-24: Version 0.1.4
@@ -103,8 +100,7 @@ VDR Plugin 'femon' Revision History
- Fixed OSDSTATUSWIN_XC define. - Fixed OSDSTATUSWIN_XC define.
- Added preliminary NTSC support (make NTSC_SYSTEM=1 plugins). - Added preliminary NTSC support (make NTSC_SYSTEM=1 plugins).
- Fixed "Setup/OSD/Use Small Fonts" bug (Thanks to Winni for reporting - Fixed "Setup/OSD/Use Small Fonts" bug (Thanks to Winni for reporting this one).
this one).
- Added patches directory: CA system names by Lauri Tischler. - Added patches directory: CA system names by Lauri Tischler.
2004-09-11: Version 0.1.6 2004-09-11: Version 0.1.6
@@ -150,8 +146,7 @@ VDR Plugin 'femon' Revision History
2005-04-01: Version 0.8.7 2005-04-01: Version 0.8.7
- Default make target is now all. - Default make target is now all.
- Fixed the access rights of symbols subdirectory (Thanks to Harri - Fixed the access rights of symbols subdirectory (Thanks to Harri Kukkonen).
Kukkonen).
- Added a new theme: Moronimo (Thanks to Morone). - Added a new theme: Moronimo (Thanks to Morone).
2005-04-02: Version 0.8.8 2005-04-02: Version 0.8.8
@@ -165,8 +160,7 @@ VDR Plugin 'femon' Revision History
2005-05-20: Version 0.9.0 2005-05-20: Version 0.9.0
- Renamed compiling switches ('DEBUG' to 'FEMON_DEBUG' and 'NTSC_SYSTEM' - Renamed compiling switches ('DEBUG' to 'FEMON_DEBUG' and 'NTSC_SYSTEM' to 'FEMON_NTSC').
to 'FEMON_NTSC').
- Enabled preliminary support for the device switching. - Enabled preliminary support for the device switching.
2005-07-23: Version 0.9.1 2005-07-23: Version 0.9.1
@@ -206,8 +200,7 @@ VDR Plugin 'femon' Revision History
- Updated for vdr-1.3.40. - Updated for vdr-1.3.40.
- Fixed a translation bug (Thanks to Antti Hartikainen). - Fixed a translation bug (Thanks to Antti Hartikainen).
- Fixed AC3 header parsing bug (Thanks to Axel Katzur for reporting this - Fixed AC3 header parsing bug (Thanks to Axel Katzur for reporting this one).
one).
- Fixed EgalsTry theme (Thanks to Uwe Hanke). - Fixed EgalsTry theme (Thanks to Uwe Hanke).
2006-02-06: Version 0.9.7 2006-02-06: Version 0.9.7
@@ -255,8 +248,7 @@ VDR Plugin 'femon' Revision History
2007-05-01: Version 1.1.2 2007-05-01: Version 1.1.2
- Fixed opening while replaying (Thanks to Antti Seppälä for reporting - Fixed opening while replaying (Thanks to Antti Seppälä for reporting this one).
this one).
2007-05-15: Version 1.1.3 2007-05-15: Version 1.1.3
@@ -306,7 +298,7 @@ VDR Plugin 'femon' Revision History
2008-06-20: Version 1.6.1 2008-06-20: Version 1.6.1
- Updated Italian translation (Thanks to Diego Pierotto). - Updated Italian translation (Thanks to Diego Pierotto).
- Fixed a crash if no channel available (Thanks to Winfried Köhler). - Fixed a crash if no channel available (Thanks to Winfried Köhler)
2008-10-12: Version 1.6.2 2008-10-12: Version 1.6.2
@@ -325,33 +317,17 @@ VDR Plugin 'femon' Revision History
- Updated Italian translation (Thanks to Diego Pierotto). - Updated Italian translation (Thanks to Diego Pierotto).
- Fixed a memory leak. - Fixed a memory leak.
- Added a check for the minimum OSD height. - Added a check for the minimum OSD height.
- Replaced "Use single area (8bpp)" option with VDR's - Replaced "Use single area (8bpp)" option with VDR's "Setup/OSD/Anti-alias".
"Setup/OSD/Anti-alias".
- Removed the FEMON_NTSC option. - Removed the FEMON_NTSC option.
- Fixed a deadlock in cFemonReceiver (Thanks to Antti Seppälä for - Fixed a deadlock in cFemonReceiver (Thanks to Antti Seppälä for reporting this one).
reporting this one).
2008-12-16: Version 1.6.5 2008-12-16: Version 1.6.5
- Backported from 1.7.0. - Backported from 1.7.0.
2009-01-06: Version 1.6.6
- Backported from 1.7.1.
===================================
VDR Plugin 'femon' Revision History
===================================
2008-12-16: Version 1.7.0 2008-12-16: Version 1.7.0
- Updated for vdr-1.7.2. - Updated for vdr-1.7.2.
- Added whitespace cleanups. - Added whitespace cleanups.
- Changed info window to use the channel source instead of the frontend - Changed info window to use the channel source instead of the frontend type.
type.
- Removed the "Show CA system" setup option. - Removed the "Show CA system" setup option.
2009-01-06: Version 1.7.1
- Fixed closing of frontend file handles (Thanks to Brendon Higgins for
reporting this one).

View File

@@ -14,11 +14,11 @@
#include "femonservice.h" #include "femonservice.h"
#include "femontools.h" #include "femontools.h"
#if defined(APIVERSNUM) && APIVERSNUM < 10600 #if defined(APIVERSNUM) && APIVERSNUM < 10700
#error "VDR-1.6.0 API version or greater is required!" #error "VDR-1.7.0 API version or greater is required!"
#endif #endif
static const char VERSION[] = "1.6.6"; static const char VERSION[] = "1.7.0";
static const char DESCRIPTION[] = trNOOP("DVB Signal Information Monitor (OSD)"); static const char DESCRIPTION[] = trNOOP("DVB Signal Information Monitor (OSD)");
static const char MAINMENUENTRY[] = trNOOP("Signal Information"); static const char MAINMENUENTRY[] = trNOOP("Signal Information");

View File

@@ -121,7 +121,7 @@ cFemonOsd *cFemonOsd::pInstance = NULL;
cFemonOsd *cFemonOsd::Instance(bool create) cFemonOsd *cFemonOsd::Instance(bool create)
{ {
Dprintf("%s()\n", __PRETTY_FUNCTION__); Dprintf("%s()\n", __PRETTY_FUNCTION__);
if ((pInstance == NULL) && create) if (pInstance == NULL && create)
{ {
pInstance = new cFemonOsd(); pInstance = new cFemonOsd();
} }
@@ -179,10 +179,6 @@ cFemonOsd::~cFemonOsd(void)
} }
if (m_Osd) if (m_Osd)
DELETENULL(m_Osd); DELETENULL(m_Osd);
if (m_Frontend >= 0) {
close(m_Frontend);
m_Frontend = -1;
}
pInstance = NULL; pInstance = NULL;
} }
@@ -323,7 +319,7 @@ void cFemonOsd::DrawInfoWindow(void)
offset += OSDROWHEIGHT; offset += OSDROWHEIGHT;
switch (channel->Source() & cSource::st_Mask) { switch (channel->Source() & cSource::st_Mask) {
case cSource::stSat: case cSource::stSat:
OSDDRAWINFOLINE(*cString::sprintf("DVB-S #%d - %s", (m_SvdrpFrontend >= 0) ? m_SvdrpFrontend : cDevice::ActualDevice()->CardIndex(), m_FrontendInfo.name)); OSDDRAWINFOLINE(*cString::sprintf("DVB-S%s #%d - %s", (m_FrontendInfo.caps & 0x10000000) ? "2" : "", (m_SvdrpFrontend >= 0) ? m_SvdrpFrontend : cDevice::ActualDevice()->CardIndex(), m_FrontendInfo.name));
offset += OSDROWHEIGHT; offset += OSDROWHEIGHT;
OSDDRAWINFOLEFT( trVDR("Frequency"), *getFrequencyMHz(channel->Frequency())); OSDDRAWINFOLEFT( trVDR("Frequency"), *getFrequencyMHz(channel->Frequency()));
OSDDRAWINFORIGHT(trVDR("Source"), *cSource::ToString(channel->Source())); OSDDRAWINFORIGHT(trVDR("Source"), *cSource::ToString(channel->Source()));
@@ -333,6 +329,9 @@ void cFemonOsd::DrawInfoWindow(void)
offset += OSDROWHEIGHT; offset += OSDROWHEIGHT;
OSDDRAWINFOLEFT( trVDR("Inversion"), *getInversion(channel->Inversion())); OSDDRAWINFOLEFT( trVDR("Inversion"), *getInversion(channel->Inversion()));
OSDDRAWINFORIGHT(trVDR("CoderateH"), *getCoderate(channel->CoderateH())); OSDDRAWINFORIGHT(trVDR("CoderateH"), *getCoderate(channel->CoderateH()));
offset += OSDROWHEIGHT;
OSDDRAWINFOLEFT( trVDR("System"), *getSystem(channel->System()));
OSDDRAWINFORIGHT(trVDR("RollOff"), *getRollOff(channel->RollOff()));
break; break;
case cSource::stCable: case cSource::stCable:
@@ -845,6 +844,6 @@ eOSState cFemonOsd::ProcessKey(eKeys Key)
break; break;
} }
state = osContinue; state = osContinue;
} }
return state; return state;
} }

View File

@@ -59,6 +59,17 @@ static cString getCA(int value)
return cString::sprintf("%X", value); return cString::sprintf("%X", value);
} }
static const char *getUserString(int Value, const tChannelParameterMap *Map)
{
const tChannelParameterMap *map = Map;
while (map && map->userValue != -1) {
if (map->driverValue == Value)
return map->userString ? tr(map->userString) : "---";
map++;
}
return "---";
}
cString getFrontendInfo(int cardIndex) cString getFrontendInfo(int cardIndex)
{ {
cString info; cString info;
@@ -284,88 +295,47 @@ cString getAudioChannelMode(int value)
cString getCoderate(int value) cString getCoderate(int value)
{ {
switch (value) { return cString::sprintf("%s", getUserString(value, CoderateValues));
case FEC_NONE: return cString::sprintf("%s", trVDR("none"));
case FEC_1_2: return cString::sprintf("1/2");
case FEC_2_3: return cString::sprintf("2/3");
case FEC_3_4: return cString::sprintf("3/4");
case FEC_4_5: return cString::sprintf("4/5");
case FEC_5_6: return cString::sprintf("5/6");
case FEC_6_7: return cString::sprintf("6/7");
case FEC_7_8: return cString::sprintf("7/8");
case FEC_8_9: return cString::sprintf("8/9");
case FEC_AUTO: return cString::sprintf("%s", trVDR("auto"));
}
return cString::sprintf("---");
} }
cString getTransmission(int value) cString getTransmission(int value)
{ {
switch (value) { return cString::sprintf("%s", getUserString(value, TransmissionValues));
case TRANSMISSION_MODE_2K: return cString::sprintf("2K");
case TRANSMISSION_MODE_8K: return cString::sprintf("8K");
case TRANSMISSION_MODE_AUTO: return cString::sprintf("%s", trVDR("auto"));
}
return cString::sprintf("---");
} }
cString getBandwidth(int value) cString getBandwidth(int value)
{ {
switch (value) { return cString::sprintf("%s", getUserString(value, BandwidthValues));
case BANDWIDTH_8_MHZ: return cString::sprintf("8 %s", tr("MHz"));
case BANDWIDTH_7_MHZ: return cString::sprintf("7 %s", tr("MHz"));
case BANDWIDTH_6_MHZ: return cString::sprintf("6 %s", tr("MHz"));
case BANDWIDTH_AUTO: return cString::sprintf("%s", trVDR("auto"));
}
return cString::sprintf("---");
} }
cString getInversion(int value) cString getInversion(int value)
{ {
switch (value) { return cString::sprintf("%s", getUserString(value, InversionValues));
case INVERSION_OFF: return cString::sprintf("%s", tr("off"));
case INVERSION_ON: return cString::sprintf("%s", tr("on"));
case INVERSION_AUTO: return cString::sprintf("%s", trVDR("auto"));
}
return cString::sprintf("---");
} }
cString getHierarchy(int value) cString getHierarchy(int value)
{ {
switch (value) { return cString::sprintf("%s", getUserString(value, HierarchyValues));
case HIERARCHY_NONE: return cString::sprintf("%s", trVDR("none"));
case HIERARCHY_1: return cString::sprintf("1");
case HIERARCHY_2: return cString::sprintf("2");
case HIERARCHY_4: return cString::sprintf("4");
case HIERARCHY_AUTO: return cString::sprintf("%s", trVDR("auto"));
}
return cString::sprintf("---");
} }
cString getGuard(int value) cString getGuard(int value)
{ {
switch (value) { return cString::sprintf("%s", getUserString(value, GuardValues));
case GUARD_INTERVAL_1_32: return cString::sprintf("1/32");
case GUARD_INTERVAL_1_16: return cString::sprintf("1/16");
case GUARD_INTERVAL_1_8: return cString::sprintf("1/8");
case GUARD_INTERVAL_1_4: return cString::sprintf("1/4");
case GUARD_INTERVAL_AUTO: return cString::sprintf("%s", trVDR("auto"));
}
return cString::sprintf("---");
} }
cString getModulation(int value) cString getModulation(int value)
{ {
switch (value) { return cString::sprintf("%s", getUserString(value, ModulationValues));
case QPSK: return cString::sprintf("QPSK"); }
case QAM_16: return cString::sprintf("QAM 16");
case QAM_32: return cString::sprintf("QAM 32"); cString getSystem(int value)
case QAM_64: return cString::sprintf("QAM 64"); {
case QAM_128: return cString::sprintf("QAM 128"); return cString::sprintf("%s", getUserString(value, SystemValues));
case QAM_256: return cString::sprintf("QAM 256"); }
case QAM_AUTO: return cString::sprintf("QAM %s", trVDR("auto"));
} cString getRollOff(int value)
return cString::sprintf("---"); {
return cString::sprintf("%s", getUserString(value, RollOffValues));
} }
cString getResolution(int width, int height, int scan) cString getResolution(int width, int height, int scan)

View File

@@ -48,6 +48,8 @@ cString getInversion(int value);
cString getHierarchy(int value); cString getHierarchy(int value);
cString getGuard(int value); cString getGuard(int value);
cString getModulation(int value); cString getModulation(int value);
cString getSystem(int value);
cString getRollOff(int value);
cString getResolution(int width, int height, int scan); cString getResolution(int width, int height, int scan);
cString getAspectRatio(int value); cString getAspectRatio(int value);
cString getVideoFormat(int value); cString getVideoFormat(int value);

View File

@@ -7,7 +7,7 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: femon 1.6.5\n" "Project-Id-Version: femon 1.7.0\n"
"Report-Msgid-Bugs-To: Rolf Ahrenberg\n" "Report-Msgid-Bugs-To: Rolf Ahrenberg\n"
"POT-Creation-Date: 2008-12-16 12:08+0200\n" "POT-Creation-Date: 2008-12-16 12:08+0200\n"
"PO-Revision-Date: 2007-08-12 23:22+0300\n" "PO-Revision-Date: 2007-08-12 23:22+0300\n"
@@ -287,9 +287,6 @@ msgstr ""
msgid "mono" msgid "mono"
msgstr "" msgstr ""
msgid "MHz"
msgstr "MHz"
msgid "interlaced" msgid "interlaced"
msgstr "" msgstr ""
@@ -380,6 +377,9 @@ msgstr "dB"
msgid "not indicated" msgid "not indicated"
msgstr "nicht angegeben" msgstr "nicht angegeben"
msgid "MHz"
msgstr "MHz"
msgid "free" msgid "free"
msgstr "frei" msgstr "frei"

View File

@@ -5,7 +5,7 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: femon 1.6.5\n" "Project-Id-Version: femon 1.7.0\n"
"Report-Msgid-Bugs-To: Rolf Ahrenberg\n" "Report-Msgid-Bugs-To: Rolf Ahrenberg\n"
"POT-Creation-Date: 2008-12-16 12:08+0200\n" "POT-Creation-Date: 2008-12-16 12:08+0200\n"
"PO-Revision-Date: 2007-08-12 23:22+0300\n" "PO-Revision-Date: 2007-08-12 23:22+0300\n"
@@ -285,9 +285,6 @@ msgstr ""
msgid "mono" msgid "mono"
msgstr "o" msgstr "o"
msgid "MHz"
msgstr "MHz"
msgid "interlaced" msgid "interlaced"
msgstr "" msgstr ""
@@ -378,6 +375,9 @@ msgstr "dB"
msgid "not indicated" msgid "not indicated"
msgstr "no indicado" msgstr "no indicado"
msgid "MHz"
msgstr "MHz"
msgid "free" msgid "free"
msgstr "libre" msgstr "libre"

View File

@@ -5,7 +5,7 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: femon 1.6.5\n" "Project-Id-Version: femon 1.7.0\n"
"Report-Msgid-Bugs-To: Rolf Ahrenberg\n" "Report-Msgid-Bugs-To: Rolf Ahrenberg\n"
"POT-Creation-Date: 2008-12-16 12:08+0200\n" "POT-Creation-Date: 2008-12-16 12:08+0200\n"
"PO-Revision-Date: 2007-08-12 23:22+0300\n" "PO-Revision-Date: 2007-08-12 23:22+0300\n"
@@ -285,9 +285,6 @@ msgstr ""
msgid "mono" msgid "mono"
msgstr "" msgstr ""
msgid "MHz"
msgstr "MHz"
msgid "interlaced" msgid "interlaced"
msgstr "" msgstr ""
@@ -378,6 +375,9 @@ msgstr "dB"
msgid "not indicated" msgid "not indicated"
msgstr "m<>rkimata" msgstr "m<>rkimata"
msgid "MHz"
msgstr "MHz"
msgid "free" msgid "free"
msgstr "vaba" msgstr "vaba"

View File

@@ -5,7 +5,7 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: femon 1.6.5\n" "Project-Id-Version: femon 1.7.0\n"
"Report-Msgid-Bugs-To: Rolf Ahrenberg\n" "Report-Msgid-Bugs-To: Rolf Ahrenberg\n"
"POT-Creation-Date: 2008-12-16 12:08+0200\n" "POT-Creation-Date: 2008-12-16 12:08+0200\n"
"PO-Revision-Date: 2007-08-12 23:22+0300\n" "PO-Revision-Date: 2007-08-12 23:22+0300\n"
@@ -285,9 +285,6 @@ msgstr "kaksikanavainen"
msgid "mono" msgid "mono"
msgstr "mono" msgstr "mono"
msgid "MHz"
msgstr "MHz"
msgid "interlaced" msgid "interlaced"
msgstr "lomiteltu" msgstr "lomiteltu"
@@ -378,6 +375,9 @@ msgstr "dB"
msgid "not indicated" msgid "not indicated"
msgstr "ei ilmaistu" msgstr "ei ilmaistu"
msgid "MHz"
msgstr "MHz"
msgid "free" msgid "free"
msgstr "vapaa" msgstr "vapaa"

View File

@@ -5,7 +5,7 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: femon 1.6.5\n" "Project-Id-Version: femon 1.7.0\n"
"Report-Msgid-Bugs-To: Rolf Ahrenberg\n" "Report-Msgid-Bugs-To: Rolf Ahrenberg\n"
"POT-Creation-Date: 2008-12-16 12:08+0200\n" "POT-Creation-Date: 2008-12-16 12:08+0200\n"
"PO-Revision-Date: 2008-01-26 09:59+0100\n" "PO-Revision-Date: 2008-01-26 09:59+0100\n"
@@ -285,9 +285,6 @@ msgstr ""
msgid "mono" msgid "mono"
msgstr "" msgstr ""
msgid "MHz"
msgstr "MHz"
msgid "interlaced" msgid "interlaced"
msgstr "" msgstr ""
@@ -378,6 +375,9 @@ msgstr "dB"
msgid "not indicated" msgid "not indicated"
msgstr "non indiqu<71>" msgstr "non indiqu<71>"
msgid "MHz"
msgstr "MHz"
msgid "free" msgid "free"
msgstr "libre" msgstr "libre"

View File

@@ -6,7 +6,7 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: femon 1.6.5\n" "Project-Id-Version: femon 1.7.0\n"
"Report-Msgid-Bugs-To: Rolf Ahrenberg\n" "Report-Msgid-Bugs-To: Rolf Ahrenberg\n"
"POT-Creation-Date: 2008-12-16 12:08+0200\n" "POT-Creation-Date: 2008-12-16 12:08+0200\n"
"PO-Revision-Date: 2008-11-10 23:37+0100\n" "PO-Revision-Date: 2008-11-10 23:37+0100\n"
@@ -286,9 +286,6 @@ msgstr "dual"
msgid "mono" msgid "mono"
msgstr "mono" msgstr "mono"
msgid "MHz"
msgstr "MHz"
msgid "interlaced" msgid "interlaced"
msgstr "interlacciato" msgstr "interlacciato"
@@ -379,6 +376,9 @@ msgstr "dB"
msgid "not indicated" msgid "not indicated"
msgstr "non indicato" msgstr "non indicato"
msgid "MHz"
msgstr "MHz"
msgid "free" msgid "free"
msgstr "libero" msgstr "libero"

View File

@@ -5,7 +5,7 @@
# #
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: femon 1.6.5\n" "Project-Id-Version: femon 1.7.0\n"
"Report-Msgid-Bugs-To: Rolf Ahrenberg\n" "Report-Msgid-Bugs-To: Rolf Ahrenberg\n"
"POT-Creation-Date: 2008-12-16 12:08+0200\n" "POT-Creation-Date: 2008-12-16 12:08+0200\n"
"PO-Revision-Date: 2007-08-12 23:22+0300\n" "PO-Revision-Date: 2007-08-12 23:22+0300\n"
@@ -285,9 +285,6 @@ msgstr ""
msgid "mono" msgid "mono"
msgstr "" msgstr ""
msgid "MHz"
msgstr "<22><><EFBFBD>"
msgid "interlaced" msgid "interlaced"
msgstr "" msgstr ""
@@ -378,6 +375,9 @@ msgstr "dB"
msgid "not indicated" msgid "not indicated"
msgstr "" msgstr ""
msgid "MHz"
msgstr "<22><><EFBFBD>"
msgid "free" msgid "free"
msgstr "" msgstr ""