mirror of
https://github.com/PredatH0r/ChanSort.git
synced 2026-01-17 12:52:05 +01:00
- Philips: added support for ChannelMap_115 format
- Philips: ChannelMap formats 100-115 did not always fill "Source" and "Polarity" columns correctly - Philips: improved experimental support for Philips FLASH\_\*/\*.db file formats (read-only by default, can be enabled in Philips.ini for testing) - added Polish readme and updated translation (by JakubDriver)
This commit is contained in:
99
readme_pl.md
Normal file
99
readme_pl.md
Normal file
@@ -0,0 +1,99 @@
|
||||
Linki
|
||||
-----
|
||||
[](https://github.com/PredatH0r/ChanSort/blob/master/readme.md)
|
||||
[](https://github.com/PredatH0r/ChanSort/blob/master/readme_de.md)
|
||||
[](https://github.com/PredatH0r/ChanSort/blob/master/readme_tr-TR.md) |
|
||||
[Pobierz](https://github.com/PredatH0r/ChanSort/releases) |
|
||||
[Dokumentacja](https://github.com/PredatH0r/ChanSort/wiki) |
|
||||
[Forum](https://github.com/PredatH0r/ChanSort/issues) |
|
||||
[E-Mail](mailto:horst@beham.biz)
|
||||
|
||||
O ChanSort
|
||||
--------------
|
||||
ChanSort to aplikacja na komputery PC, która umożliwia zmianę kolejności listy kanałów w telewizorze.
|
||||
Większość nowoczesnych telewizorów może przesyłać listy kanałów za pomocą pamięci USB, którą można podłączyć do komputera.
|
||||
ChanSort obsługuje [formaty plików wielu marek] (#obsługiwane modele telewizorów) i może kopiować numery programów i
|
||||
ulubione z jednego pliku do drugiego, nawet między różnymi modelami i markami.
|
||||
|
||||

|
||||
|
||||
Cechy
|
||||
--------
|
||||
- Zmiana kolejności kanałów (bezpośrednia zmiana numerów, przesuwanie w górę/w dół, przeciąganie i upuszczanie, podwójne kliknięcie)
|
||||
- Użyj innej listy kanałów jako odniesienia, aby zastosować tę samą kolejność
|
||||
- Wielokrotny wybór do edycji wielu kanałów jednocześnie
|
||||
- Widok pojedynczej listy (pokazuje najpierw przypisane kanały, a następnie wszystkie nieprzypisane kanały)
|
||||
- Widok obok siebie nowej/posortowanej listy i oryginalnej/pełnej listy (podobny do listy odtwarzania i biblioteki)
|
||||
- Zmień nazwę lub usuń kanały
|
||||
- Zarządzaj ulubionymi, blokadą rodzicielską, pomijaniem kanałów (podczas zappingu), ukrywaniem kanałów
|
||||
- Interfejs użytkownika w języku angielskim, niemieckim, hiszpańskim, tureckim, portugalskim, rosyjskim i rumuńskim
|
||||
- Obsługa znaków Unicode dla nazw kanałów (łaciński, cyrylica, grecki, ...)
|
||||
|
||||
Nieobsługiwany:
|
||||
- dodawanie nowych transponderów lub kanałów
|
||||
- zmiana właściwości kanałów związanych z tunerem (ONID, TSID, SID, częstotliwość, APID, VPID, ...)
|
||||
|
||||
Niektóre funkcje mogą nie być dostępne we wszystkich modelach telewizorów i typach kanałów (analogowe, cyfrowe, satelitarne, kablowe, ...)
|
||||
|
||||
! UŻYWASZ NA WŁASNE RYZYKO!
|
||||
------------------------
|
||||
Większość tego oprogramowania została napisana bez wsparcia producentów telewizorów lub dostępu do jakiegokolwiek urzędnika
|
||||
dokumentacja dotycząca formatów plików. Opiera się wyłącznie na analizie istniejących plików danych, próbach i błędach.
|
||||
Istnieje prawdopodobieństwo wystąpienia niepożądanych skutków ubocznych lub nawet uszkodzenia telewizora, co odnotowano w 2 przypadkach.
|
||||
|
||||
Hisense jest jedynym producentem, który dostarczył informacje techniczne i urządzenie testowe.
|
||||
|
||||
Obsługiwane modele telewizorów
|
||||
-------------------
|
||||
ChanSort obsługuje dużą liczbę formatów plików, ale nie można określić dla każdej marki i modelu telewizora
|
||||
jaki format pliku używa (może się nawet zmienić wraz z aktualizacjami oprogramowania układowego).
|
||||
Ta lista zawiera kilka przykładów tego, co powinno być obsługiwane, ale nawet jeśli Twojego modelu lub marki nie ma na tej liście,
|
||||
to może i tak zadziałać:
|
||||
- [Samsung](source/fileformats.md#samsung)
|
||||
- [LG](source/fileformats.md#lg)
|
||||
- [Sony](source/fileformats.md#sony)
|
||||
- [Hisense](source/fileformats.md#hisense)
|
||||
- [Panasonic](source/fileformats.md#panasonic)
|
||||
- [Philips](source/fileformats.md#philips)
|
||||
- [Sharp, Dyon, Blaupunkt, Hisense, Changhong, Grundig, alphatronics, JTC Genesis, ...](source/fileformats.md#sharp)
|
||||
- [Toshiba](source/fileformats.md#toshiba)
|
||||
- [Grundig](source/fileformats.md#grundig)
|
||||
- [SatcoDX: ITT, Medion, Nabo, ok., PEAQ, Schaub-Lorenz, Silva-Schneider, Telefunken, ...](source/fileformats.md#satcodx)
|
||||
- [VDR](source/fileformats.md#vdr)
|
||||
- [SAT>IP m3u](source/fileformats.md#m3u)
|
||||
- [Enigma2](source/fileformats.md#enigma2)
|
||||
|
||||
Wymagania systemowe
|
||||
-------------------
|
||||
**Windows**:
|
||||
- Windows 7 SP1, Windows 8.1, Windows 10 v1606 or later, Windows 11 (with x86, x64 or ARM CPU)
|
||||
- [Microsoft .NET Framework 4.8](https://dotnet.microsoft.com/download/dotnet-framework)
|
||||
- The .NET FW 4.8 does NOT work with Windows 7 without SP1, Windows 8 or Windows 10 prior to v1606
|
||||
|
||||
**Linux**:
|
||||
- wino (sudo apt-get install wine)
|
||||
- winetricki (sudo apt-get install winetrics)
|
||||
- uruchom winetricki, wybierz lub utwórz prefiks wina (32-bitowy lub 64-bitowy), wybierz
|
||||
"Zainstaluj Windows DLL lub komponent" i zainstaluj pakiet "dotnet48" i zignoruj dziesiątki okienek komunikatów- right-click on ChanSort.exe and select "open with", "all applications", "A wine application"
|
||||
|
||||
**Sprzęt komputerowy**:
|
||||
- Pamięć USB/karta SD do przesyłania listy kanałów między telewizorem a komputerem. Pendrive <= 32 GB z systemem plików FAT32
|
||||
jest ZDECYDOWANIE zalecane. (Niektóre telewizory zapisują śmieci do NTFS i w ogóle nie obsługują exFAT)
|
||||
|
||||
Zbudowany na źródle
|
||||
-----------------
|
||||
See [build.md](source/build.md)
|
||||
|
||||
Licencja (GPLv3)
|
||||
---------------
|
||||
Powszechna Licencja Publiczna GNU, wersja 3: http://www.gnu.org/licenses/gpl.html
|
||||
Kod źródłowy jest dostępny na https://github.com/PredatH0r/ChanSort
|
||||
|
||||
OPROGRAMOWANIE JEST DOSTARCZANE „TAK JAK JEST”, BEZ JAKICHKOLWIEK GWARANCJI,
|
||||
WYRAŹNE LUB DOROZUMIANE, W TYM MIĘDZY INNYMI GWARANCJE
|
||||
SPRZEDAWALNOŚĆ, PRZYDATNOŚĆ DO OKREŚLONEGO CELU I NIENARUSZALNOŚCI.
|
||||
|
||||
W ŻADNYM WYPADKU AUTORZY NIE PONOSZĄ ODPOWIEDZIALNOŚCI ZA JAKIEKOLWIEK ROSZCZENIA, SZKODY LUB
|
||||
INNA ODPOWIEDZIALNOŚĆ UMOWA, CZYNOWA LUB W INNY SPOSÓB,
|
||||
WYNIKAJĄCE Z, Z LUB W ZWIĄZKU Z OPROGRAMOWANIEM LUB UŻYTKOWANIEM LUB
|
||||
INNE CZYNNOŚCI W OPROGRAMOWANIU.
|
||||
@@ -142,4 +142,29 @@ Starsze oprogramowanie LG dla modeli telewizorów opartych na webOS nie obsługu
|
||||
<data name="LG_BlindscanInfo_Cancel" xml:space="preserve">
|
||||
<value>Anuluj</value>
|
||||
</data>
|
||||
<data name="GcSerializer_ReadChannelLists_NoChannelsCap" xml:space="preserve">
|
||||
<value>Pusta lista</value>
|
||||
</data>
|
||||
<data name="GcSerializer_ReadChannelLists_NoChannelsMsg" xml:space="preserve">
|
||||
<value>Plik z listą kanałów nie zawiera kanałów.</value>
|
||||
</data>
|
||||
<data name="LG_BlindscanInfo" xml:space="preserve">
|
||||
<value>!!! UWAGA !!!
|
||||
|
||||
Listy kanałów LG można zaimportować z powrotem do telewizora TYLKO, jeśli podczas wyszukiwania kanałów w telewizorze wybrano specjalne opcje:
|
||||
- Dostawca: MUSI być żaden/inny (NIE wybieraj dostawcy telewizji kablowej ani Astry 19.2E)
|
||||
- Blindscan: MUSI być wybrany
|
||||
- Wyszukiwanie sieci: opcjonalne (można wybrać)
|
||||
|
||||
Telewizor nie przetworzy listy poprawnie, jeśli te kroki nie zostaną wykonane!</value>
|
||||
</data>
|
||||
<data name="LG_BlindscanInfo_OpenWebpage" xml:space="preserve">
|
||||
<value>Przeczytaj informacje o obsłudze webOS 5 na github.com</value>
|
||||
</data>
|
||||
<data name="LG_BlindscanInfo_Continue" xml:space="preserve">
|
||||
<value>Szukałem kanałów jak opisano powyżej</value>
|
||||
</data>
|
||||
<data name="LG_BlindscanInfo_Rejected" xml:space="preserve">
|
||||
<value>Proces ładowania został anulowany</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -17,94 +17,49 @@
|
||||
; ---------------------------------------------
|
||||
; mappings that are the same for all format variants
|
||||
|
||||
[flash_db]
|
||||
reorderRecordsByChannelNumber=true
|
||||
allowEdit=false
|
||||
|
||||
[mgr_chan_s_fta.db]
|
||||
lenHeader=64
|
||||
lenFooter=12
|
||||
offFooterChecksum=8
|
||||
reorderRecordsByChannelNumber=false
|
||||
allowEdit=false
|
||||
; field mappings needed to calculate variable channel record length: blockSize / (tvChannels + radioChannels)
|
||||
numTvChannels=0x2C
|
||||
numRadioChannels=0x30
|
||||
channelBlockSize=0x3C
|
||||
|
||||
[mgr_chan_s_fta.db_entry]
|
||||
offProgNr=0
|
||||
offFav=16
|
||||
offName=20
|
||||
lenName=200
|
||||
offFreq=444,468
|
||||
offSymbolRate=450
|
||||
offOldProgNr=452
|
||||
offRecordIndex=456
|
||||
offTsid=460
|
||||
offSid=464
|
||||
offOnid=466
|
||||
|
||||
[mgr_chan_s_pkg.db]
|
||||
lenHeader=64
|
||||
lenFooter=12
|
||||
offFooterChecksum=8
|
||||
reorderRecordsByChannelNumber=false
|
||||
allowEdit=false
|
||||
; field mappings needed to calculate variable channel record length: blockSize / (tvChannels+radioChannels)
|
||||
numTvChannels=0x2C
|
||||
numRadioChannels=0x30
|
||||
channelBlockSize=0x3C
|
||||
|
||||
[mgr_chan_s_pkg.db_entry]
|
||||
offProgNr=0
|
||||
offFav=16
|
||||
offName=20
|
||||
lenName=200
|
||||
offFreq=444,468
|
||||
offSymbolRate=450
|
||||
offOldProgNr=452
|
||||
offRecordIndex=456
|
||||
offTsid=460
|
||||
offSid=464
|
||||
offOnid=466
|
||||
|
||||
[mgr_chan_dvbt.db]
|
||||
lenHeader=64
|
||||
lenEntry=472
|
||||
lenFooter=12
|
||||
offFooterChecksum=8
|
||||
reorderRecordsByChannelNumber=false
|
||||
allowEdit=false
|
||||
; field mappings needed to calculate variable channel record length: blockSize / (tvChannels + radioChannels)
|
||||
numTvChannels=0x2C
|
||||
numRadioChannels=0x30
|
||||
channelBlockSize=0x3C
|
||||
|
||||
[mgr_chan_dvbt.db_entry]
|
||||
offProgNr=0
|
||||
offFav=16
|
||||
offName=20
|
||||
lenName=200
|
||||
offProvider=224
|
||||
lenProvider=200
|
||||
offFreq=440
|
||||
offOldProgNr=448
|
||||
offRecordIndex=456
|
||||
offTsid=460
|
||||
offSymbolRate=462
|
||||
offSid=464
|
||||
offOnid=466
|
||||
|
||||
[mgr_chan_dvbc.db]
|
||||
lenHeader=64
|
||||
lenEntry=472
|
||||
lenFooter=12
|
||||
offFooterChecksum=8
|
||||
reorderRecordsByChannelNumber=false
|
||||
allowEdit=false
|
||||
; field mappings needed to calculate variable channel record length: blockSize / (tvChannels + radioChannels)
|
||||
numTvChannels=0x2C
|
||||
numRadioChannels=0x30
|
||||
channelBlockSize=0x3C
|
||||
|
||||
[mgr_chan_dvbc.db_entry]
|
||||
[mgr.db_entry:472]
|
||||
offProgNr=0
|
||||
offFav=16
|
||||
offName=20
|
||||
@@ -119,6 +74,33 @@ offSymbolRate=462
|
||||
offSid=464
|
||||
offOnid=466
|
||||
|
||||
[mgr.db_entry:476]
|
||||
offProgNr=0
|
||||
offFav=16
|
||||
offName=20
|
||||
lenName=200
|
||||
offFreq=444,468
|
||||
offSymbolRate=450
|
||||
offOldProgNr=452
|
||||
offRecordIndex=456
|
||||
offTsid=460
|
||||
offSid=464
|
||||
offOnid=466
|
||||
|
||||
[mgr.db_entry:480]
|
||||
offProgNr=0
|
||||
offFav=16
|
||||
offName=20
|
||||
lenName=200
|
||||
offFreq=444,468
|
||||
offSymbolRate=450
|
||||
offOldProgNr=452
|
||||
offRecordIndex=456
|
||||
offTsid=460
|
||||
offSid=464
|
||||
offOnid=466
|
||||
|
||||
|
||||
; ---------------------------------------------
|
||||
; variant with 476 bytes per entry in mgr_chan_s_fta.db
|
||||
|
||||
|
||||
@@ -38,12 +38,13 @@ namespace ChanSort.Loader.Philips
|
||||
private readonly ChannelList dvbcChannels = new ChannelList(SignalSource.DvbT, "DVB-C");
|
||||
private readonly ChannelList dvbsFtaChannels = new ChannelList(SignalSource.DvbS | SignalSource.Provider0, "DVB-S FTA");
|
||||
private readonly ChannelList dvbsPkgChannels = new ChannelList(SignalSource.DvbS | SignalSource.Provider1, "DVB-S Preset");
|
||||
private readonly Dictionary<ChannelList, string> dbFileByList = new();
|
||||
private readonly Dictionary<ChannelList, Tuple<string, int>> dbFileByList = new();
|
||||
private readonly Dictionary<ChannelList, Tuple<string, int>> flashFileByList = new();
|
||||
private int dvbtChannelRecordLength;
|
||||
private int dvbcChannelRecordLength;
|
||||
private int ftaChannelRecordLength;
|
||||
private int pkgChannelRecordLength;
|
||||
private readonly bool reorderPhysically;
|
||||
|
||||
|
||||
#region ctor()
|
||||
@@ -57,6 +58,10 @@ namespace ChanSort.Loader.Philips
|
||||
string iniFile = Assembly.GetExecutingAssembly().Location.Replace(".dll", ".ini");
|
||||
this.ini = new IniFile(iniFile);
|
||||
|
||||
var sec = ini.GetSection("flash_db");
|
||||
this.reorderPhysically = sec.GetBool("reorderRecordsByChannelNumber", true);
|
||||
var allowEdit = sec.GetBool("allowEdit", false);
|
||||
|
||||
this.DataRoot.AddChannelList(dvbtChannels);
|
||||
this.DataRoot.AddChannelList(dvbcChannels);
|
||||
this.DataRoot.AddChannelList(dvbsFtaChannels);
|
||||
@@ -82,6 +87,7 @@ namespace ChanSort.Loader.Philips
|
||||
nameof(ChannelInfo.AudioPid),
|
||||
nameof(ChannelInfo.ServiceTypeName)
|
||||
};
|
||||
list.ReadOnly = !allowEdit;
|
||||
}
|
||||
}
|
||||
#endregion
|
||||
@@ -132,7 +138,7 @@ namespace ChanSort.Loader.Philips
|
||||
LoadFlash(file, lowercaseFileName, dvbsFtaChannels, ftaChannelRecordLength);
|
||||
break;
|
||||
case "flash_dtvinfo_s_pkg":
|
||||
if (!(dvbsFtaChannels.Count == 0 && dvbsPkgChannels.Count > 0))
|
||||
if (dvbsPkgChannels.Count > 0)
|
||||
LoadFlash(file, lowercaseFileName, dvbsPkgChannels, pkgChannelRecordLength);
|
||||
break;
|
||||
}
|
||||
@@ -203,11 +209,9 @@ namespace ChanSort.Loader.Philips
|
||||
throw new FileLoadException($"File {path} contains invalid checksum. Expected {expectedChecksum:x4} but calculated {actualChecksum:x4}");
|
||||
|
||||
channelRecordLength = lenEntry;
|
||||
|
||||
list.ReadOnly = !sec.GetBool("allowEdit");
|
||||
|
||||
var mapping = new DataMapping(this.ini.GetSection(sectionName + "_entry"));
|
||||
sec = ini.GetSection("mgr_chan_s_fta.db_entry");
|
||||
|
||||
sec = this.ini.GetSection("mgr.db_entry:" + channelRecordLength);
|
||||
var mapping = new DataMapping(sec);
|
||||
var lenName = sec.GetInt("lenName");
|
||||
for (int i = 0; i < records; i++)
|
||||
{
|
||||
@@ -236,7 +240,7 @@ namespace ChanSort.Loader.Philips
|
||||
this.DataRoot.AddChannel(list, ch);
|
||||
}
|
||||
|
||||
this.dbFileByList[list] = path;
|
||||
this.dbFileByList[list] = Tuple.Create(path, channelRecordLength);
|
||||
}
|
||||
#endregion
|
||||
|
||||
@@ -459,7 +463,7 @@ namespace ChanSort.Loader.Philips
|
||||
}
|
||||
#endregion
|
||||
|
||||
public override IEnumerable<string> GetDataFilePaths() => this.dbFileByList.Values.Union(this.flashFileByList.Values.Select(tup => tup.Item1));
|
||||
public override IEnumerable<string> GetDataFilePaths() => this.dbFileByList.Values.Union(this.flashFileByList.Values).Select(tup => tup.Item1);
|
||||
|
||||
#region Save()
|
||||
public override void Save(string tvOutputFile)
|
||||
@@ -468,9 +472,10 @@ namespace ChanSort.Loader.Philips
|
||||
foreach (var listAndFile in this.dbFileByList)
|
||||
{
|
||||
var list = listAndFile.Key;
|
||||
var file = listAndFile.Value;
|
||||
var file = listAndFile.Value.Item1;
|
||||
var lenEntry = listAndFile.Value.Item2;
|
||||
var secName = Path.GetFileName(file).ToLowerInvariant();
|
||||
SaveDvb(file, secName, list);
|
||||
SaveDvb(file, secName, list, lenEntry);
|
||||
}
|
||||
|
||||
// update FLASH_* files
|
||||
@@ -486,30 +491,56 @@ namespace ChanSort.Loader.Philips
|
||||
#endregion
|
||||
|
||||
#region SaveDvb()
|
||||
private void SaveDvb(string file, string secName, ChannelList list)
|
||||
private void SaveDvb(string file, string secName, ChannelList list, int channelRecordLength)
|
||||
{
|
||||
var data = File.ReadAllBytes(file);
|
||||
var oldData = File.ReadAllBytes(file);
|
||||
|
||||
var sec = ini.GetSection(secName);
|
||||
if (!GetValuesFromDvbFileHeader(sec, data, out var lenHeader, out var lenEntry, out _, out var offChecksum))
|
||||
if (!GetValuesFromDvbFileHeader(sec, oldData, out var lenHeader, out var lenEntry, out _, out var offChecksum))
|
||||
return;
|
||||
|
||||
var mapping = new DataMapping(ini.GetSection(secName + "_entry"));
|
||||
foreach (var chan in list.Channels)
|
||||
var newData = new byte[oldData.Length];
|
||||
Array.Copy(oldData, newData, oldData.Length);
|
||||
|
||||
var mapping = new DataMapping(ini.GetSection("mgr.db_entry:" + channelRecordLength));
|
||||
|
||||
if (this.reorderPhysically)
|
||||
{
|
||||
if (chan is not Channel ch)
|
||||
continue;
|
||||
mapping.SetDataPtr(data, lenHeader + (int)ch.RecordIndex * lenEntry);
|
||||
mapping.SetWord("offProgNr", ch.NewProgramNr);
|
||||
mapping.SetWord("offFav", Math.Max(0, ch.GetPosition(1)));
|
||||
int newIndex = 0;
|
||||
foreach (var chan in list.Channels.OrderBy(c => c.NewProgramNr).ThenBy(c => c.RecordIndex))
|
||||
{
|
||||
if (chan is not Channel ch)
|
||||
continue;
|
||||
var newOff = lenHeader + newIndex * lenEntry;
|
||||
Array.Copy(oldData, lenHeader + (int)ch.RecordIndex * lenEntry, newData, newOff, lenEntry);
|
||||
mapping.SetDataPtr(newData, newOff);
|
||||
mapping.SetWord("offProgNr", ch.NewProgramNr);
|
||||
mapping.SetWord("offFav", Math.Max(0, ch.GetPosition(1)));
|
||||
mapping.SetWord("offOldProgNr", ch.NewProgramNr);
|
||||
mapping.SetWord("offRecordIndex", newIndex);
|
||||
//ch.RecordIndex = newIndex; // will be updated when saving the FLASH file
|
||||
++newIndex;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
foreach (var chan in list.Channels.OrderBy(c => c.NewProgramNr).ThenBy(c => c.RecordIndex))
|
||||
{
|
||||
if (chan is not Channel ch)
|
||||
continue;
|
||||
var newOff = lenHeader + (int)ch.RecordIndex * lenEntry;
|
||||
mapping.SetDataPtr(newData, newOff);
|
||||
mapping.SetWord("offProgNr", ch.NewProgramNr);
|
||||
mapping.SetWord("offFav", Math.Max(0, ch.GetPosition(1)));
|
||||
}
|
||||
}
|
||||
|
||||
// update checksum (only 16 bits are stored)
|
||||
var checksum = CalcChecksum(data, 0, offChecksum);
|
||||
data[offChecksum + 0] = (byte)checksum;
|
||||
data[offChecksum + 1] = (byte)(checksum >> 8);
|
||||
var checksum = CalcChecksum(newData, 0, offChecksum);
|
||||
newData[offChecksum + 0] = (byte)checksum;
|
||||
newData[offChecksum + 1] = (byte)(checksum >> 8);
|
||||
|
||||
File.WriteAllBytes(file, data);
|
||||
File.WriteAllBytes(file, newData);
|
||||
}
|
||||
#endregion
|
||||
|
||||
@@ -523,6 +554,23 @@ namespace ChanSort.Loader.Philips
|
||||
var sec = ini.GetSection(secName + ":" + dbChannelRecordLength, true);
|
||||
var mapping = new DataMapping(sec, data);
|
||||
|
||||
// update channel index->id mapping table to match the indices in the new .db file, which is in order by the new ProgNr
|
||||
if (this.reorderPhysically)
|
||||
{
|
||||
var off = sec.GetInt("offChannelTransponderTable");
|
||||
var num = sec.GetInt("numChannelTransponderTable");
|
||||
var oldTable = new byte[num * 4];
|
||||
Array.Copy(data, off, oldTable, 0, oldTable.Length);
|
||||
int i = 0;
|
||||
foreach (var chan in list.Channels.OrderBy(c => c.NewProgramNr).ThenBy(c => c.RecordIndex))
|
||||
{
|
||||
if (chan is not Channel ch)
|
||||
continue;
|
||||
Array.Copy(oldTable, (int)ch.RecordIndex * 4, data, off + i * 4, 4);
|
||||
ch.RecordIndex = i++;
|
||||
}
|
||||
}
|
||||
|
||||
// in-place update of channel data
|
||||
foreach (var chan in list.Channels)
|
||||
{
|
||||
|
||||
@@ -72,8 +72,10 @@ namespace ChanSort.Loader.Philips
|
||||
* same as 105.0
|
||||
* e.g. 65PUS8535/12, 55PUS7334/12
|
||||
*
|
||||
* version 115.0
|
||||
* same as 110.0
|
||||
*
|
||||
* Version 0.1 and 100-110 are XML based and loaded through the XmlSerializer.
|
||||
* Version 0.1 and 100-115 are XML based and loaded through the XmlSerializer.
|
||||
* Version 1.1 and 1.2 are loaded through the BinSerializer.
|
||||
* Version 0.0, 11.1 and 45.1 are not supported yet.
|
||||
*/
|
||||
@@ -129,7 +131,7 @@ namespace ChanSort.Loader.Philips
|
||||
}
|
||||
}
|
||||
|
||||
if (majorVersion == 0 || majorVersion >= 100 && majorVersion <= 110)
|
||||
if (majorVersion == 0 || majorVersion >= 100 && majorVersion <= 115)
|
||||
return new XmlSerializer(inputFile);
|
||||
if (majorVersion == 1 || majorVersion == 30 || majorVersion == 45) // || majorVersion == 11 // format version 11 is similar to 1.x, but not (yet) supported
|
||||
return new BinarySerializer(inputFile);
|
||||
|
||||
@@ -120,4 +120,26 @@
|
||||
<data name="Cancel" xml:space="preserve">
|
||||
<value>Anuluj</value>
|
||||
</data>
|
||||
<data name="InfoIgnoreImportError" xml:space="preserve">
|
||||
<value>Telewizor może niepoprawnie pokazywać, że import się nie powiódł, ale można to zignorować.</value>
|
||||
</data>
|
||||
<data name="InfoRestartAfterImport" xml:space="preserve">
|
||||
<value>INFORMACJE: Po zaimportowaniu listy z powrotem do telewizora odłącz go i podłącz ponownie po kilku sekundach.</value>
|
||||
</data>
|
||||
<data name="WarningChecksumErrorMsg" xml:space="preserve">
|
||||
<value>OSTRZEŻENIE: W załadowanej liście wystąpiły błędy sum kontrolnych!
|
||||
|
||||
Istnieją 2 sytuacje, w których może się to zdarzyć:
|
||||
|
||||
- Wewnętrzna lista kanałów telewizora jest uszkodzona (np. po aktualizacji oprogramowania)
|
||||
Można to rozwiązać, uruchamiając nowe skanowanie kanałów lub resetując telewizor.
|
||||
Następnie ponownie wyeksportuj listę i otwórz ją za pomocą ChanSort.
|
||||
Próba edycji i importu aktualnie uszkodzonego pliku może prowadzić do nieoczekiwanego zachowania telewizora.
|
||||
|
||||
- Bad USB-Stick (złe komórki pamięci lub niezgodny format pliku)
|
||||
Spróbuj użyć pendrive'a <= 16 GB sformatowanego w systemie FAT32 (nie NTFS ani exFAT)</value>
|
||||
</data>
|
||||
<data name="WarningChechsumErrorIgnore" xml:space="preserve">
|
||||
<value>Zignoruj błąd i mimo to edytuj listę</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -41,8 +41,8 @@ namespace ChanSort.Loader.Philips
|
||||
Nevertheless a user reported that swapping DVB-S channels 1 and 2 with Onka on a TV that uses this xml-only format 110 worked for him.
|
||||
|
||||
There seem to be 3 different flavors or the "100" format:
|
||||
One has only .xml files in the channellib and s2channellib folders, does not indent lines in the .xml files, has a fixed number of bytes for channel and satellite names (padded with 0x00) and has no "Scramble" attribute.
|
||||
And a version that has dtv_cmdb_*.bin next to the .xml files, uses 4 spaces for indentation, only writes as many bytes for names as needed and has a "Scramble" attribute.
|
||||
One has only .xml files in the channellib and s2channellib folders, does not indent lines in the .xml files, has a fixed number of bytes for channel and satellite names (padded with 0x00), has no "Scramble" attribute and values 1 and 0 for "Polarization".
|
||||
And a version that has dtv_cmdb_*.bin next to the .xml files, uses 4 spaces for indentation, only writes as many bytes for names as needed, has a "Scramble" attribute and uses values 1 and 2 for "Polarization".
|
||||
While the first seems to work fine when XML nodes are reordered by their new programNr, the latter seems to get confused when the .bin and .xml files have different data record orders. This is still under investigation.
|
||||
The Philips editor does not modify these .bin files, appends 0x00 padding to the channel names, changes indentation to 2 tabs and strips the Scramble attribute. It's likely it wasn't designed for this type of list.
|
||||
|
||||
@@ -89,7 +89,7 @@ namespace ChanSort.Loader.Philips
|
||||
private readonly StringBuilder logMessages = new StringBuilder();
|
||||
private readonly IniFile ini;
|
||||
private IniFile.Section iniMapSection;
|
||||
|
||||
private string polarizationValueForHorizontal = "1";
|
||||
|
||||
#region ctor()
|
||||
public XmlSerializer(string inputFile) : base(inputFile)
|
||||
@@ -381,6 +381,7 @@ namespace ChanSort.Loader.Philips
|
||||
{
|
||||
this.iniMapSection = ini.GetSection("Map100_cmdb.bin");
|
||||
this.FileFormatVersion += "/cmdb";
|
||||
this.polarizationValueForHorizontal = "1"; // TODO validate
|
||||
}
|
||||
else if (File.Exists(Path.Combine(dir, "channelFile.bin")))
|
||||
{
|
||||
@@ -477,17 +478,13 @@ namespace ChanSort.Loader.Philips
|
||||
else
|
||||
chan.SignalSource |= SignalSource.Radio;
|
||||
|
||||
var decoderType = data.TryGet("DecoderType");
|
||||
if (decoderType == "1")
|
||||
chan.Source = "DVB-T";
|
||||
else if (decoderType == "2")
|
||||
chan.Source = "DVB-C";
|
||||
chan.Source = (chan.SignalSource & SignalSource.Sat) != 0 ? "DVB-S" : (chan.SignalSource & SignalSource.Cable) != 0 ? "DVB-C" : (chan.SignalSource & SignalSource.Antenna) != 0 ? "DVB-T" : "";
|
||||
chan.SignalSource |= LookupData.Instance.IsRadioTvOrData(chan.ServiceType);
|
||||
chan.SymbolRate = ParseInt(data.TryGet("SymbolRate"));
|
||||
if (chan.SymbolRate > 100000) // DVB-S stores values in kSym, DVB-C stores it in Sym, DVB-T stores 0
|
||||
chan.SymbolRate /= 1000;
|
||||
if (data.TryGetValue("Polarization", out var pol))
|
||||
chan.Polarity = pol == "0" ? 'H' : 'V';
|
||||
chan.Polarity = pol == polarizationValueForHorizontal ? 'H' : 'V';
|
||||
chan.Hidden |= data.TryGet("SystemHidden") == "1";
|
||||
|
||||
chan.Encrypted = data.TryGet("Scramble") == "1" || data.TryGet("Scrambled") == "1"; // v100 sometimes contains a "Scramble", v105/v110 always contain "Scrambled"
|
||||
|
||||
@@ -15,11 +15,11 @@ namespace ChanSort.Ui
|
||||
@"
|
||||
Ciprian Leca: Romanian translation
|
||||
Istvan Krisko: Hungarian translation
|
||||
Jakub Driver: Polish translation
|
||||
JakubDriver: Polish translation
|
||||
Marco Sánchez: Spanish Translation
|
||||
Pavel Mizera: Czech translation
|
||||
Vitor Martins Augusto: Portuguese translation
|
||||
Yaşar Tuna Zorlu: Turkish Translation
|
||||
umitseyhan75, Yaşar Tuna Zorlu: Turkish Translation
|
||||
|
||||
TCr82 (Github): Support for VDR's channels.conf file format
|
||||
";
|
||||
|
||||
@@ -127,10 +127,10 @@
|
||||
<value>Licencja:</value>
|
||||
</data>
|
||||
<data name="lblCredits.Text" xml:space="preserve">
|
||||
<value>Kredyty:</value>
|
||||
<value>Dziękuję:</value>
|
||||
</data>
|
||||
<data name="btnClose.Text" xml:space="preserve">
|
||||
<value>Blisko</value>
|
||||
<value>Zamknij</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>O ChanSort</value>
|
||||
|
||||
@@ -124,7 +124,7 @@
|
||||
<value>Domyślny zestaw znaków dla mojego kraju</value>
|
||||
</data>
|
||||
<data name="btnOk.Text" xml:space="preserve">
|
||||
<value>Dobrze</value>
|
||||
<value>Ok</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Zestaw znaków</value>
|
||||
|
||||
@@ -672,6 +672,7 @@ namespace ChanSort.Ui
|
||||
if (this.DataRoot.ChannelLists.All(l => l.Count == 0 || l.ReadOnly))
|
||||
{
|
||||
this.DataRoot.ApplyCurrentProgramNumbers(); // otherwise there wouldn't be any numbers in single pane view
|
||||
this.RefreshGrids();
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
@@ -570,9 +570,6 @@
|
||||
<data name="mnuHelp.Caption" xml:space="preserve">
|
||||
<value>&Nápověda</value>
|
||||
</data>
|
||||
<data name="mnuInputSource.Caption" xml:space="preserve">
|
||||
<value>mnuInputSource</value>
|
||||
</data>
|
||||
<data name="mnuOptions.Caption" xml:space="preserve">
|
||||
<value>&Nastavení</value>
|
||||
</data>
|
||||
|
||||
@@ -276,9 +276,6 @@
|
||||
<data name="miCharsetForm.Caption" xml:space="preserve">
|
||||
<value>Todos los sets de caracteres</value>
|
||||
</data>
|
||||
<data name="miUtf8Charset.Caption" xml:space="preserve">
|
||||
<value>UTF-8 (Unicode)</value>
|
||||
</data>
|
||||
<data name="miIsoCharSets.Caption" xml:space="preserve">
|
||||
<value>Set de caracteres ISO</value>
|
||||
</data>
|
||||
@@ -309,9 +306,6 @@
|
||||
<data name="mnuGotoChannelList.Caption" xml:space="preserve">
|
||||
<value>Seleccionar fuente de entrada</value>
|
||||
</data>
|
||||
<data name="mnuInputSource.Caption" xml:space="preserve">
|
||||
<value>mnuInputSource</value>
|
||||
</data>
|
||||
<data name="mnuGotoFavList.AccessibleDescription" xml:space="preserve">
|
||||
<value>Abre un submenú para la selección de la lista de programas o favoritos. Este menú puede ser activado directamente con las teclas Mayus+F1</value>
|
||||
</data>
|
||||
|
||||
@@ -285,9 +285,6 @@
|
||||
<data name="miCharsetForm.Caption" xml:space="preserve">
|
||||
<value>Az &összes karakter készlet...</value>
|
||||
</data>
|
||||
<data name="miUtf8Charset.Caption" xml:space="preserve">
|
||||
<value>UTF-8 (Unicode)</value>
|
||||
</data>
|
||||
<data name="miIsoCharSets.Caption" xml:space="preserve">
|
||||
<value>ISO karakter készlet</value>
|
||||
</data>
|
||||
@@ -318,9 +315,6 @@
|
||||
<data name="mnuGotoChannelList.Caption" xml:space="preserve">
|
||||
<value>Beviteli &forrás kiválasztása</value>
|
||||
</data>
|
||||
<data name="mnuInputSource.Caption" xml:space="preserve">
|
||||
<value>mnuInputSource</value>
|
||||
</data>
|
||||
<data name="mnuGotoFavList.AccessibleDescription" xml:space="preserve">
|
||||
<value>Megnyit egy almenüt a kedvencek listájának kiválasztásához. Ez a menü közvetlenül aktiválható a Shift+F1 gombbal</value>
|
||||
</data>
|
||||
@@ -672,9 +666,6 @@
|
||||
<data name="miSplitView.Caption" xml:space="preserve">
|
||||
<value>Osztott nézet</value>
|
||||
</data>
|
||||
<data name="mnuLanguage.Caption" xml:space="preserve">
|
||||
<value>&Nyelv</value>
|
||||
</data>
|
||||
<data name="miResetAndRestart.Caption" xml:space="preserve">
|
||||
<value>Alaphelyzetbe állítás és újraindítás</value>
|
||||
</data>
|
||||
|
||||
@@ -133,16 +133,16 @@
|
||||
<value>Ulubione</value>
|
||||
</data>
|
||||
<data name="colOutLock.Caption" xml:space="preserve">
|
||||
<value>Zablokować</value>
|
||||
<value>Zablokowane</value>
|
||||
</data>
|
||||
<data name="colOutLock.ToolTip" xml:space="preserve">
|
||||
<value>Blokada rodzicielska</value>
|
||||
</data>
|
||||
<data name="colOutSkip.Caption" xml:space="preserve">
|
||||
<value>Pominąć</value>
|
||||
<value>Pominięte</value>
|
||||
</data>
|
||||
<data name="colOutHide.Caption" xml:space="preserve">
|
||||
<value>Ukryć</value>
|
||||
<value>Ukryte</value>
|
||||
</data>
|
||||
<data name="colOutDeleted.Caption" xml:space="preserve">
|
||||
<value>Usunięte</value>
|
||||
@@ -166,7 +166,7 @@
|
||||
<value>Pr#</value>
|
||||
</data>
|
||||
<data name="grpSubList.Text" xml:space="preserve">
|
||||
<value>Sub List</value>
|
||||
<value>Lista podrzędna</value>
|
||||
</data>
|
||||
<data name="miFile.Caption" xml:space="preserve">
|
||||
<value>&Plik</value>
|
||||
@@ -175,22 +175,22 @@
|
||||
<value>&Otwórz plik danych TV...</value>
|
||||
</data>
|
||||
<data name="miReload.Caption" xml:space="preserve">
|
||||
<value>&Przeładować</value>
|
||||
<value>&Przeładuj</value>
|
||||
</data>
|
||||
<data name="miRestoreOriginal.Caption" xml:space="preserve">
|
||||
<value>Przywracania kopii zapasowej</value>
|
||||
<value>Przywracanie kopii zapasowej</value>
|
||||
</data>
|
||||
<data name="miFileInformation.Caption" xml:space="preserve">
|
||||
<value>Plik &informacje...</value>
|
||||
</data>
|
||||
<data name="miSave.Caption" xml:space="preserve">
|
||||
<value>&Zapisać</value>
|
||||
<value>&Zapisz</value>
|
||||
</data>
|
||||
<data name="miSaveAs.Caption" xml:space="preserve">
|
||||
<value>Zapisz &jako...</value>
|
||||
</data>
|
||||
<data name="miOpenReferenceFile.Caption" xml:space="preserve">
|
||||
<value>Złóż zamówienie z listy referencyjnej ...</value>
|
||||
<value>Przyjmij zamówienie z szablonu…</value>
|
||||
</data>
|
||||
<data name="miAddFromRefList.Caption" xml:space="preserve">
|
||||
<value>Dodaj kanały z listy referencyjnej ...</value>
|
||||
@@ -202,16 +202,16 @@
|
||||
<value>Eksportuj listę do Excela ...</value>
|
||||
</data>
|
||||
<data name="miPrint.Caption" xml:space="preserve">
|
||||
<value>&Wydrukować...</value>
|
||||
<value>&Wydrukuj...</value>
|
||||
</data>
|
||||
<data name="miQuit.Caption" xml:space="preserve">
|
||||
<value>&Porzucić</value>
|
||||
<value>&Porzuć</value>
|
||||
</data>
|
||||
<data name="miRecentFiles.Caption" xml:space="preserve">
|
||||
<value>Ostatnie pliki</value>
|
||||
</data>
|
||||
<data name="miEdit.Caption" xml:space="preserve">
|
||||
<value>&Edytować</value>
|
||||
<value>&Edytuj</value>
|
||||
</data>
|
||||
<data name="miAddChannel.Caption" xml:space="preserve">
|
||||
<value>&Dodaj kanały</value>
|
||||
@@ -268,7 +268,7 @@
|
||||
<value>Ustawienie urządzenia...</value>
|
||||
</data>
|
||||
<data name="miCleanupChannels.Caption" xml:space="preserve">
|
||||
<value>Dane kanału oczyszczania</value>
|
||||
<value>Czyszczenie danych kanału</value>
|
||||
</data>
|
||||
<data name="miCleanupChannels.Hint" xml:space="preserve">
|
||||
<value>Reorganizuj rekordy kanału i usuwaj duplikaty</value>
|
||||
@@ -283,10 +283,7 @@
|
||||
<value>&Zestaw znaków</value>
|
||||
</data>
|
||||
<data name="miCharsetForm.Caption" xml:space="preserve">
|
||||
<value>Wszystkie i zestawy znaków ...</value>
|
||||
</data>
|
||||
<data name="miUtf8Charset.Caption" xml:space="preserve">
|
||||
<value>UTF-8 (Unicode)</value>
|
||||
<value>Wszystkie zestawy znaków...</value>
|
||||
</data>
|
||||
<data name="miIsoCharSets.Caption" xml:space="preserve">
|
||||
<value>Zestawy znaków ISO</value>
|
||||
@@ -310,7 +307,7 @@
|
||||
<value>Sprawdź aktualizacje</value>
|
||||
</data>
|
||||
<data name="mnuAccessibility.Caption" xml:space="preserve">
|
||||
<value>&Dostępność</value>
|
||||
<value>&Łatwość dostępu</value>
|
||||
</data>
|
||||
<data name="mnuGotoChannelList.AccessibleDescription" xml:space="preserve">
|
||||
<value>Otwiera podmenu wyboru źródła wejściowego. To menu można aktywować bezpośrednio przyciskiem F1</value>
|
||||
@@ -318,9 +315,6 @@
|
||||
<data name="mnuGotoChannelList.Caption" xml:space="preserve">
|
||||
<value>Wybierz i wprowadź źródło</value>
|
||||
</data>
|
||||
<data name="mnuInputSource.Caption" xml:space="preserve">
|
||||
<value>mnuInputSource</value>
|
||||
</data>
|
||||
<data name="mnuGotoFavList.AccessibleDescription" xml:space="preserve">
|
||||
<value>Otwiera podmenu dla programu wyboru listy ulubionych. To menu można aktywować bezpośrednio za pomocą klawiszy Shift + F1</value>
|
||||
</data>
|
||||
@@ -364,7 +358,7 @@
|
||||
<value>&Wsparcie</value>
|
||||
</data>
|
||||
<data name="miWiki.Caption" xml:space="preserve">
|
||||
<value>Wiki</value>
|
||||
<value>github.com</value>
|
||||
</data>
|
||||
<data name="miOpenWebsite.Caption" xml:space="preserve">
|
||||
<value>Strona internetowa ChanSort...</value>
|
||||
@@ -373,7 +367,7 @@
|
||||
<value>&O ChanSort...</value>
|
||||
</data>
|
||||
<data name="bar1.Text" xml:space="preserve">
|
||||
<value>Przybory</value>
|
||||
<value>Narzędzia</value>
|
||||
</data>
|
||||
<data name="miMoveUp.Caption" xml:space="preserve">
|
||||
<value>Przejdź w górę</value>
|
||||
@@ -532,13 +526,13 @@
|
||||
<value>Ulubione</value>
|
||||
</data>
|
||||
<data name="colLock.Caption" xml:space="preserve">
|
||||
<value>Zablokowany</value>
|
||||
<value>Zablokowane</value>
|
||||
</data>
|
||||
<data name="colSkip.Caption" xml:space="preserve">
|
||||
<value>Pominąć</value>
|
||||
<value>Pominięte</value>
|
||||
</data>
|
||||
<data name="colHidden.Caption" xml:space="preserve">
|
||||
<value>Ukryć</value>
|
||||
<value>Ukryte</value>
|
||||
</data>
|
||||
<data name="colDeleted.Caption" xml:space="preserve">
|
||||
<value>Usunięte</value>
|
||||
@@ -547,7 +541,7 @@
|
||||
<value>Szyfrowane</value>
|
||||
</data>
|
||||
<data name="colEncrypted.ToolTip" xml:space="preserve">
|
||||
<value>Szyfrowane</value>
|
||||
<value>Zaszyfrowane</value>
|
||||
</data>
|
||||
<data name="colServiceType.Caption" xml:space="preserve">
|
||||
<value>Identyfikator typu usługi</value>
|
||||
@@ -610,7 +604,7 @@
|
||||
<value>Uid</value>
|
||||
</data>
|
||||
<data name="colLogicalIndex.Caption" xml:space="preserve">
|
||||
<value>Zamówienie</value>
|
||||
<value>Zamówione</value>
|
||||
</data>
|
||||
<data name="colSignalSource.Caption" xml:space="preserve">
|
||||
<value>Źródło sygnału</value>
|
||||
@@ -658,12 +652,39 @@
|
||||
<value>Oryginalne kanały</value>
|
||||
</data>
|
||||
<data name="splitContainerControl1.Panel2.Text" xml:space="preserve">
|
||||
<value>Panel 2</value>
|
||||
<value>Panel2</value>
|
||||
</data>
|
||||
<data name="splitContainerControl1.Text" xml:space="preserve">
|
||||
<value>splitContainerControl1</value>
|
||||
<value>podzielonaKontrolaKontenera1</value>
|
||||
</data>
|
||||
<data name="miTheme.Caption" xml:space="preserve">
|
||||
<value>Schemat kolorów...</value>
|
||||
</data>
|
||||
<data name="btnSearchLeft.AccessibleDescription" xml:space="preserve">
|
||||
<value>Wyszukaj kanał</value>
|
||||
</data>
|
||||
<data name="miSplitView.Caption" xml:space="preserve">
|
||||
<value>Podzielony widok</value>
|
||||
</data>
|
||||
<data name="miResetAndRestart.Caption" xml:space="preserve">
|
||||
<value>Przywróć ustawienia domyślne i uruchom ponownie</value>
|
||||
</data>
|
||||
<data name="miResetAndRestart.Hint" xml:space="preserve">
|
||||
<value>Resetuje wszystkie niestandardowe ustawienia i ponownie uruchamia program</value>
|
||||
</data>
|
||||
<data name="btnSearchLeft.ToolTip" xml:space="preserve">
|
||||
<value>Wyszukaj kanał według nazwy</value>
|
||||
</data>
|
||||
<data name="btnSearch.AccessibleDescription" xml:space="preserve">
|
||||
<value>Wyszukaj kanał</value>
|
||||
</data>
|
||||
<data name="btnSearch.ToolTip" xml:space="preserve">
|
||||
<value>Wyszukaj kanał według nazwy</value>
|
||||
</data>
|
||||
<data name="miAutoHideColumns.Caption" xml:space="preserve">
|
||||
<value>Ukryj/odkryj kolumny automatycznie</value>
|
||||
</data>
|
||||
<data name="miLoadListAfterStart.Caption" xml:space="preserve">
|
||||
<value>Załaduj ostatnio używaną listę po uruchomieniu</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -388,6 +388,7 @@
|
||||
</data>
|
||||
<data name="miEnglish.Caption" xml:space="preserve">
|
||||
<value>English</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="barDockControlRight.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Right</value>
|
||||
@@ -413,6 +414,7 @@
|
||||
</data>
|
||||
<data name="miHungarian.Caption" xml:space="preserve">
|
||||
<value>Magyar</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="btnToggleFavC.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>182, 5</value>
|
||||
@@ -528,6 +530,7 @@
|
||||
</data>
|
||||
<data name="rbInsertBefore.Properties.DisplayValueGrayed" xml:space="preserve">
|
||||
<value />
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="miSort.Caption" xml:space="preserve">
|
||||
<value>Sor&t channels alphabetically</value>
|
||||
@@ -796,6 +799,7 @@
|
||||
</data>
|
||||
<data name="miFontXLarge.Caption" xml:space="preserve">
|
||||
<value>XL - Segoe UI 11pt</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="btnToggleLock.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>23, 23</value>
|
||||
@@ -904,6 +908,7 @@
|
||||
</data>
|
||||
<data name="rbInsertBefore.Properties.DisplayValueChecked" xml:space="preserve">
|
||||
<value />
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="pnlEditControls.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>2, 23</value>
|
||||
@@ -1159,6 +1164,7 @@
|
||||
</data>
|
||||
<data name="gridRight.EmbeddedNavigator.ToolTip" xml:space="preserve">
|
||||
<value />
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="btnToggleFavA.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>23, 23</value>
|
||||
@@ -1174,6 +1180,7 @@
|
||||
</data>
|
||||
<data name="miGerman.Caption" xml:space="preserve">
|
||||
<value>&Deutsch</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="btnToggleLock.ImageOptions.ImageIndex" type="System.Int32, mscorlib">
|
||||
<value>15</value>
|
||||
@@ -1195,6 +1202,7 @@
|
||||
</data>
|
||||
<data name="miRussian.Caption" xml:space="preserve">
|
||||
<value>ру́сский</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="btnRemoveRight.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>23, 23</value>
|
||||
@@ -1249,6 +1257,7 @@
|
||||
</data>
|
||||
<data name="gridLeft.EmbeddedNavigator.ToolTipTitle" xml:space="preserve">
|
||||
<value />
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name=">>miResetAndRestart.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.1, Version=21.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
@@ -1372,6 +1381,7 @@
|
||||
</data>
|
||||
<data name="miPortuguese.Caption" xml:space="preserve">
|
||||
<value>Português</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name=">>btnRemoveRight.Name" xml:space="preserve">
|
||||
<value>btnRemoveRight</value>
|
||||
@@ -1429,12 +1439,14 @@
|
||||
</data>
|
||||
<data name="miTurkish.Caption" xml:space="preserve">
|
||||
<value>Türkçe</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="colOutSlot.ToolTip" xml:space="preserve">
|
||||
<value>New program number</value>
|
||||
</data>
|
||||
<data name="rbInsertBefore.Properties.DisplayValueUnchecked" xml:space="preserve">
|
||||
<value />
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="miFontMedium.ImageOptions.SvgImage" type="System.Resources.ResXNullRef, System.Windows.Forms">
|
||||
<value />
|
||||
@@ -1495,6 +1507,7 @@
|
||||
</data>
|
||||
<data name="cbCloseGap.Properties.DisplayValueGrayed" xml:space="preserve">
|
||||
<value />
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="mnuGotoFavList.ImageOptions.SvgImage" type="System.Resources.ResXNullRef, System.Windows.Forms">
|
||||
<value />
|
||||
@@ -1761,6 +1774,7 @@
|
||||
</data>
|
||||
<data name="gridRight.EmbeddedNavigator.ToolTipTitle" xml:space="preserve">
|
||||
<value />
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name=">>miRecentFiles.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraBars.BarListItem, DevExpress.XtraBars.v21.1, Version=21.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
@@ -1776,6 +1790,7 @@
|
||||
</data>
|
||||
<data name="cbCloseGap.Properties.DisplayValueUnchecked" xml:space="preserve">
|
||||
<value />
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name=">>btnToggleFavG.ZOrder" xml:space="preserve">
|
||||
<value>2</value>
|
||||
@@ -2297,6 +2312,7 @@
|
||||
</data>
|
||||
<data name="miUtf16BigEndian.Caption" xml:space="preserve">
|
||||
<value>UTF-16 Big Endian (Unicode MSB first)</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name=">>timerSelectFocusedRow.Type" xml:space="preserve">
|
||||
<value>System.Windows.Forms.Timer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
@@ -2372,6 +2388,7 @@
|
||||
</data>
|
||||
<data name="miPolski.Caption" xml:space="preserve">
|
||||
<value>Polski</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="btnClearRightFilter.ImageOptions.ImageIndex" type="System.Int32, mscorlib">
|
||||
<value>28</value>
|
||||
@@ -2423,6 +2440,7 @@
|
||||
</data>
|
||||
<data name="miFontLarge.Caption" xml:space="preserve">
|
||||
<value>L - Segoe UI 10pt</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name=">>miTheme.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.1, Version=21.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
@@ -2432,6 +2450,7 @@
|
||||
</data>
|
||||
<data name="miCzech.Caption" xml:space="preserve">
|
||||
<value>Česky</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="grpInputList.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>0, 0</value>
|
||||
@@ -2459,6 +2478,7 @@
|
||||
</data>
|
||||
<data name="rbInsertSwap.Properties.DisplayValueChecked" xml:space="preserve">
|
||||
<value />
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name=">>mnuLanguage.Name" xml:space="preserve">
|
||||
<value>mnuLanguage</value>
|
||||
@@ -2585,6 +2605,7 @@
|
||||
</data>
|
||||
<data name="cbCloseGap.Properties.DisplayValueChecked" xml:space="preserve">
|
||||
<value />
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name=">>cbCloseGap.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v21.1, Version=21.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
@@ -2646,6 +2667,7 @@
|
||||
</data>
|
||||
<data name="txtSetSlot.Properties.Mask.EditMask" xml:space="preserve">
|
||||
<value>\d{1,4}</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="splitContainerControl1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||
<value>Fill</value>
|
||||
@@ -2769,6 +2791,7 @@
|
||||
</data>
|
||||
<data name="miUtf8Charset.Caption" xml:space="preserve">
|
||||
<value>UTF-8 (Unicode)</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name=">>miLockOn.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraBars.BarButtonItem, DevExpress.XtraBars.v21.1, Version=21.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
@@ -2805,6 +2828,7 @@
|
||||
</data>
|
||||
<data name="gridLeft.EmbeddedNavigator.ToolTip" xml:space="preserve">
|
||||
<value />
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name=">>btnToggleLock.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v21.1, Version=21.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
@@ -2979,6 +3003,7 @@
|
||||
</data>
|
||||
<data name="rbInsertAfter.Properties.DisplayValueChecked" xml:space="preserve">
|
||||
<value />
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name=">>colName.Type" xml:space="preserve">
|
||||
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v21.1, Version=21.1.5.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
|
||||
@@ -3024,6 +3049,7 @@
|
||||
</data>
|
||||
<data name="rbInsertSwap.Properties.DisplayValueUnchecked" xml:space="preserve">
|
||||
<value />
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="rbInsertAfter.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>47, 20</value>
|
||||
@@ -3294,6 +3320,7 @@
|
||||
</data>
|
||||
<data name="miUtf16LittleEndian.Caption" xml:space="preserve">
|
||||
<value>UTF-16 Little Endian (Unicode LSB first)</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="mnuHelp.ImageOptions.ImageIndex" type="System.Int32, mscorlib">
|
||||
<value>-1</value>
|
||||
@@ -3441,6 +3468,7 @@
|
||||
</data>
|
||||
<data name="miFontSmall.Caption" xml:space="preserve">
|
||||
<value>S - Tahoma 8pt</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name=">>miOpen.Name" xml:space="preserve">
|
||||
<value>miOpen</value>
|
||||
@@ -3567,6 +3595,7 @@
|
||||
</data>
|
||||
<data name="miFontXxLarge.Caption" xml:space="preserve">
|
||||
<value>XXL - Segoe UI 12pt</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="colShortName.VisibleIndex" type="System.Int32, mscorlib">
|
||||
<value>3</value>
|
||||
@@ -3618,6 +3647,7 @@
|
||||
</data>
|
||||
<data name="rbInsertAfter.Properties.DisplayValueUnchecked" xml:space="preserve">
|
||||
<value />
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="btnToggleFavH.Text" xml:space="preserve">
|
||||
<value>±H</value>
|
||||
@@ -3678,6 +3708,7 @@
|
||||
</data>
|
||||
<data name="mnuInputSource.Caption" xml:space="preserve">
|
||||
<value>mnuInputSource</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="miSelectFavListD.ImageOptions.ImageIndex" type="System.Int32, mscorlib">
|
||||
<value>-1</value>
|
||||
@@ -3771,6 +3802,7 @@
|
||||
</data>
|
||||
<data name="mnuLanguage.Caption" xml:space="preserve">
|
||||
<value>&Language</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="cbCloseGap.EditValue" type="System.Boolean, mscorlib">
|
||||
<value>True</value>
|
||||
@@ -4009,4 +4041,12 @@
|
||||
<metadata name="barManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||
<value>308, 17</value>
|
||||
</metadata>
|
||||
<data name="rbInsertAfter.Properties.DisplayValueGrayed" xml:space="preserve">
|
||||
<value></value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="rbInsertSwap.Properties.DisplayValueGrayed" xml:space="preserve">
|
||||
<value></value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
</root>
|
||||
@@ -297,9 +297,6 @@
|
||||
<data name="mnuGotoChannelList.Caption" xml:space="preserve">
|
||||
<value>Selectați și sursa de &intrare</value>
|
||||
</data>
|
||||
<data name="mnuInputSource.Caption" xml:space="preserve">
|
||||
<value>mnuInputSource</value>
|
||||
</data>
|
||||
<data name="mnuGotoFavList.AccessibleDescription" xml:space="preserve">
|
||||
<value>Deschide un submeniu pentru programul de selecție a listei favorite. Acest meniu poate fi activat direct cu ajutorul tastei Shift+F1</value>
|
||||
</data>
|
||||
|
||||
@@ -469,6 +469,6 @@
|
||||
<value>Индекс пр.</value>
|
||||
</data>
|
||||
<data name="miTheme.Caption" xml:space="preserve">
|
||||
<value>Цветовая схема...</value>
|
||||
<value>Цветовая схема…</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -285,9 +285,6 @@
|
||||
<data name="miCharsetForm.Caption" xml:space="preserve">
|
||||
<value>Tüm karakter setleri…</value>
|
||||
</data>
|
||||
<data name="miUtf8Charset.Caption" xml:space="preserve">
|
||||
<value>UTF-8 (Unicode)</value>
|
||||
</data>
|
||||
<data name="miIsoCharSets.Caption" xml:space="preserve">
|
||||
<value>ISO karakter seti</value>
|
||||
</data>
|
||||
@@ -318,9 +315,6 @@
|
||||
<data name="mnuGotoChannelList.Caption" xml:space="preserve">
|
||||
<value>Giriş kaynağı seçin</value>
|
||||
</data>
|
||||
<data name="mnuInputSource.Caption" xml:space="preserve">
|
||||
<value>mnuInputSource</value>
|
||||
</data>
|
||||
<data name="mnuGotoFavList.AccessibleDescription" xml:space="preserve">
|
||||
<value>Favori liste seçimi için bir alt menü açar. Bu menü Shift + F1 tuşuyla doğrudan etkinleştirilebilir</value>
|
||||
</data>
|
||||
@@ -664,6 +658,6 @@
|
||||
<value>bölünmüşBirimKontrolü1</value>
|
||||
</data>
|
||||
<data name="miTheme.Caption" xml:space="preserve">
|
||||
<value>Renk uyumu...</value>
|
||||
<value>Renk uyumu...+X91</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -146,7 +146,7 @@
|
||||
<value>Zapisz zmiany</value>
|
||||
</data>
|
||||
<data name="MainForm_PromptSaveAndContinue_Discard" xml:space="preserve">
|
||||
<value>Odrzucać zmiany</value>
|
||||
<value>Odrzuć zmiany</value>
|
||||
</data>
|
||||
<data name="MainForm_LoadTll_SerializerNotFound" xml:space="preserve">
|
||||
<value>Nie znaleziono wtyczki do odczytu/zapisu plików {0}.</value>
|
||||
@@ -158,7 +158,7 @@
|
||||
<value>Zawartość pliku wykazuje pewne anomalie i prawdopodobnie jest uszkodzona.</value>
|
||||
</data>
|
||||
<data name="MainForm_LoadFiles_ValidationWarningCap" xml:space="preserve">
|
||||
<value>Walidacji danych</value>
|
||||
<value>Weryfikacja danych</value>
|
||||
</data>
|
||||
<data name="MainForm_RestoreScanOrder_Message" xml:space="preserve">
|
||||
<value>Wszystkie niestandardowe przechowywanie zostaną utracone.
|
||||
|
||||
@@ -201,22 +201,16 @@ lub plik danych z innego telewizora (SCM, TLL, DB, BIN, ...)</value>
|
||||
<value>Rodzaj sygnału:</value>
|
||||
</data>
|
||||
<data name="cbAnalog.Properties.Caption" xml:space="preserve">
|
||||
<value>Analog</value>
|
||||
<value>Analogowy</value>
|
||||
</data>
|
||||
<data name="cbDigital.Properties.Caption" xml:space="preserve">
|
||||
<value>Cyfrowy</value>
|
||||
</data>
|
||||
<data name="lblTargetInfo.Text" xml:space="preserve">
|
||||
<value> </value>
|
||||
</data>
|
||||
<data name="lblSourceInfo.Text" xml:space="preserve">
|
||||
<value> </value>
|
||||
</data>
|
||||
<data name="labelControl7.Text" xml:space="preserve">
|
||||
<value>Rodzaj kanału:</value>
|
||||
</data>
|
||||
<data name="btnApply.Text" xml:space="preserve">
|
||||
<value>Zastosować</value>
|
||||
<value>Zastosuj</value>
|
||||
</data>
|
||||
<data name="grpManual.Text" xml:space="preserve">
|
||||
<value>grpInstrukcja</value>
|
||||
@@ -228,7 +222,7 @@ lub plik danych z innego telewizora (SCM, TLL, DB, BIN, ...)</value>
|
||||
<value>Zamknij/Anuluj</value>
|
||||
</data>
|
||||
<data name="linkWiki.Text" xml:space="preserve">
|
||||
<value>Otwórz Wiki ChanSort, aby uzyskać więcej informacji i pobrać listy referencyjne</value>
|
||||
<value>Otwórz stronę ChanSort, aby uzyskać więcej informacji i pobrać listy referencyjne</value>
|
||||
</data>
|
||||
<data name="groupControl1.Text" xml:space="preserve">
|
||||
<value>1. Wybierz plik listy referencyjnej</value>
|
||||
|
||||
@@ -159,6 +159,7 @@
|
||||
</data>
|
||||
<data name="edFile.Properties.Buttons1" xml:space="preserve">
|
||||
<value />
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="edFile.Properties.Buttons2" type="System.Int32, mscorlib">
|
||||
<value>-1</value>
|
||||
@@ -483,6 +484,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...)</value>
|
||||
</data>
|
||||
<data name="comboPrNr.EditValue" xml:space="preserve">
|
||||
<value>1</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="comboPrNr.Location" type="System.Drawing.Point, System.Drawing">
|
||||
<value>123, 134</value>
|
||||
@@ -492,24 +494,31 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...)</value>
|
||||
</data>
|
||||
<data name="comboPrNr.Properties.Items" xml:space="preserve">
|
||||
<value>1</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="comboPrNr.Properties.Items1" xml:space="preserve">
|
||||
<value>100</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="comboPrNr.Properties.Items2" xml:space="preserve">
|
||||
<value>500</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="comboPrNr.Properties.Items3" xml:space="preserve">
|
||||
<value>1000</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="comboPrNr.Properties.Items4" xml:space="preserve">
|
||||
<value>2000</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="comboPrNr.Properties.Items5" xml:space="preserve">
|
||||
<value>5000</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="comboPrNr.Properties.Items6" xml:space="preserve">
|
||||
<value>7000</value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name="comboPrNr.Size" type="System.Drawing.Size, System.Drawing">
|
||||
<value>140, 20</value>
|
||||
@@ -783,6 +792,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...)</value>
|
||||
</data>
|
||||
<data name="lblTargetInfo.Text" xml:space="preserve">
|
||||
<value> </value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name=">>lblTargetInfo.Name" xml:space="preserve">
|
||||
<value>lblTargetInfo</value>
|
||||
@@ -807,6 +817,7 @@ or a data file from another TV (SCM, TLL, DB, BIN, ...)</value>
|
||||
</data>
|
||||
<data name="lblSourceInfo.Text" xml:space="preserve">
|
||||
<value> </value>
|
||||
<comment>@Invariant</comment>
|
||||
</data>
|
||||
<data name=">>lblSourceInfo.Name" xml:space="preserve">
|
||||
<value>lblSourceInfo</value>
|
||||
|
||||
@@ -118,9 +118,18 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="btnOk.Text" xml:space="preserve">
|
||||
<value>Dobrze</value>
|
||||
<value>Ok</value>
|
||||
</data>
|
||||
<data name="$this.Text" xml:space="preserve">
|
||||
<value>Schemat kolorów</value>
|
||||
</data>
|
||||
<data name="btnReset.Text" xml:space="preserve">
|
||||
<value>Użyj domyślnego motywu</value>
|
||||
</data>
|
||||
<data name="btnCancel.Text" xml:space="preserve">
|
||||
<value>Anuluj</value>
|
||||
</data>
|
||||
<data name="gallery.Text" xml:space="preserve">
|
||||
<value>galeriaKontrola1</value>
|
||||
</data>
|
||||
</root>
|
||||
@@ -118,7 +118,7 @@
|
||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||
</resheader>
|
||||
<data name="progressPanel1.Description" xml:space="preserve">
|
||||
<value>Generando archivo de datos de TV</value>
|
||||
<value>Generando archivo de datos de TV...</value>
|
||||
</data>
|
||||
<data name="progressPanel1.Caption" xml:space="preserve">
|
||||
<value>Por favor sea paciente</value>
|
||||
|
||||
@@ -0,0 +1,172 @@
|
||||
#include <stddefs.h>
|
||||
|
||||
struct Header
|
||||
{
|
||||
uint32 blockId;
|
||||
uint32 blockSize;
|
||||
uint16 u1;
|
||||
uint16 u2;
|
||||
uint32 numTvChannels;
|
||||
uint32 numRadioChannels;
|
||||
uint32 u3;
|
||||
uint32 channelBlockId;
|
||||
uint32 channelBlockSize;
|
||||
};
|
||||
|
||||
struct Channel
|
||||
{
|
||||
uint32 curProgNr;
|
||||
uint32 u1;
|
||||
uint8 u2[8];
|
||||
uint32 favNr;
|
||||
char name[200];
|
||||
uint16 u3;
|
||||
uint16 u3b;
|
||||
char provider[200];
|
||||
uint8 u4[16];
|
||||
uint32 freqInHz;
|
||||
uint16 u6;
|
||||
uint16 not_symRate;
|
||||
uint32 oldProgNr;
|
||||
uint8 u7[4];
|
||||
uint32 channelIndex;
|
||||
uint16 tsid;
|
||||
uint16 symRate_maybe;
|
||||
uint16 sid;
|
||||
uint16 onid;
|
||||
//uint16 freqInMhz2;
|
||||
//uint16 u9;
|
||||
uint32 u10;
|
||||
};
|
||||
|
||||
struct Footer
|
||||
{
|
||||
uint32 numDataBlocks;
|
||||
uint32 numDataBlockBytes;
|
||||
uint16 bytesumFrom0;
|
||||
uint16 u_zero;
|
||||
};
|
||||
|
||||
public struct Philips_mgr_chan_s_fta
|
||||
{
|
||||
char filename[32];
|
||||
Header header;
|
||||
var recordCount = header.channelBlockSize / sizeof(Channel);
|
||||
Channel channels[recordCount];
|
||||
Footer footer;
|
||||
};
|
||||
|
||||
//*****************************************************************************************
|
||||
// FLASH files
|
||||
//*****************************************************************************************
|
||||
|
||||
struct ProgNr
|
||||
{
|
||||
WORD nr : 14;
|
||||
WORD flags : 2;
|
||||
};
|
||||
|
||||
struct s_channelTransponder
|
||||
{
|
||||
struct
|
||||
{
|
||||
WORD u1 : 3;
|
||||
WORD isRadio: 1;
|
||||
WORD u2 : 1;
|
||||
WORD transponderId : 11;
|
||||
} info;
|
||||
WORD channelId;
|
||||
};
|
||||
|
||||
struct s_transponder
|
||||
{
|
||||
WORD id;
|
||||
BYTE source_maybe;
|
||||
BYTE satId_maybe;
|
||||
WORD freqInMhz;
|
||||
WORD symbolRate;
|
||||
BYTE u2[2];
|
||||
WORD onid;
|
||||
WORD tsid;
|
||||
WORD nid;
|
||||
BYTE u3[5];
|
||||
WORD freqInMhz2;
|
||||
BYTE u4[8];
|
||||
};
|
||||
|
||||
struct s_satTransponder
|
||||
{
|
||||
WORD satId_maybe;
|
||||
WORD transponderId;
|
||||
};
|
||||
|
||||
struct s_unknown
|
||||
{
|
||||
WORD u1;
|
||||
BYTE u2[2];
|
||||
DWORD zero;
|
||||
};
|
||||
|
||||
struct s_channel
|
||||
{
|
||||
WORD id;
|
||||
BYTE u1[4];
|
||||
BYTE u2[2];
|
||||
WORD sid;
|
||||
WORD pcrPid;
|
||||
WORD vpid;
|
||||
BYTE u3[8];
|
||||
ProgNr progNr;
|
||||
BYTE u3b[7];
|
||||
WORD apid1_maybe;
|
||||
char lang1[3];
|
||||
BYTE u4[45];
|
||||
WORD apid2_maybe;
|
||||
char lang2[3];
|
||||
BYTE u5[3];
|
||||
};
|
||||
|
||||
struct s_channelBlock
|
||||
{
|
||||
char ddtc[4];
|
||||
s_channel channels[734];
|
||||
BYTE filler[0x20000-0x1ff32];
|
||||
};
|
||||
|
||||
#define numChannelTransponderMap 5000
|
||||
#define numSatTransponderMap 1090
|
||||
#define numTransponder 1100
|
||||
#define numSatData 4592
|
||||
#define numUnknown 310*8
|
||||
public struct Philips_FLASH_DTVINFO_S_FTA
|
||||
{
|
||||
char ddtc[4];
|
||||
s_channelTransponder channelTranponderMap[numChannelTransponderMap];
|
||||
s_satTransponder satTransponderMap[numSatTransponderMap];
|
||||
s_transponder transponder[numTransponder];
|
||||
BYTE satData[numSatData];
|
||||
s_unknown unkData[numUnknown];
|
||||
s_channelBlock channelBlocks[*];
|
||||
};
|
||||
|
||||
#undef numChannelTransponderMap
|
||||
#define numChannelTransponderMap 2000
|
||||
#undef numSatTransponderMap
|
||||
#define numSatTransponderMap 590
|
||||
#undef numTransponder
|
||||
#define numTransponder 550
|
||||
#undef numSatData
|
||||
#define numSatData 4592
|
||||
#undef numUnknown
|
||||
#define numUnknown 310
|
||||
public struct Philips_FLASH_DTVINFO_S_PKG
|
||||
{
|
||||
char ddtc[4];
|
||||
s_channelTransponder channelTranponderMap[numChannelTransponderMap];
|
||||
s_satTransponder satTransponderMap[numSatTransponderMap];
|
||||
s_transponder transponder[numTransponder];
|
||||
BYTE satData[numSatData];
|
||||
var off0 = current_offset;
|
||||
BYTE unk[0x10000 - off0];
|
||||
s_channelBlock channelBlocks[*];
|
||||
};
|
||||
@@ -0,0 +1,219 @@
|
||||
#include <stddefs.h>
|
||||
|
||||
struct SHeader
|
||||
{
|
||||
uint32 blockId;
|
||||
uint32 blockSize;
|
||||
uint16 u1;
|
||||
uint16 u2;
|
||||
uint32 numTvChannels;
|
||||
uint32 numRadioChannels;
|
||||
uint32 u3;
|
||||
uint32 channelBlockId;
|
||||
uint32 channelBlockSize;
|
||||
};
|
||||
|
||||
struct SChannel_fta
|
||||
{
|
||||
uint32 curProgNr;
|
||||
uint32 u1;
|
||||
uint8 u2[8];
|
||||
uint32 favNr;
|
||||
char chName1[200];
|
||||
uint16 u3;
|
||||
uint8 u3b[208];
|
||||
uint8 u3c[2];
|
||||
uint16 u3d;
|
||||
uint8 u4[10];
|
||||
uint32 freqInMhz1;
|
||||
uint16 u6;
|
||||
uint16 symRate;
|
||||
uint32 oldProgNr;
|
||||
uint32 channelIndex;
|
||||
uint16 tsid;
|
||||
uint16 u7;
|
||||
uint16 sid;
|
||||
uint16 onid;
|
||||
uint16 freqInMhz2;
|
||||
uint8 padding[6];
|
||||
};
|
||||
|
||||
struct SFooter
|
||||
{
|
||||
uint32 numDataBlocks;
|
||||
uint32 numDataBlockBytes;
|
||||
uint16 bytesumFrom0;
|
||||
uint16 u_zero;
|
||||
};
|
||||
|
||||
public struct Philips_mgr_chan_s_fta
|
||||
{
|
||||
char filename[32];
|
||||
SHeader header;
|
||||
var recordCount = header.channelBlockSize / sizeof(SChannel_fta);
|
||||
SChannel_fta channels[recordCount];
|
||||
SFooter footer;
|
||||
};
|
||||
|
||||
//#########################################################
|
||||
|
||||
struct SChannel_pkg
|
||||
{
|
||||
uint32 curProgNr;
|
||||
uint32 u1;
|
||||
uint8 u2[8];
|
||||
uint32 favNr;
|
||||
char chName1[200];
|
||||
uint16 u3;
|
||||
uint8 u3b[208];
|
||||
uint8 u3c[2];
|
||||
uint16 u3d;
|
||||
uint8 u4[10];
|
||||
uint32 freqInMhz1;
|
||||
uint16 u6;
|
||||
uint16 symRate;
|
||||
uint32 oldProgNr;
|
||||
uint32 channelIndex;
|
||||
uint16 tsid;
|
||||
uint16 u7;
|
||||
uint16 sid;
|
||||
uint16 onid;
|
||||
uint16 freqInMhz2;
|
||||
uint8 padding[6];
|
||||
};
|
||||
|
||||
public struct Philips_mgr_chan_s_pkg
|
||||
{
|
||||
char filename[32];
|
||||
SHeader header;
|
||||
var recordCount = header.channelBlockSize / sizeof(SChannel_pkg);
|
||||
SChannel_pkg channels[recordCount];
|
||||
SFooter footer;
|
||||
};
|
||||
|
||||
|
||||
//*****************************************************************************************
|
||||
// FLASH files
|
||||
//*****************************************************************************************
|
||||
|
||||
struct ProgNr
|
||||
{
|
||||
WORD nr : 14;
|
||||
WORD flags : 2;
|
||||
};
|
||||
|
||||
struct s_channelTransponder
|
||||
{
|
||||
struct
|
||||
{
|
||||
WORD u1 : 3;
|
||||
WORD isRadio: 1;
|
||||
WORD u2 : 1;
|
||||
WORD transponderId : 11;
|
||||
} info;
|
||||
WORD channelId;
|
||||
};
|
||||
|
||||
struct s_transponder
|
||||
{
|
||||
var off0 = current_offset;
|
||||
WORD id;
|
||||
BYTE source_maybe;
|
||||
BYTE satId_maybe;
|
||||
WORD freqInMhz;
|
||||
WORD symbolRate;
|
||||
BYTE u2[2];
|
||||
WORD onid;
|
||||
WORD tsid;
|
||||
WORD nid;
|
||||
BYTE u3[5];
|
||||
WORD freqInMhz2;
|
||||
BYTE u4[31 - (current_offset - off0)];
|
||||
};
|
||||
|
||||
struct s_satTransponder
|
||||
{
|
||||
WORD satId_maybe;
|
||||
WORD transponderId;
|
||||
};
|
||||
|
||||
struct s_unknown
|
||||
{
|
||||
WORD u1;
|
||||
BYTE u2[2];
|
||||
DWORD zero;
|
||||
};
|
||||
|
||||
struct s_channel
|
||||
{
|
||||
var off0 = current_offset;
|
||||
WORD id;
|
||||
BYTE u1[4];
|
||||
BYTE u2[2];
|
||||
WORD sid;
|
||||
WORD pcrPid;
|
||||
WORD vpid;
|
||||
BYTE u3[8];
|
||||
ProgNr progNr;
|
||||
BYTE u3b[7];
|
||||
WORD apid1_maybe;
|
||||
char lang1[3];
|
||||
BYTE u4[45];
|
||||
WORD apid2_maybe;
|
||||
char lang2[3];
|
||||
BYTE u5[89 - (current_offset - off0)]; // 3
|
||||
};
|
||||
|
||||
struct s_channelBlock
|
||||
{
|
||||
char ddtc[4];
|
||||
s_channel channels[734];
|
||||
BYTE filler[0x20000-0x1ff32];
|
||||
};
|
||||
|
||||
struct s_satellite
|
||||
{
|
||||
BYTE data[42];
|
||||
};
|
||||
|
||||
#define numChannelTransponderMap 5000
|
||||
#define numSatTransponderMap 1000
|
||||
#define numTransponder 1100
|
||||
#define numSatellites 100
|
||||
#define numUnknown 250 //(0x10000-0xF650)/8
|
||||
public struct Philips_FLASH_DTVINFO_S_FTA
|
||||
{
|
||||
char ddtc[4];
|
||||
s_channelTransponder channelTranponderMap[numChannelTransponderMap];
|
||||
s_satTransponder satTransponderMap[numSatTransponderMap];
|
||||
BYTE unk[360];
|
||||
s_transponder transponder[numTransponder];
|
||||
s_satellite satellites[numSatellites];
|
||||
BYTE unk[0xF650-current_offset];
|
||||
s_unknown unknownTable[numUnknown];
|
||||
BYTE filler[0x10000-current_offset];
|
||||
s_channelBlock channelBlocks[*];
|
||||
};
|
||||
|
||||
#undef numChannelTransponderMap
|
||||
#define numChannelTransponderMap 2000
|
||||
#undef numSatTransponderMap
|
||||
#define numSatTransponderMap 500
|
||||
#undef numTransponder
|
||||
#define numTransponder 550
|
||||
#undef numSatellites
|
||||
#define numSatellites 100
|
||||
#undef numUnknown
|
||||
#define numUnknown 0
|
||||
public struct Philips_FLASH_DTVINFO_S_PKG
|
||||
{
|
||||
char ddtc[4];
|
||||
s_channelTransponder channelTranponderMap[numChannelTransponderMap];
|
||||
s_satTransponder satTransponderMap[numSatTransponderMap];
|
||||
BYTE unk[360];
|
||||
s_transponder transponder[numTransponder];
|
||||
s_satellite satellites[numSatellites];
|
||||
//s_unknown unknownTable[numUnknown];
|
||||
BYTE filler[0x10000-current_offset];
|
||||
s_channelBlock channelBlocks[*];
|
||||
};
|
||||
@@ -26,7 +26,6 @@ struct SChannel_fta
|
||||
uint16 u3d;
|
||||
uint8 u4[10];
|
||||
uint32 freqInMhz1;
|
||||
//uint16 u5;
|
||||
uint16 u6;
|
||||
uint16 symRate;
|
||||
uint32 oldProgNr;
|
||||
@@ -47,61 +46,18 @@ struct SFooter
|
||||
uint16 u_zero;
|
||||
};
|
||||
|
||||
#pragma script("get_doc_size.js")
|
||||
|
||||
public struct Philips_mgr_chan_s_fta
|
||||
{
|
||||
var docSize = GetDocumentSize();
|
||||
|
||||
char filename[32];
|
||||
|
||||
SHeader header;
|
||||
|
||||
var recordCount = header.channelBlockSize / sizeof(SChannel_fta);
|
||||
SChannel_fta channels[recordCount];
|
||||
|
||||
SFooter footer;
|
||||
};
|
||||
|
||||
//#########################################################
|
||||
|
||||
struct SChannel_pkg_476
|
||||
{
|
||||
uint32 curProgNr;
|
||||
uint32 u1;
|
||||
uint8 u2[8];
|
||||
uint32 favNr;
|
||||
char chName1[200];
|
||||
uint16 u3;
|
||||
uint8 u3b[208];
|
||||
uint8 u3c[2];
|
||||
uint16 u3d;
|
||||
uint8 u4[10];
|
||||
uint32 freqInMhz1;
|
||||
uint16 u6;
|
||||
uint16 symRate;
|
||||
uint32 oldProgNr;
|
||||
uint32 channelIndex;
|
||||
uint16 tsid;
|
||||
uint16 u7;
|
||||
uint16 sid;
|
||||
uint16 onid;
|
||||
uint16 freqInMhz2;
|
||||
uint8 padding[6];
|
||||
// some files have this additional size of 4 bytes
|
||||
//uint8 padding2[4];
|
||||
};
|
||||
|
||||
public struct Philips_mgr_chan_s_pkg_476
|
||||
{
|
||||
char filename[32];
|
||||
SHeader header;
|
||||
var recordCount = header.channelBlockSize / sizeof(SChannel_pkg_476);
|
||||
SChannel_pkg_476 channels[recordCount];
|
||||
SFooter footer;
|
||||
};
|
||||
|
||||
struct SChannel_pkg_480
|
||||
struct SChannel_pkg
|
||||
{
|
||||
uint32 curProgNr;
|
||||
uint32 u1;
|
||||
@@ -128,12 +84,12 @@ struct SChannel_pkg_480
|
||||
uint8 padding2[4];
|
||||
};
|
||||
|
||||
public struct Philips_mgr_chan_s_pkg_480
|
||||
public struct Philips_mgr_chan_s_pkg
|
||||
{
|
||||
char filename[32];
|
||||
SHeader header;
|
||||
var recordCount = header.channelBlockSize / sizeof(SChannel_pkg_480);
|
||||
SChannel_pkg_480 channels[recordCount];
|
||||
var recordCount = header.channelBlockSize / sizeof(SChannel_pkg);
|
||||
SChannel_pkg channels[recordCount];
|
||||
SFooter footer;
|
||||
};
|
||||
|
||||
@@ -247,117 +203,6 @@ struct s_unknown
|
||||
};
|
||||
|
||||
struct s_channel
|
||||
{
|
||||
WORD id;
|
||||
BYTE u1[4];
|
||||
BYTE u2[2];
|
||||
WORD sid;
|
||||
WORD pcrPid;
|
||||
WORD vpid;
|
||||
BYTE u3[8];
|
||||
ProgNr progNr;
|
||||
BYTE u3b[7];
|
||||
WORD apid1_maybe;
|
||||
char lang1[3];
|
||||
BYTE u4[45];
|
||||
WORD apid2_maybe;
|
||||
char lang2[3];
|
||||
BYTE u5[3];
|
||||
// optional
|
||||
BYTE u6[4];
|
||||
};
|
||||
|
||||
struct s_channelBlock
|
||||
{
|
||||
char ddtc[4];
|
||||
s_channel channels[734];
|
||||
BYTE filler[0x20000-0x1ff32];
|
||||
};
|
||||
|
||||
#define numChannelTransponderMap 5000
|
||||
#define numSatTransponderMap 1090
|
||||
#define numTransponder 1100
|
||||
#define numSatData 4592
|
||||
#define numUnknown 310*8
|
||||
public struct Philips_FLASH_DTVINFO_S_FTA
|
||||
{
|
||||
char ddtc[4];
|
||||
s_channelTransponder channelTranponderMap[numChannelTransponderMap];
|
||||
s_satTransponder satTransponderMap[numSatTransponderMap];
|
||||
s_transponder transponder[numTransponder];
|
||||
BYTE satData[numSatData];
|
||||
s_unknown unkData[numUnknown];
|
||||
s_channelBlock channelBlocks[*];
|
||||
};
|
||||
|
||||
#undef numChannelTransponderMap
|
||||
#define numChannelTransponderMap 2000
|
||||
#undef numSatTransponderMap
|
||||
#define numSatTransponderMap 590
|
||||
#undef numTransponder
|
||||
#define numTransponder 550
|
||||
#undef numSatData
|
||||
#define numSatData 4592
|
||||
#undef numUnknown
|
||||
#define numUnknown 310
|
||||
public struct Philips_FLASH_DTVINFO_S_PKG
|
||||
{
|
||||
char ddtc[4];
|
||||
s_channelTransponder channelTranponderMap[numChannelTransponderMap];
|
||||
s_satTransponder satTransponderMap[numSatTransponderMap];
|
||||
s_transponder transponder[numTransponder];
|
||||
BYTE satData[numSatData];
|
||||
var off0 = current_offset;
|
||||
BYTE unk[0x10000 - off0];
|
||||
s_channelBlock channelBlocks[*];
|
||||
};
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////
|
||||
|
||||
struct s_channelTransponder2
|
||||
{
|
||||
struct
|
||||
{
|
||||
WORD u1 : 3;
|
||||
WORD isRadio: 1;
|
||||
WORD u2 : 1;
|
||||
WORD transponderId : 11;
|
||||
} info;
|
||||
WORD channelId;
|
||||
};
|
||||
|
||||
struct s_transponder2
|
||||
{
|
||||
WORD id;
|
||||
BYTE source_maybe;
|
||||
BYTE satId_maybe;
|
||||
WORD freqInMhz;
|
||||
WORD symbolRate;
|
||||
BYTE u2[2];
|
||||
WORD onid;
|
||||
WORD tsid;
|
||||
WORD nid;
|
||||
BYTE u3[5];
|
||||
WORD freqInMhz2;
|
||||
BYTE u4[8];
|
||||
BYTE u5[5];
|
||||
};
|
||||
|
||||
struct s_satTransponder2
|
||||
{
|
||||
WORD satId_maybe;
|
||||
WORD transponderId;
|
||||
};
|
||||
|
||||
struct s_unknown2
|
||||
{
|
||||
WORD u1;
|
||||
BYTE u2[2];
|
||||
DWORD zero;
|
||||
};
|
||||
|
||||
struct s_channel2
|
||||
{
|
||||
WORD id;
|
||||
BYTE u1[4];
|
||||
@@ -374,34 +219,60 @@ struct s_channel2
|
||||
WORD apid2_maybe;
|
||||
char lang2[3];
|
||||
BYTE u5[3];
|
||||
// optional
|
||||
BYTE u6[1];
|
||||
};
|
||||
|
||||
struct s_channelBlock2
|
||||
struct s_channelBlock
|
||||
{
|
||||
char ddtc[4];
|
||||
s_channel channels[703];
|
||||
BYTE filler[0x20000-0x1ff67];
|
||||
};
|
||||
|
||||
struct s_satellite
|
||||
{
|
||||
BYTE data[42];
|
||||
};
|
||||
|
||||
#define numChannelTransponderMap 4000
|
||||
#define numSatTransponderMap 1000
|
||||
#define numTransponder 1100
|
||||
#define numSatellites 80 //Data 0xf77c - 0xe9c4
|
||||
#define numUnknown 250
|
||||
public struct Philips_FLASH_DTVINFO_S_FTA
|
||||
{
|
||||
char ddtc[4];
|
||||
s_channel2 channels[703];
|
||||
BYTE filler[0x20000 - 0x1ff67];
|
||||
s_channelTransponder channelTranponderMap[numChannelTransponderMap];
|
||||
s_satTransponder satTransponderMap[numSatTransponderMap];
|
||||
BYTE unknownData[240];
|
||||
s_transponder transponder[numTransponder];
|
||||
s_satellite satellites[numSatellites];
|
||||
BYTE unk[0xF77C-current_offset];
|
||||
s_unknown unknownTable[numUnknown];
|
||||
BYTE filler[0x10000-current_offset];
|
||||
s_channelBlock channelBlocks[*];
|
||||
};
|
||||
|
||||
#undef numChannelTransponderMap
|
||||
#define numChannelTransponderMap 5000
|
||||
#define numChannelTransponderMap 2000
|
||||
#undef numSatTransponderMap
|
||||
#define numSatTransponderMap 60
|
||||
#define numSatTransponderMap 1000
|
||||
#undef numTransponder
|
||||
#define numTransponder 1100
|
||||
#undef numSatData
|
||||
#define numSatData 3512
|
||||
#define numTransponder 550
|
||||
#undef numSatellites
|
||||
#define numSatellites 80 //Data 0xf77c - 0xe9c4
|
||||
#undef numUnknown
|
||||
#define numUnknown 2180
|
||||
public struct Philips_FLASH_DTVINFO_S_FTA_for_pkg
|
||||
#define numUnknown 0
|
||||
public struct Philips_FLASH_DTVINFO_S_PKG
|
||||
{
|
||||
char ddtc[4];
|
||||
s_channelTransponder2 channelTranponderMap[numChannelTransponderMap];
|
||||
s_satTransponder2 satTransponderMap[numSatTransponderMap];
|
||||
s_transponder2 transponder[numTransponder];
|
||||
BYTE satData[numSatData];
|
||||
BYTE unknown[numUnknown];
|
||||
s_channelBlock2 channelBlocks[*];
|
||||
};
|
||||
|
||||
s_channelTransponder channelTranponderMap[numChannelTransponderMap];
|
||||
s_satTransponder satTransponderMap[numSatTransponderMap];
|
||||
BYTE unknownData[240];
|
||||
s_transponder transponder[numTransponder];
|
||||
s_satellite satellites[numSatellites];
|
||||
//s_unknown unknownTable[numUnknown];
|
||||
BYTE filler[0x10000-current_offset];
|
||||
s_channelBlock channelBlocks[*];
|
||||
};
|
||||
Binary file not shown.
@@ -1,6 +1,13 @@
|
||||
ChanSort Change Log
|
||||
===================
|
||||
|
||||
2021-09-19
|
||||
- Philips: added support for ChannelMap_115 format
|
||||
- Philips: ChannelMap formats 100-115 did not always fill "Source" and "Polarity" columns correctly
|
||||
- Philips: improved experimental support for Philips FLASH\_\*/\*.db file formats
|
||||
(read-only by default, can be enabled in Philips.ini for testing)
|
||||
- added Polish readme and updated translation (by JakubDriver)
|
||||
|
||||
2021-09-13
|
||||
- column order is now preserved between program starts even when lists with different supported columns
|
||||
were loaded and columns reordered.
|
||||
@@ -15,7 +22,7 @@ ChanSort Change Log
|
||||
|
||||
2021-09-06
|
||||
- Philips: fixes for ChannelMap_100, 105 and 110 formats
|
||||
- Philips: support for FLASH/*.bin DVB-T/C and preset DVB-S lists (mgr_chan_s_pkg.db)
|
||||
- Philips: support for FLASH/*.db DVB-T/C and preset DVB-S lists (mgr_chan_s_pkg.db)
|
||||
- Toshiba: lists with chmgt_type001\\chmgt.bin can now be opened without zipping them
|
||||
- Toshiba: selecting the hotelopt_type001.bin will now also load the list (if the type is supported)
|
||||
- Alden: added support for "Alden" Android SmartTV channel list format (dvr_rtk_tv.db)
|
||||
|
||||
Reference in New Issue
Block a user