initial import

This commit is contained in:
hbeham
2013-03-31 14:09:38 +02:00
commit e194ff983b
110 changed files with 20082 additions and 0 deletions

29
.gitignore vendored Normal file
View File

@@ -0,0 +1,29 @@
#ignore thumbnails created by windows
Thumbs.db
#Ignore files build by Visual Studio
*.obj
*.exe
*.pdb
*.user
*.aps
*.pch
*.vspscc
*_i.c
*_p.c
*.ncb
*.suo
*.tlb
*.tlh
*.bak
*.cache
*.ilk
*.log
[Bb]in
[Dd]ebug*/
*.lib
*.sbr
obj/
[Rr]elease*/
_ReSharper*/
[Tt]est[Rr]esult*

View File

@@ -0,0 +1,124 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{DCCFFA08-472B-4D17-BB90-8F513FC01392}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ChanSort.Api</RootNamespace>
<AssemblyName>ChanSort.Api</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>..\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
</PropertyGroup>
<ItemGroup>
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="Controller\ChlFileSerializer.cs" />
<Compile Include="Controller\CsvFileSerializer.cs" />
<Compile Include="Controller\Editor.cs" />
<Compile Include="Controller\ISerializerPlugin.cs" />
<Compile Include="Model\ChannelList.cs" />
<Compile Include="Model\Enums.cs" />
<Compile Include="Model\LookupData.cs" />
<Compile Include="Model\NetworkInfo.cs" />
<Compile Include="Model\Satellite.cs" />
<Compile Include="Model\Transponder.cs" />
<Compile Include="Resources.de.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.de.resx</DependentUpon>
</Compile>
<Compile Include="Resources.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resources.resx</DependentUpon>
</Compile>
<Compile Include="Utils\ChannelMappingBase.cs" />
<Compile Include="Utils\DataMapping.cs" />
<Compile Include="Utils\Crc32.cs" />
<Compile Include="Utils\CsvFile.cs" />
<Compile Include="Utils\DvbChannelMappingBase.cs" />
<Compile Include="Utils\DvbStringDecoder.cs" />
<Compile Include="Utils\IniFile.cs" />
<Compile Include="Model\ChannelInfo.cs" />
<Compile Include="Controller\SerializerBase.cs" />
<Compile Include="Model\DataRoot.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Utils\MappingPool.cs" />
<Compile Include="Utils\Tools.cs" />
</ItemGroup>
<ItemGroup>
<None Include="Lookup.csv">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resources.de.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.de.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,98 @@
using System.IO;
using System.Linq;
namespace ChanSort.Api
{
/// <summary>
/// Reader for SamToolBox reference lists (*.chl)
/// The file has no header, each line represents a channel and fields are separated by semi-colon:
/// Number;Channel Name[;Transponder Index]
/// </summary>
public class ChlFileSerializer
{
private static readonly char[] Separators = new[] { ';' };
private readonly System.Text.StringBuilder warnings = new System.Text.StringBuilder();
private int lineNumber;
private DataRoot dataRoot;
private ChannelList channelList;
#region Load()
public string Load(string fileName, DataRoot root, ChannelList list)
{
this.lineNumber = 0;
this.dataRoot = root;
this.channelList = list;
this.warnings.Remove(0, this.warnings.Length);
foreach (var channel in this.channelList.Channels)
channel.NewProgramNr = 0;
using (var stream = new StreamReader(fileName, System.Text.Encoding.Default))
{
ReadChannelsFromStream(stream);
}
return this.warnings.ToString();
}
#endregion
#region ReadChannelsFromStream()
private void ReadChannelsFromStream(TextReader stream)
{
string line;
while ((line = stream.ReadLine()) != null)
{
++lineNumber;
ParseChannel(line);
}
}
#endregion
#region ParseChannel()
private void ParseChannel(string line)
{
var parts = line.Split(Separators);
if (parts.Length < 2) return;
int progNr;
Transponder transponder = null;
if (!int.TryParse(parts[0], out progNr)) return;
if (parts.Length >= 3)
{
int transponderIndex;
if (int.TryParse(parts[2], out transponderIndex))
{
transponder = this.dataRoot.Transponder.TryGet(transponderIndex);
if (transponder == null)
warnings.AppendFormat("Line #{0,4}: invalid transponder index {1}\r\n", this.lineNumber, transponderIndex);
}
}
string name = parts[1].Replace("\"", "");
if (name.Trim().Length == 0)
return;
int found = 0;
var channels = channelList.GetChannelByName(name);
if (transponder != null)
channels = channels.Where(chan => chan.Transponder == transponder);
foreach(var channel in channels)
{
if (channel.NewProgramNr != 0)
continue;
++found;
if (found > 1)
break;
channel.NewProgramNr = progNr;
}
if (found == 0)
this.warnings.AppendFormat("Line {0,4}: Pr# {1,4}, channel '{2}' could not be found\r\n", this.lineNumber, progNr, name);
if (found > 1)
this.warnings.AppendFormat("Line {0,4}: Pr# {1,4}, channel '{2}' found multiple times\r\n", this.lineNumber, progNr, name);
}
#endregion
}
}

View File

@@ -0,0 +1,127 @@
using System.Collections.Generic;
using System.IO;
using System.Linq;
namespace ChanSort.Api
{
public class CsvFileSerializer
{
private static readonly char[] Separators = new[] { ',', ';', '\t' };
#region Load()
public void Load(string fileName, DataRoot dataRoot)
{
foreach (var list in dataRoot.ChannelLists)
{
foreach (var channel in list.Channels)
channel.NewProgramNr = 0;
}
using (var stream = new StreamReader(fileName))
{
ReadChannelsFromStream(stream, dataRoot);
}
}
#endregion
#region ReadChannelsFromStream()
public static void ReadChannelsFromStream(TextReader stream, DataRoot dataRoot)
{
string line;
while ((line = stream.ReadLine()) != null)
{
ParseChannel(line, dataRoot);
}
}
#endregion
#region ParseChannel()
private static void ParseChannel(string line, DataRoot dataRoot)
{
var parts = line.Split(Separators);
if (parts.Length < 5) return;
int index, slot, transportStreamId;
if (!int.TryParse(parts[0], out index)) return;
if (!int.TryParse(parts[1], out slot)) return;
if (!int.TryParse(parts[2], out transportStreamId)) return;
string uid = parts[3].Replace("\"", "");
SignalSource signalSource;
switch (uid[0])
{
case 'S': signalSource = SignalSource.DvbS; break;
case 'C': signalSource = SignalSource.DvbCT; break;
case 'A': signalSource = SignalSource.AnalogCT; break;
case 'H': signalSource = SignalSource.HdPlusD; break;
default: return;
}
var signalType = slot < 0x4000 ? SignalType.Tv : SignalType.Radio;
var channelList = dataRoot.GetChannelList(signalSource, signalType, true);
string name = parts[4].Replace("\"", "");
IEnumerable<ChannelInfo> channels = FindChannels(channelList, name, uid);
var channel = channels == null ? null : channels.FirstOrDefault(c => c.NewProgramNr == 0);
if (channel != null)
channel.NewProgramNr = slot & 0x3FFF;
else
{
channel = new ChannelInfo(signalSource, signalType, uid, slot, name);
channel.TransportStreamId = transportStreamId;
channelList.AddChannel(channel);
}
}
#endregion
#region FindChannels()
private static IEnumerable<ChannelInfo> FindChannels(ChannelList channelList, string name, string uid)
{
IList<ChannelInfo> list = channelList.GetChannelByName(name).ToList();
if (list.Count == 1)
return list;
string[] uidParts;
if (uid.StartsWith("C") && (uidParts = uid.Split('-')).Length <= 4)
{
// older CSV files didn't use the Transponder as part of the UID, which is necessary
// to distinguish between identical channels (onid,tsid,sid) received on multiple transponders
// (e.g. from differnt regional DVB-T transmitters)
int onid = int.Parse(uidParts[1]);
int tsid = int.Parse(uidParts[2]);
int sid = int.Parse(uidParts[3]);
return channelList.Channels.Where(c =>
c.OriginalNetworkId == onid &&
c.TransportStreamId == tsid &&
c.ServiceId == sid
).ToList();
}
var byUidList = channelList.GetChannelByUid(uid);
return byUidList;
}
#endregion
#region Save()
public void Save(string fileName, DataRoot dataRoot, UnsortedChannelMode unsortedChannelMode)
{
using (StreamWriter stream = new StreamWriter(fileName))
{
foreach (var channelList in dataRoot.ChannelLists)
{
int radioMask = channelList.SignalType == SignalType.Radio ? 0x4000 : 0;
foreach (var channel in channelList.Channels.Where(ch => ch.NewProgramNr != 0).OrderBy(ch => ch.NewProgramNr))
{
string line = string.Format("{0},{1},{2},{3},\"{4}\"",
channel.RecordIndex,
channel.NewProgramNr | radioMask,
channel.TransportStreamId,
channel.Uid,
channel.Name);
stream.WriteLine(line);
}
}
}
}
#endregion
}
}

View File

@@ -0,0 +1,276 @@
using System.Collections.Generic;
using System.Linq;
namespace ChanSort.Api
{
public class Editor
{
public DataRoot DataRoot;
public ChannelList ChannelList;
#if false
#region LoadDvbViewerFiles()
private void LoadDvbViewerFiles()
{
List<string> fileList;
Dictionary<string, string> satPosition;
if (!LoadSatMappingFile(out satPosition, out fileList))
return;
foreach (var file in fileList)
{
try
{
string fullPath = Path.IsPathRooted(file)
? file
: Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), file);
this.LoadDvbViewerChannelFile(fullPath, satPosition);
}
catch
{
}
}
}
#endregion
#region LoadSatMappingFile()
private static bool LoadSatMappingFile(out Dictionary<string, string> satPosition, out List<string> fileList)
{
satPosition = null;
fileList = null;
string satMappingFile = Path.Combine(Path.GetDirectoryName(Application.ExecutablePath), "sat-mapping.ini");
if (!File.Exists(satMappingFile))
return false;
fileList = new List<string>();
satPosition = new Dictionary<string, string>();
string section = null;
using (var stream = new StreamReader(satMappingFile, Encoding.UTF8))
{
string line;
while ((line = stream.ReadLine()) != null)
{
line = line.Trim();
if (line.Length == 0 || line.StartsWith(";"))
continue;
if (line.StartsWith("[") && line.EndsWith("]"))
{
section = line;
continue;
}
if (section == "[Satellites]")
{
var parts = line.Split(new[] { '=' }, 2);
if (parts.Length == 2)
satPosition[parts[0].ToLower()] = parts[1].ToUpper();
}
else if (section == "[DvbViewerChannelFiles]")
{
fileList.Set(line);
}
}
}
return true;
}
#endregion
#region LoadDvbViewerChannelFile()
private void LoadDvbViewerChannelFile(string file, IDictionary<string, string> satPosition)
{
string[] unencrypted = { "18", "19", "26", "146", "154" };
using (var stream = new StreamReader(file, Encoding.Default))
{
string line;
bool first = true;
while ((line = stream.ReadLine()) != null)
{
if (first)
{
first = false;
continue;
}
var col = line.Split(new[] { '\t' });
if (col.Length < 21)
continue;
string satId;
if (!satPosition.TryGetValue(col[0].ToLower(), out satId))
continue;
StringBuilder uid = new StringBuilder();
uid.Append("S").Append(satId).Append("-").Append(col[20]).Append("-").Append(col[18]).Append("-").Append(col[17]);
ChannelInfo channel;
if (!TvChannelByUid.TryGetValue(uid.ToString(), out channel))
continue;
channel.Encrypted = Array.IndexOf(unencrypted, col[19]) < 0;
}
}
}
#endregion
#endif
#region AddChannels()
public ChannelInfo AddChannels(IList<ChannelInfo> channels)
{
int count = channels.Count(channel => channel.NewProgramNr == 0);
if (count == 0) return null;
ChannelInfo lastInsertedChannel = null;
int progNr = this.ChannelList.InsertProgramNumber;
int relativeChannelNumber = 0;
foreach(var channel in this.ChannelList.Channels)
{
if (channel.NewProgramNr != 0 && channel.NewProgramNr >= progNr)
{
int gap = count - (channel.NewProgramNr - progNr - relativeChannelNumber);
if (gap <= 0)
break;
channel.NewProgramNr += gap;
++relativeChannelNumber;
}
}
foreach (var channel in channels)
{
if (channel.NewProgramNr != 0)
{
// TODO notify user
continue;
}
channel.NewProgramNr = progNr++;
lastInsertedChannel = channel;
}
this.ChannelList.InsertProgramNumber += count;
this.DataRoot.NeedsSaving |= lastInsertedChannel != null;
return lastInsertedChannel;
}
#endregion
#region RemoveChannels()
public void RemoveChannels(IList<ChannelInfo> channels)
{
if (channels.Count == 0) return;
this.ChannelList.InsertProgramNumber = channels[0].NewProgramNr;
foreach (var channel in channels)
{
if (channel.NewProgramNr == 0)
continue;
int prevNr = channel.NewProgramNr;
foreach (var channel2 in this.ChannelList.Channels)
{
if (channel2.NewProgramNr > channel.NewProgramNr)
{
if (prevNr != -1 && channel2.NewProgramNr != prevNr + 1) // don't pull down numbers after a gap
break;
prevNr = channel2.NewProgramNr;
--channel2.NewProgramNr;
}
}
channel.NewProgramNr = 0;
}
this.DataRoot.NeedsSaving = true;
}
#endregion
#region MoveChannels()
public void MoveChannels(List<ChannelInfo> channels, bool up)
{
if (channels.Count == 0)
return;
if (up && channels[0].NewProgramNr < 2)
return;
int delta = (up ? - 1 : +1);
foreach (var channel in channels)
{
int newProgramNr = channel.NewProgramNr + delta;
ChannelInfo channelAtNewProgramNr = this.ChannelList.Channels.FirstOrDefault(ch => ch.NewProgramNr == newProgramNr);
if (channelAtNewProgramNr != null)
channelAtNewProgramNr.NewProgramNr -= delta;
channel.NewProgramNr += delta;
}
this.DataRoot.NeedsSaving = true;
}
#endregion
#region SortSelectedChannels(), ChannelComparerForSortingByName()
public void SortSelectedChannels(List<ChannelInfo> selectedChannels)
{
if (selectedChannels.Count == 0) return;
var sortedChannels = new List<ChannelInfo>(selectedChannels);
sortedChannels.Sort(this.ChannelComparerForSortingByName);
var programNumbers = selectedChannels.Select(ch => ch.NewProgramNr).ToList();
for (int i = 0; i < sortedChannels.Count; i++)
sortedChannels[i].NewProgramNr = programNumbers[i];
this.DataRoot.NeedsSaving = true;
}
private int ChannelComparerForSortingByName(ChannelInfo channel1, ChannelInfo channel2)
{
return channel1.Name.CompareTo(channel2.Name);
}
#endregion
#region SetSlotNumber()
public void SetSlotNumber(IList<ChannelInfo> channels, int slot, bool swap)
{
if (channels.Count == 0) return;
if (swap)
{
foreach (var channel in channels)
{
if (slot != 0)
{
var others = this.ChannelList.GetChannelByNewProgNr(slot);
foreach (var other in others)
other.NewProgramNr = channel.NewProgramNr;
}
channel.NewProgramNr = slot++;
}
}
else
{
this.RemoveChannels(channels);
this.ChannelList.InsertProgramNumber = slot;
this.AddChannels(channels);
}
this.DataRoot.NeedsSaving = true;
}
#endregion
#region RenumberChannels()
public void RenumberChannels(List<ChannelInfo> channels)
{
if (channels.Count == 0) return;
int progNr = channels.Min(ch => ch.NewProgramNr);
foreach(var channel in channels)
{
if (channel.NewProgramNr == progNr)
{
++progNr;
continue;
}
var list = new List<ChannelInfo>();
list.Add(channel);
this.RemoveChannels(list);
this.ChannelList.InsertProgramNumber = progNr++;
this.AddChannels(list);
this.DataRoot.NeedsSaving = true;
}
}
#endregion
}
}

View File

@@ -0,0 +1,21 @@
namespace ChanSort.Api
{
public interface ISerializerPlugin
{
/// <summary>
/// Name of the plugin, as displayed in the OpenFileDialog file-type selection combo box
/// </summary>
string PluginName { get; }
/// <summary>
/// Semicolon separated list of supported file types (e.g. "xxLM*.TTL;xxLV*.TTL")
/// </summary>
string FileFilter { get; }
/// <summary>
/// Create an object that can read/write the file
/// </summary>
/// <exception cref="System.IO.IOException">file is not of any supported type</exception>
SerializerBase CreateSerializer(string inputFile);
}
}

View File

@@ -0,0 +1,38 @@
using System.Text;
namespace ChanSort.Api
{
public abstract class SerializerBase
{
private Encoding defaultEncoding;
public string FileName { get; set; }
public DataRoot DataRoot { get; protected set; }
protected SerializerBase(string inputFile)
{
this.FileName = inputFile;
this.DataRoot = new DataRoot();
this.defaultEncoding = Encoding.GetEncoding("iso-8859-9");
}
public abstract string DisplayName { get; }
public abstract void Load();
public abstract void Save(string tvOutputFile, string csvOutputFile, UnsortedChannelMode unsortedChannelMode);
public virtual Encoding DefaultEncoding
{
get { return this.defaultEncoding; }
set { this.defaultEncoding = value; }
}
public bool SupportsEraseChannelData { get; protected set; }
public virtual void EraseChannelData() { }
public virtual string GetFileInformation() { return ""; }
public virtual void ShowDeviceSettingsForm(object parentWindow) { }
public bool SupportsChannelNameEdit { get; protected set; }
}
}

476
ChanSort.Api/Lookup.csv Normal file
View File

@@ -0,0 +1,476 @@
ONID;Start;End;Name;Operator
ONID;0x0000;0x0000;(Reserved);(Reserved)
ONID;0x0001;0x0001;Société Européenne des Satellites;Société Européenne des Satellites
ONID;0x0002;0x0002;Société Européenne des Satellites;Société Européenne des Satellites
ONID;0x0003;0x0019;Société Européenne des Satellites;Société Européenne des Satellites
ONID;0x001A;0x001A;Quiero Televisión  ;Quiero Televisión  
ONID;0x001B;0x001B;RAI;RAI
ONID;0x001C;0x001C;Hellas-Sat S.A.;Hellas-Sat S.A.
ONID;0x001D;0x001D;TELECOM ITALIA MEDIA BROADCASTING SRL;TELECOM ITALIA MEDIA BROADCASTING SRL
ONID;0x001F;0x001F;Europe Online Networks S.A  ;Europe Online Networks S.A  
ONID;0x0020;0x0020;Société Européenne des Satellites;Société Européenne des Satellites
ONID;0x0021;0x0021;Hispasat S.A .;Hispasat S.A .
ONID;0x0022;0x0022;Hispasat S.A .;Hispasat S.A .
ONID;0x0023;0x0023;Hispasat S.A .;Hispasat S.A .
ONID;0x0024;0x0024;Hispasat S.A .;Hispasat S.A .
ONID;0x0025;0x0025;Hispasat S.A .;Hispasat S.A .
ONID;0x0026;0x0026;Hispasat S.A .;Hispasat S.A .
ONID;0x0027;0x0027;Hispasat FSS;Hispasat FSS
ONID;0x0028;0x0028;Hispasat DBS;Hispasat DBS
ONID;0x0029;0x0029;Hispasat America;Hispasat America
ONID;0x002A;0x002A;Päijät-Hämeen Puhelin Oyj;Päijät-Hämeen Puhelin Oyj
ONID;0x002B;0x002B;Digita Oy;Digita Oy
ONID;0x002E;0x002E;Xantic BU Broadband;Xantic BU Broadband
ONID;0x002F;0x002F;TVNZ  ;TVNZ  
ONID;0x0030;0x0030;Canal+ SA (for Intelsat 601-325°E);Canal+ SA (for Intelsat 601-325°E)
ONID;0x0031;0x0031;Hispasat S.A.;Hispasat S.A.
ONID;0x0032;0x0032;Hispasat S.A.;Hispasat S.A.
ONID;0x0033;0x0033;Hispasat S.A.;Hispasat S.A.
ONID;0x0034;0x0034;Hispasat S.A.;Hispasat S.A.
ONID;0x0035;0x0035;NetHold IMS;NetHold IMS
ONID;0x0036;0x0036;TV Cabo Portugal  ;TV Cabo Portugal  
ONID;0x0037;0x0037;France Telecom, CNES and DGA;France Telecom, CNES and DGA
ONID;0x0038;0x0038;Hellenic Telecommunications Organization S.A .;Hellenic Telecommunications Organization S.A .
ONID;0x0039;0x0039;Broadcast Australia Pty.;Broadcast Australia Pty.
ONID;0x003A;0x003A;GeoTelecom Satellite Services;GeoTelecom Satellite Services
ONID;0x003B;0x003B;BBC;BBC
ONID;0x003C;0x003C;KPN Broadcast Services;KPN Broadcast Services
ONID;0x003D;0x003D;Skylogic Italia S.A.;Skylogic Italia S.A.
ONID;0x003E;0x003E;Eutelsat S.A.;Eutelsat S.A.
ONID;0x003F;0x003F;Eutelsat S.A.;Eutelsat S.A.
ONID;0x0040;0x0040;Hrvatski Telekom d.d;Hrvatski Telekom d.d
ONID;0x0041;0x0041;Mindport  ;Mindport  
ONID;0x0042;0x0042;DTV haber ve Gorsel yayýncilik;DTV haber ve Gorsel yayýncilik
ONID;0x0043;0x0043;arena Sport Rechte und Marketing GmbH;arena Sport Rechte und Marketing GmbH
ONID;0x0044;0x0044;VisionTV LLC;VisionTV LLC
ONID;0x0045;0x0045;SES-Sirius;SES-Sirius
ONID;0x0046;0x0046;Telenor ;Telenor 
ONID;0x0047;0x0047;Telenor;Telenor
ONID;0x0048;0x0048;STAR DIGITAL A.S .;STAR DIGITAL A.S .
ONID;0x0049;0x0049;Sentech  ;Sentech  
ONID;0x004A;0x004B;Rambouillet ES;Rambouillet ES
ONID;0x004C;0x004C;Skylogic S.A.;Skylogic S.A.
ONID;0x004D;0x004D;Skylogic S.A.;Skylogic S.A.
ONID;0x004E;0x004F;Eutelsat S.A.;Eutelsat S.A.
ONID;0x0050;0x0050;HRT Croatian Radio and Television;HRT Croatian Radio and Television
ONID;0x0051;0x0051;Havas ;Havas 
ONID;0x0052;0x0052;StarGuide Digital Networks ;StarGuide Digital Networks 
ONID;0x0053;0x0053;PT Comunicações;PT Comunicações
ONID;0x0054;0x0054;Teracom AB Satellite Services;Teracom AB Satellite Services
ONID;0x0055;0x0055;NSAB (Teracom);NSAB (Teracom)
ONID;0x0056;0x0056;Viasat Satellite Services AB;Viasat Satellite Services AB
ONID;0x0058;0x0058;UBC Thailand ;UBC Thailand 
ONID;0x0059;0x0059;Bharat Business Channel Limited;Bharat Business Channel Limited
ONID;0x005A;0x005A;ICO Satellite Services G.P.;ICO Satellite Services G.P.
ONID;0x005B;0x005B;ZON;ZON
ONID;0x005E;0x005E;NSAB ;NSAB 
ONID;0x005F;0x005F;NSAB ;NSAB 
ONID;0x0060;0x0060;Kabel Deutschland ;Kabel Deutschland 
ONID;0x0064;0x0064;T-Kábel;T-Kábel Magyarország Kft.
ONID;0x0065;0x0065;France Telecom Orange;France Telecom Orange
ONID;0x0066;0x0066;Zweites Deutsches Fernsehen - ZDF (cable contribution);Zweites Deutsches Fernsehen - ZDF
ONID;0x0069;0x0069;Optus B3 156°E;Optus Communications
ONID;0x0070;0x0070;BONUM1 36 Degrees East;NTV+
ONID;0x0073;0x0073;PanAmSat 4 68.5°E;Pan American Satellite System
ONID;0x007D;0x007D;Skylogic;Skylogic Italia
ONID;0x007E;0x007F;Eutelsat Satellite System at 7°E;EUTELSAT European Telecommunications Satellite Organization 
ONID;0x0085;0x0085;BetaTechnik;BetaTechnik
ONID;0x0090;0x0090;National network;TDF
ONID;0x009A;0x009B;Eutelsat satellite system at 9°East;Rambouillet ES
ONID;0x009C;0x009D;Eutelsat satellite system at 9°East;Skylogic S.A.
ONID;0x009E;0x009F;Eutelsat satellite system at 9°East;Eutelsat S.A.
ONID;0x00A0;0x00A0;National Cable Network;News Datacom
ONID;0x00A1;0x00A1;DigiSTAR;STAR Television Productions Ltd (HK) (NDS)
ONID;0x00A2;0x00A2;Sky Entertainment Services;NetSat Serviços Ltda (Brazil), Innova S. de R. L. (Mexico) and Multicountry Partnership L. P. (NDS)
ONID;0x00A3;0x00A3;NDS Director systems;Various (product only sold by Tandberg TV) (NDS)
ONID;0x00A4;0x00A4;ISkyB;STAR Television Productions Ltd (HK) (NDS)
ONID;0x00A5;0x00A5;Indovision;PT. Matahari Lintas Cakrawala (MLC) (NDS)
ONID;0x00A6;0x00A6;ART;ART (NDS)
ONID;0x00A7;0x00A7;Globecast;France Telecom (NDS)
ONID;0x00A8;0x00A8;Foxtel;Foxtel (Australia) (NDS)
ONID;0x00A9;0x00A9;Sky New Zealand;Sky Network Television Ltd (NDS)
ONID;0x00AA;0x00AA;OTE;OTE (Greece) (NDS)
ONID;0x00AB;0x00AB;Yes Satellite Services;DBS (Israel) (NDS)
ONID;0x00AC;0x00AC;(NDS satellite services);(NDS to be allocated)
ONID;0x00AD;0x00AD;SkyLife;Korea Digital Broadcasting
ONID;0x00AE;0x00AF;(NDS satellite services);(NDS to be allocated)
ONID;0x00B0;0x00B3;TPS;La Télévision Par Satellite
ONID;0x00B4;0x00B4;Telesat 107.3°W;Telesat Canada
ONID;0x00B5;0x00B5;Telesat 111.1°W;Telesat Canada
ONID;0x00B6;0x00B6;Telstra Saturn;TelstraSaturn Limited  
ONID;0x00BA;0x00BA;Satellite Express 6 (80°E);Satellite Express 
ONID;0x00C0;0x00CD;Canal +;Canal+
ONID;0x00D0;0x00D0;CCTV;China Central Television (NDS)
ONID;0x00D1;0x00D1;Galaxy;Galaxy Satellite Broadcasting, Hong Kong (NDS)
ONID;0x00D2;0x00DF;(NDS satellite services);(NDS to be allocated)
ONID;0x00EB;0x00EB;Eurovision Network;European Broadcasting Union  
ONID;0x0100;0x0100;ExpressVu;ExpressVu Inc.
ONID;0x0101;0x0101;Bulsatcom AD;Bulsatcom AD
ONID;0x0104;0x0104;MagtiSat;Magticom Ltd.
ONID;0x010D;0x010D;Skylogic;Skylogic Italia
ONID;0x010E;0x010F;Eutelsat Satellite System at 10°E;European Telecommunications Satellite Organization
ONID;0x0110;0x0110;Mediaset;Mediaset 
ONID;0x011F;0x011F;visAvision Network;European Telecommunications Satellite Organization
ONID;0x013D;0x013D;Skylogic;Skylogic Italia
ONID;0x013E;0x013F;Eutelsat Satellite System 13°E;European Telecommunications Satellite Organization
ONID;0x016D;0x016D;Skylogic;Skylogic Italia
ONID;0x016E;0x016F;Eutelsat Satellite System at 16°E;European Telecommunications Satellite Organization
ONID;0x0170;0x0170;Audio Visual Global Joint Stock Company;Audio Visual Global Joint Stock Company
ONID;0x01F4;0x01F4;MediaKabel B.V;
ONID;0x022D;0x022D;Skylogic;Skylogic Italia
ONID;0x022E;0x022F;Eutelsat Satellite System at 21.5°E;EUTELSAT European Telecommunications Satellite Organization 
ONID;0x026D;0x026D;Skylogic;Skylogic Italia
ONID;0x026E;0x026F;Eutelsat Satellite System at 25.5°E;EUTELSAT European Telecommunications Satellite Organization 
ONID;0x029D;0x029D;Skylogic;Skylogic Italia
ONID;0x029E;0x029F;Eutelsat Satellite System at 29°E;European Telecommunications Satellite Organization
ONID;0x02BE;0x02BE;ARABSAT;ARABSAT - Arab Satellite Communications Organization
ONID;0x02C0;0x02C0;MTV Networks Europe;MTV Networks Europe
ONID;0x033D;0x033D;Skylogic at 33°E;Skylogic Italia
ONID;0x033E;0x033F;Eutelsat Satellite System at 33°E;Eutelsat
ONID;0x034E;0x034E;IRIB;IRIB
ONID;0x036D;0x036D;Skylogic;Skylogic Italia
ONID;0x036E;0x036F;Eutelsat Satellite System at 36°E;European Telecommunications Satellite Organization
ONID;0x03E8;0x03E8;Telia;Telia, Sweden
ONID;0x045D;0x045F;Eutelsat satellite system at 15°West;Eutelsat S.A.
ONID;0x047D;0x047D;Skylogic;Skylogic Italia
ONID;0x047E;0x047F;Eutelsat Satellite System at 12.5°W;EUTELSAT European Telecommunications Satellite Organization 
ONID;0x048D;0x048D;Skylogic;Skylogic Italia
ONID;0x048E;0x048F;Eutelsat Satellite System at 48°E;European Telecommunications Satellite Organization
ONID;0x049D;0x049F;Eutelsat satellite system at 11°West;Eutelsat S.A.
ONID;0x0500;0x0500;Vinasat Center;Vinasat Center
ONID;0x0510;0x0510;Almajd;Almajd Satellite Broadcasting FZ LLC
ONID;0x052D;0x052D;Skylogic;Skylogic Italia
ONID;0x052E;0x052F;Eutelsat Satellite System at 8°W;EUTELSAT European Telecommunications Satellite Organization 
ONID;0x053D;0x053F;Eutelsat satellite system at 53°East;Eutelsat S.A.
ONID;0x055D;0x055D;Skylogic at 5°W;Skylogic Italia
ONID;0x055E;0x055F;Eutelsat Satellite System at 5°W;Eutelsat
ONID;0x0600;0x0600;UPC Satellite;UPC  
ONID;0x0601;0x0601;UPC Cable;UPC  
ONID;0x0602;0x0602;Tevel;Tevel Cable (Israel )
ONID;0x071D;0x071D;Skylogic at 70.5°E;Skylogic Italia
ONID;0x071E;0x071F;Eutelsat Satellite System at 70.5°E;Eutelsat S.A.
ONID;0x077D;0x077D;Skylogic Satellite System at 7°W;Skylogic Italia
ONID;0x077E;0x077F;Eutelsat Satellite System at 7°W;Eutelsat S.A.
ONID;0x0800;0x0801;Nilesat 101;Nilesat
ONID;0x0880;0x0880;MEASAT 1, 91.5°E;MEASAT Broadcast Network Systems SDN. BHD. (Kuala Lumpur, Malaysia)
ONID;0x0882;0x0882;MEASAT 2, 91.5°E;MEASAT Broadcast Network Systems SDN. BHD. (Kuala Lumpur, Malaysia)
ONID;0x0883;0x0883;MEASAT 2, 148.0°E;Hsin Chi Broadcast Company Ltd .
ONID;0x088F;0x088F;MEASAT 3;MEASAT Broadcast Network Systems SDN. BHD. (Kuala Lumpur, Malaysia)
ONID;0x08A0;0x08A0;Mainland Television Limited;Mainland Television Limited
ONID;0x0E26;0x0E26;IRIB;IRIB
ONID;0x0FFF;0x0FFF;Optus Networks;Optus Networks
ONID;0x1000;0x1000;Optus B3 156°E;Optus Communications
ONID;0x1001;0x1001;DISH Network;Echostar Communications
ONID;0x1002;0x1002;Dish Network 61.5 W;Echostar Communications
ONID;0x1003;0x1003;Dish Network 83 W;Echostar Communications
ONID;0x1004;0x1004;Dish Network 119 W;Echostar Communications
ONID;0x1005;0x1005;Dish Network 121 W;Echostar Communications
ONID;0x1006;0x1006;Dish Network 148 W;Echostar Communications
ONID;0x1007;0x1007;Dish Network 175 W;Echostar Communications
ONID;0x1008;0x100B;Dish Network W - Z;Echostar Communications
ONID;0x1010;0x1010;ABC TV;Australian Broadcasting Corporation  
ONID;0x1011;0x1011;SBS;SBS Australia  
ONID;0x1012;0x1012;Nine Network Australia;Nine Network Australia  
ONID;0x1013;0x1013;Seven Network Australia;Seven Network Limited  
ONID;0x1014;0x1014;Network TEN Australia;Network TEN Limited  
ONID;0x1015;0x1015;WIN Television Australia;WIN Television Pty Ltd  
ONID;0x1016;0x1016;Prime Television Australia;Prime Television Limited  
ONID;0x1017;0x1017;Southern Cross Broadcasting Australia;Southern Cross Broadcasting (Australia) Limited  
ONID;0x1018;0x1018;Telecasters Australia;Telecasters Australia Limited  
ONID;0x1019;0x1019;NBN Australia;NBN Limited  
ONID;0x101A;0x101A;Imparja Television Australia;Imparja Television Australia 
ONID;0x101B;0x101F;(Reserved for Australian broadcaster);(Reserved for Australian broadcasters)
ONID;0x1100;0x1100;GE Americom;GE American Communications
ONID;0x1101;0x1101;MiTV Networks Broadcast Terrestrial Network - DVB-H;MiTV Networks Sdn Bhd Malaysia
ONID;0x1102;0x1102;Dream Mobile TV;Philippines Multimedia System, Inc.
ONID;0x1103;0x1103;PT MAC;PT. Mediatama Anugrah Citra
ONID;0x1104;0x1104;Levira Mobile TV;Levira AS
ONID;0x1105;0x1105;Mobision;Alsumaria TV
ONID;0x1106;0x1106;Trenmobile;PT. Citra Karya Investasi
ONID;0x1107;0x1107;VTC Mobile TV;VTC Mobile TV
ONID;0x1700;0x1700;Echostar 2A;EchoStar Communications
ONID;0x1701;0x1701;Echostar 2B;EchoStar Communications
ONID;0x1702;0x1702;Echostar 2C;EchoStar Communications
ONID;0x1703;0x1703;Echostar 2D;EchoStar Communications
ONID;0x1704;0x1704;Echostar 2E;EchoStar Communications
ONID;0x1705;0x1705;Echostar 2F;EchoStar Communications
ONID;0x1706;0x1706;Echostar 2G;EchoStar Communications
ONID;0x1707;0x1707;Echostar 2H;EchoStar Communications
ONID;0x1708;0x1708;Echostar 2I;EchoStar Communications
ONID;0x1709;0x1709;Echostar 2J;EchoStar Communications
ONID;0x170A;0x170A;Echostar 2K;EchoStar Communications
ONID;0x170B;0x170B;Echostar 2L;EchoStar Communications
ONID;0x170C;0x170C;Echostar 2M;EchoStar Communications
ONID;0x170D;0x170D;Echostar 2N;EchoStar Communications
ONID;0x170E;0x170E;Echostar 2O;EchoStar Communications
ONID;0x170F;0x170F;Echostar 2P;EchoStar Communications
ONID;0x1710;0x1710;Echostar 2Q;EchoStar Communications
ONID;0x1711;0x1711;Echostar 2R;EchoStar Communications
ONID;0x1712;0x1712;Echostar 2S;EchoStar Communications
ONID;0x1713;0x1713;Echostar 2T;EchoStar Communications
ONID;0x1714;0x1714;Platforma HD;Platforma HD Ltd.
ONID;0x1715;0x1715;Profit Group Terrestrial;Profit Group SpA
ONID;0x1716;0x1716;JSC Mostelekom;JSC Mostelekom
ONID;0x2000;0x2000;Thiacom 1 & 2 co-located 78.5°E;Shinawatra Satellite
ONID;0x2014;0x2014;DTT - Andorran Digital Terrestrial Television;STA
ONID;0x2024;0x2024;Australian Digital Terrestrial Television;Australian Broadcasting Authority 
ONID;0x2028;0x2028;Austrian Digital Terrestrial Television;ORS - Austrian Broadcasting Services
ONID;0x2038;0x2038;Belgian Digital Terrestrial Television;BIPT
ONID;0x209E;0x209E;Taiwanese Digital Terrestrial Television;Directorate General of Telecommunications
ONID;0x20AA;0x20AA;Comision Nacional de Television de Colombia;Comision Nacional de Television de Colombia
ONID;0x20BF;0x20BF;Croatian Post and Electronic Communications Agency (HAKOM);Croatian Post and Electronic Communications Agency (HAKOM)
ONID;0x20C4;0x20C4;Office Of the Commissioner of Electronic Communications and Postal Regulation;Office Of the Commissioner of Electronic Communications and Postal Regulation
ONID;0x20CB;0x20CB;Czech Republic Digital Terrestrial Television;Czech Digital Group  
ONID;0x20D0;0x20D0;Danish Digital Terrestrial Television;National Telecom Agency Denmark  
ONID;0x20E9;0x20E9;Estonian Digital Terrestrial Television;Estonian National Communications Board
ONID;0x20F6;0x20F6;Finnish Digital Terrestrial Television;Telecommunicatoins Administratoin Centre, Finland  
ONID;0x20FA;0x20FA;French Digital Terrestrial Television;Conseil Superieur de l'AudioVisuel
ONID;0x2114;0x2114;German Digital Terrestrial Television;IRT on behalf of the German DVB-T broadcasts 
ONID;0x2124;0x2124;Gibraltar Regulatory Authority;Gibraltar Regulatory Authority
ONID;0x2168;0x2168;Digital Terrestrial Network of Indonesia;Ministry of Communication and Information Technology of the Republic of Indonesia
ONID;0x2174;0x2174;Irish Digital Terrestrial Television;Irish Telecommunications Regulator  
ONID;0x2178;0x2178;Israeli Digital Terrestrial Television;BEZEQ (The Israel Telecommunication Corp Ltd .)
ONID;0x217C;0x217C;Italian Digital Terrestrial Television;
ONID;0x21AC;0x21AC;DTT - Latvian Digital Terrestrial Television;Electronic Communications Office
ONID;0x21B8;0x21B8;DTT Lithuania;Communications Regulatory Authority
ONID;0x21CA;0x21CA;Malaysian Technical Standards Forum Bhd (MTFSB);Malaysian Technical Standards Forum Bhd (MTFSB)
ONID;0x2210;0x2210;Netherlands Digital Terrestrial Television;Nozema  
ONID;0x2213;0x2213;DTT for Country of Curacao;Bureau Telecommunicatie en Post
ONID;0x222A;0x222A;DTT - New Zealand Digial Terrestrial Television;TVNZ on behalf of Freeview New Zealand
ONID;0x2242;0x2242;Norwegian Digital Terrestrial Television;Norwegian Regulator
ONID;0x224F;0x224F;Autoridad Nacional de los Servicios Públicos;Autoridad Nacional de los Servicios Públicos
ONID;0x2260;0x2260;DTT - Philippines Digital Terrestrial Television;NTA (porivionally ABS-CBN)
ONID;0x2268;0x2268;DTT Poland;Office of Electronic Communications
ONID;0x2283;0x2283;DTT - Russian Federation;RTRN
ONID;0x22B0;0x22B0;DTT - Serbia JP Emisiona Tehnika i Veze;JP Emisiona Tehnika i Veze
ONID;0x22BE;0x22BE;Singapore Digital Terrestrial Television;Singapore Broadcasting Authority  
ONID;0x22BF;0x22BF;Telecommunications office of the Slovak republic;Telecommunications office of the Slovak republic
ONID;0x22C1;0x22C1;DTT - Slovenian Digital Terrestrial Television;APEK
ONID;0x22C6;0x22C6;DTT - South African Digital Terrestrial Television;South African Broadcasting Corporation Ltd. (SABC), pending formation of DZONGA
ONID;0x22C7;0x22C7;DTT- Hungarian Digital Terrestrial Television;National Communications Authority, Hungary
ONID;0x22C8;0x22C8;DTT- Portugal Digital Terrestrial Television;ANACOM- National Communications Authority
ONID;0x22D4;0x22D4;Spanish Digital Terrestrial Television;“Spanish Broadcasting Regulator 
ONID;0x22F1;0x22F1;Swedish Digital Terrestrial Television;“Swedish Broadcasting Regulator 
ONID;0x22F4;0x22F4;Swiss Digital Terrestrial Television;OFCOM
ONID;0x233A;0x233A;UK Digital Terrestrial Television;Independent Television Commission 
ONID;0x2B00;0x2B00;DTT Sky New Zealand;Sky Network Television Limited
ONID;0x3000;0x3000;PanAmSat 4 68.5°E;Pan American Satellite System
ONID;0x5000;0x5000;Irdeto Mux System;Irdeto Test Laboratories
ONID;0x616D;0x616D;BellSouth Entertainment;BellSouth Entertainment, Atlanta, GA, USA  
ONID;0x6600;0x6600;UPC Satellite;UPC  
ONID;0x6601;0x6601;UPC Cable;UPC  
ONID;0x6602;0x6602;Comcast Media Center;Comcast Media Center
ONID;0xA011;0xA011;Sichuan Cable TV Network;Sichuan Cable TV Network (PRC)
ONID;0xA012;0xA012;China Network Systems;STAR Koos Finance Company (Taiwan)
ONID;0xA013;0xA013;Versatel;Versatel (Russia)
ONID;0xA014;0xA014;Chongqing Cable;Chongqing Municipality, PRC
ONID;0XA015;0XA015;Guizhou Cable;Guizhou Province, PRC
ONID;0xA016;0xA016;Hathway Cable;Hathway Cable and Datacom, India
ONID;0xA017;0xA017;RCN;Rogers Cable Network, USA
ONID;0xA018;0xA040;(NDS satellite services);(NDS to be allocated)
ONID;0xA401;0xA401;ARD;ARD-Sternpunkte
ONID;0xA509;0xA509;Welho Cable Network Helsinki;Welho
ONID;0xA600;0xA600;Madritel;Madritel (Spain)
ONID;0xA602;0xA602;Tevel;Tevel (Israel) (NDS)
ONID;0xA603;0xA603;Globo Cabo (to be recycled);Globo Cabo (Brazil) (NDS)
ONID;0xA604;0xA604;Cablemas (to be recycled);Cablemas (Mexico) (NDS)
ONID;0xA605;0xA605;INC National Cable Network;Information Network Centre of SARFT (PRC) (NDS)
ONID;0xA606;0xA607;Pepcom GmbH;Pepcom GmbH
ONID;0xA900;0xA900;M-net Telekommunikations GmbH;M-net Telekommunikations GmbH
ONID;0xF000;0xF000;SMALL CABLE NETWORKS;(Small cable network network operators)
ONID;0xF001;0xF001;Deutsche Telekom;Deutsche Telekom AG
ONID;0xF010;0xF010;Telefónica Cable;Telefónica Cable SA
ONID;0xF020;0xF020;Cable and Wireless Communication;Cable and Wireless Communications
ONID;0xF100;0xF100;Casema;Casema N.V .
ONID;0xF750;0xF750;Telewest Communications Cable Network;Telewest Communications Plc  
ONID;0xF751;0xF751;OMNE Communications;OMNE Communications Ltd.
ONID;0xFBFC;0xFBFC;MATAV;MATAV (Israel ) (NDS)
ONID;0xFBFD;0xFBFD;Com Hem ab;Com Hem ab
ONID;0xFBFE;0xFBFE;TPS;La Télévision Par Satellite
ONID;0xFBFF;0xFBFF;Sky Italia;Sky Italia Spa.
ONID;0xFC10;0xFC10;Rhône Vision Cable;Rhône Vision Cable
ONID;0xFC41;0xFC41;France Telecom Cable;France Telecom  
ONID;0xFD00;0xFD00;National Cable Network;Lyonnaise Communications
ONID;0xFE00;0xFE00;TeleDenmark Cable TV;TeleDenmark
ONID;0xFEC0;0xFEFF;Network Interface Modules;Common Interface  
ONID;0xFF00;0xFFFA;Private_temporary_use;ETSI
TRANSP;Number;MHz
TRANSP;49;10714
TRANSP;50;10729
TRANSP;51;10744
TRANSP;52;10758
TRANSP;53;10773
TRANSP;54;10788
TRANSP;55;10803
TRANSP;56;10818
TRANSP;57;10832
TRANSP;58;10847
TRANSP;59;10862
TRANSP;60;10876
TRANSP;61;10891
TRANSP;62;10906
TRANSP;63;10921
TRANSP;64;10936
TRANSP;33;10964
TRANSP;34;10979
TRANSP;35;10994
TRANSP;36;11009
TRANSP;37;11023
TRANSP;38;11038
TRANSP;39;11053
TRANSP;40;11067
TRANSP;41;11082
TRANSP;42;11097
TRANSP;43;11112
TRANSP;44;11127
TRANSP;45;11141
TRANSP;46;11156
TRANSP;47;11171
TRANSP;48;11186
TRANSP;1;11214
TRANSP;2;11229
TRANSP;3;11244
TRANSP;4;11258
TRANSP;5;11273
TRANSP;6;11288
TRANSP;7;11303
TRANSP;8;11318
TRANSP;9;11332
TRANSP;10;11347
TRANSP;11;11362
TRANSP;12;11376
TRANSP;13;11391
TRANSP;14;11406
TRANSP;15;11421
TRANSP;16;11436
TRANSP;17;11464
TRANSP;18;11479
TRANSP;19;11494
TRANSP;20;11509
TRANSP;21;11523
TRANSP;22;11538
TRANSP;23;11553
TRANSP;24;11568
TRANSP;25;11582
TRANSP;26;11597
TRANSP;27;11612
TRANSP;28;11627
TRANSP;29;11641
TRANSP;30;11656
TRANSP;31;11671
TRANSP;32;11686
TRANSP;65;11720
TRANSP;66;11739
TRANSP;67;11758
TRANSP;68;11778
TRANSP;69;11798
TRANSP;70;11817
TRANSP;71;11836
TRANSP;72;11856
TRANSP;73;11876
TRANSP;74;11895
TRANSP;75;11914
TRANSP;76;11934
TRANSP;77;11954
TRANSP;78;11973
TRANSP;79;11992
TRANSP;80;12012
TRANSP;81;12032
TRANSP;82;12051
TRANSP;83;12070
TRANSP;84;12090
TRANSP;85;12110
TRANSP;86;12129
TRANSP;87;12148
TRANSP;88;12168
TRANSP;89;12188
TRANSP;90;12207
TRANSP;91;12226
TRANSP;92;12246
TRANSP;93;12266
TRANSP;94;12285
TRANSP;95;12304
TRANSP;96;12324
TRANSP;97;12344
TRANSP;98;12363
TRANSP;99;12382
TRANSP;100;12402
TRANSP;101;12422
TRANSP;102;12441
TRANSP;103;12460
TRANSP;104;12480
TRANSP;105;12515
TRANSP;106;12522
TRANSP;107;12545
TRANSP;108;12552
TRANSP;109;12574
TRANSP;110;12581
TRANSP;111;12604
TRANSP;112;12610
TRANSP;113;12633
TRANSP;114;12640
TRANSP;115;12663
TRANSP;116;12670
TRANSP;117;12692
TRANSP;118;12699
TRANSP;119;12722
TRANSP;120;12728
SERVICETYPE;Number;Description
SERVICETYPE;01;SD-TV
SERVICETYPE;02;Radio
SERVICETYPE;12;Daten/Test
SERVICETYPE;25;HD-TV
SERVICETYPE;211;Sky Select
DVBT;Channel;MHz
DVBT;21;474
DVBT;22;482
DVBT;23;490
DVBT;24;498
DVBT;25;506
DVBT;26;514
DVBT;27;522
DVBT;28;530
DVBT;29;538
DVBT;30;546
DVBT;31;554
DVBT;32;562
DVBT;33;570
DVBT;34;578
DVBT;35;586
DVBT;36;594
DVBT;37;602
DVBT;38;610
DVBT;39;618
DVBT;40;626
DVBT;41;634
DVBT;42;642
DVBT;43;650
DVBT;44;658
DVBT;45;666
DVBT;46;674
DVBT;47;682
DVBT;48;690
DVBT;49;698
DVBT;50;706
DVBT;51;714
DVBT;52;722
DVBT;53;730
DVBT;54;738
DVBT;55;746
DVBT;56;754
DVBT;57;762
DVBT;58;770
DVBT;59;778
DVBT;60;786
DVBT;61;794
DVBT;62;802
DVBT;63;810
DVBT;64;818
DVBT;65;826
DVBT;66;834
DVBT;67;842
DVBT;68;850
DVBT;69;858
1 ONID Start End Name Operator
2 ONID 0x0000 0x0000 (Reserved) (Reserved)
3 ONID 0x0001 0x0001 Société Européenne des Satellites Société Européenne des Satellites
4 ONID 0x0002 0x0002 Société Européenne des Satellites Société Européenne des Satellites
5 ONID 0x0003 0x0019 Société Européenne des Satellites Société Européenne des Satellites
6 ONID 0x001A 0x001A Quiero Televisión   Quiero Televisión  
7 ONID 0x001B 0x001B RAI RAI
8 ONID 0x001C 0x001C Hellas-Sat S.A. Hellas-Sat S.A.
9 ONID 0x001D 0x001D TELECOM ITALIA MEDIA BROADCASTING SRL TELECOM ITALIA MEDIA BROADCASTING SRL
10 ONID 0x001F 0x001F Europe Online Networks S.A   Europe Online Networks S.A  
11 ONID 0x0020 0x0020 Société Européenne des Satellites Société Européenne des Satellites
12 ONID 0x0021 0x0021 Hispasat S.A . Hispasat S.A .
13 ONID 0x0022 0x0022 Hispasat S.A . Hispasat S.A .
14 ONID 0x0023 0x0023 Hispasat S.A . Hispasat S.A .
15 ONID 0x0024 0x0024 Hispasat S.A . Hispasat S.A .
16 ONID 0x0025 0x0025 Hispasat S.A . Hispasat S.A .
17 ONID 0x0026 0x0026 Hispasat S.A . Hispasat S.A .
18 ONID 0x0027 0x0027 Hispasat FSS Hispasat FSS
19 ONID 0x0028 0x0028 Hispasat DBS Hispasat DBS
20 ONID 0x0029 0x0029 Hispasat America Hispasat America
21 ONID 0x002A 0x002A Päijät-Hämeen Puhelin Oyj Päijät-Hämeen Puhelin Oyj
22 ONID 0x002B 0x002B Digita Oy Digita Oy
23 ONID 0x002E 0x002E Xantic BU Broadband Xantic BU Broadband
24 ONID 0x002F 0x002F TVNZ   TVNZ  
25 ONID 0x0030 0x0030 Canal+ SA (for Intelsat 601-325°E) Canal+ SA (for Intelsat 601-325°E)
26 ONID 0x0031 0x0031 Hispasat S.A. Hispasat S.A.
27 ONID 0x0032 0x0032 Hispasat S.A. Hispasat S.A.
28 ONID 0x0033 0x0033 Hispasat S.A. Hispasat S.A.
29 ONID 0x0034 0x0034 Hispasat S.A. Hispasat S.A.
30 ONID 0x0035 0x0035 NetHold IMS NetHold IMS
31 ONID 0x0036 0x0036 TV Cabo Portugal   TV Cabo Portugal  
32 ONID 0x0037 0x0037 France Telecom, CNES and DGA France Telecom, CNES and DGA
33 ONID 0x0038 0x0038 Hellenic Telecommunications Organization S.A . Hellenic Telecommunications Organization S.A .
34 ONID 0x0039 0x0039 Broadcast Australia Pty. Broadcast Australia Pty.
35 ONID 0x003A 0x003A GeoTelecom Satellite Services GeoTelecom Satellite Services
36 ONID 0x003B 0x003B BBC BBC
37 ONID 0x003C 0x003C KPN Broadcast Services KPN Broadcast Services
38 ONID 0x003D 0x003D Skylogic Italia S.A. Skylogic Italia S.A.
39 ONID 0x003E 0x003E Eutelsat S.A. Eutelsat S.A.
40 ONID 0x003F 0x003F Eutelsat S.A. Eutelsat S.A.
41 ONID 0x0040 0x0040 Hrvatski Telekom d.d Hrvatski Telekom d.d
42 ONID 0x0041 0x0041 Mindport   Mindport  
43 ONID 0x0042 0x0042 DTV haber ve Gorsel yayýncilik DTV haber ve Gorsel yayýncilik
44 ONID 0x0043 0x0043 arena Sport Rechte und Marketing GmbH arena Sport Rechte und Marketing GmbH
45 ONID 0x0044 0x0044 VisionTV LLC VisionTV LLC
46 ONID 0x0045 0x0045 SES-Sirius SES-Sirius
47 ONID 0x0046 0x0046 Telenor  Telenor 
48 ONID 0x0047 0x0047 Telenor Telenor
49 ONID 0x0048 0x0048 STAR DIGITAL A.S . STAR DIGITAL A.S .
50 ONID 0x0049 0x0049 Sentech   Sentech  
51 ONID 0x004A 0x004B Rambouillet ES Rambouillet ES
52 ONID 0x004C 0x004C Skylogic S.A. Skylogic S.A.
53 ONID 0x004D 0x004D Skylogic S.A. Skylogic S.A.
54 ONID 0x004E 0x004F Eutelsat S.A. Eutelsat S.A.
55 ONID 0x0050 0x0050 HRT – Croatian Radio and Television HRT – Croatian Radio and Television
56 ONID 0x0051 0x0051 Havas  Havas 
57 ONID 0x0052 0x0052 StarGuide Digital Networks  StarGuide Digital Networks 
58 ONID 0x0053 0x0053 PT Comunicações PT Comunicações
59 ONID 0x0054 0x0054 Teracom AB Satellite Services Teracom AB Satellite Services
60 ONID 0x0055 0x0055 NSAB (Teracom) NSAB (Teracom)
61 ONID 0x0056 0x0056 Viasat Satellite Services AB Viasat Satellite Services AB
62 ONID 0x0058 0x0058 UBC Thailand  UBC Thailand 
63 ONID 0x0059 0x0059 Bharat Business Channel Limited Bharat Business Channel Limited
64 ONID 0x005A 0x005A ICO Satellite Services G.P. ICO Satellite Services G.P.
65 ONID 0x005B 0x005B ZON ZON
66 ONID 0x005E 0x005E NSAB  NSAB 
67 ONID 0x005F 0x005F NSAB  NSAB 
68 ONID 0x0060 0x0060 Kabel Deutschland  Kabel Deutschland 
69 ONID 0x0064 0x0064 T-Kábel T-Kábel Magyarország Kft.
70 ONID 0x0065 0x0065 France Telecom Orange France Telecom Orange
71 ONID 0x0066 0x0066 Zweites Deutsches Fernsehen - ZDF (cable contribution) Zweites Deutsches Fernsehen - ZDF
72 ONID 0x0069 0x0069 Optus B3 156°E Optus Communications
73 ONID 0x0070 0x0070 BONUM1 36 Degrees East NTV+
74 ONID 0x0073 0x0073 PanAmSat 4 68.5°E Pan American Satellite System
75 ONID 0x007D 0x007D Skylogic Skylogic Italia
76 ONID 0x007E 0x007F Eutelsat Satellite System at 7°E EUTELSAT – European Telecommunications Satellite Organization 
77 ONID 0x0085 0x0085 BetaTechnik BetaTechnik
78 ONID 0x0090 0x0090 National network TDF
79 ONID 0x009A 0x009B Eutelsat satellite system at 9°East Rambouillet ES
80 ONID 0x009C 0x009D Eutelsat satellite system at 9°East Skylogic S.A.
81 ONID 0x009E 0x009F Eutelsat satellite system at 9°East Eutelsat S.A.
82 ONID 0x00A0 0x00A0 National Cable Network News Datacom
83 ONID 0x00A1 0x00A1 DigiSTAR STAR Television Productions Ltd (HK) (NDS)
84 ONID 0x00A2 0x00A2 Sky Entertainment Services NetSat Serviços Ltda (Brazil), Innova S. de R. L. (Mexico) and Multicountry Partnership L. P. (NDS)
85 ONID 0x00A3 0x00A3 NDS Director systems Various (product only sold by Tandberg TV) (NDS)
86 ONID 0x00A4 0x00A4 ISkyB STAR Television Productions Ltd (HK) (NDS)
87 ONID 0x00A5 0x00A5 Indovision PT. Matahari Lintas Cakrawala (MLC) (NDS)
88 ONID 0x00A6 0x00A6 ART ART (NDS)
89 ONID 0x00A7 0x00A7 Globecast France Telecom (NDS)
90 ONID 0x00A8 0x00A8 Foxtel Foxtel (Australia) (NDS)
91 ONID 0x00A9 0x00A9 Sky New Zealand Sky Network Television Ltd (NDS)
92 ONID 0x00AA 0x00AA OTE OTE (Greece) (NDS)
93 ONID 0x00AB 0x00AB Yes Satellite Services DBS (Israel) (NDS)
94 ONID 0x00AC 0x00AC (NDS satellite services) (NDS to be allocated)
95 ONID 0x00AD 0x00AD SkyLife Korea Digital Broadcasting
96 ONID 0x00AE 0x00AF (NDS satellite services) (NDS to be allocated)
97 ONID 0x00B0 0x00B3 TPS La Télévision Par Satellite
98 ONID 0x00B4 0x00B4 Telesat 107.3°W Telesat Canada
99 ONID 0x00B5 0x00B5 Telesat 111.1°W Telesat Canada
100 ONID 0x00B6 0x00B6 Telstra Saturn TelstraSaturn Limited  
101 ONID 0x00BA 0x00BA Satellite Express – 6 (80°E) Satellite Express 
102 ONID 0x00C0 0x00CD Canal + Canal+
103 ONID 0x00D0 0x00D0 CCTV China Central Television (NDS)
104 ONID 0x00D1 0x00D1 Galaxy Galaxy Satellite Broadcasting, Hong Kong (NDS)
105 ONID 0x00D2 0x00DF (NDS satellite services) (NDS to be allocated)
106 ONID 0x00EB 0x00EB Eurovision Network European Broadcasting Union  
107 ONID 0x0100 0x0100 ExpressVu ExpressVu Inc.
108 ONID 0x0101 0x0101 Bulsatcom AD Bulsatcom AD
109 ONID 0x0104 0x0104 MagtiSat Magticom Ltd.
110 ONID 0x010D 0x010D Skylogic Skylogic Italia
111 ONID 0x010E 0x010F Eutelsat Satellite System at 10°E European Telecommunications Satellite Organization
112 ONID 0x0110 0x0110 Mediaset Mediaset 
113 ONID 0x011F 0x011F visAvision Network European Telecommunications Satellite Organization
114 ONID 0x013D 0x013D Skylogic Skylogic Italia
115 ONID 0x013E 0x013F Eutelsat Satellite System 13°E European Telecommunications Satellite Organization
116 ONID 0x016D 0x016D Skylogic Skylogic Italia
117 ONID 0x016E 0x016F Eutelsat Satellite System at 16°E European Telecommunications Satellite Organization
118 ONID 0x0170 0x0170 Audio Visual Global Joint Stock Company Audio Visual Global Joint Stock Company
119 ONID 0x01F4 0x01F4 MediaKabel B.V
120 ONID 0x022D 0x022D Skylogic Skylogic Italia
121 ONID 0x022E 0x022F Eutelsat Satellite System at 21.5°E EUTELSAT – European Telecommunications Satellite Organization 
122 ONID 0x026D 0x026D Skylogic Skylogic Italia
123 ONID 0x026E 0x026F Eutelsat Satellite System at 25.5°E EUTELSAT – European Telecommunications Satellite Organization 
124 ONID 0x029D 0x029D Skylogic Skylogic Italia
125 ONID 0x029E 0x029F Eutelsat Satellite System at 29°E European Telecommunications Satellite Organization
126 ONID 0x02BE 0x02BE ARABSAT ARABSAT - Arab Satellite Communications Organization
127 ONID 0x02C0 0x02C0 MTV Networks Europe MTV Networks Europe
128 ONID 0x033D 0x033D Skylogic at 33°E Skylogic Italia
129 ONID 0x033E 0x033F Eutelsat Satellite System at 33°E Eutelsat
130 ONID 0x034E 0x034E IRIB IRIB
131 ONID 0x036D 0x036D Skylogic Skylogic Italia
132 ONID 0x036E 0x036F Eutelsat Satellite System at 36°E European Telecommunications Satellite Organization
133 ONID 0x03E8 0x03E8 Telia Telia, Sweden
134 ONID 0x045D 0x045F Eutelsat satellite system at 15°West Eutelsat S.A.
135 ONID 0x047D 0x047D Skylogic Skylogic Italia
136 ONID 0x047E 0x047F Eutelsat Satellite System at 12.5°W EUTELSAT – European Telecommunications Satellite Organization 
137 ONID 0x048D 0x048D Skylogic Skylogic Italia
138 ONID 0x048E 0x048F Eutelsat Satellite System at 48°E European Telecommunications Satellite Organization
139 ONID 0x049D 0x049F Eutelsat satellite system at 11°West Eutelsat S.A.
140 ONID 0x0500 0x0500 Vinasat Center Vinasat Center
141 ONID 0x0510 0x0510 Almajd Almajd Satellite Broadcasting FZ LLC
142 ONID 0x052D 0x052D Skylogic Skylogic Italia
143 ONID 0x052E 0x052F Eutelsat Satellite System at 8°W EUTELSAT – European Telecommunications Satellite Organization 
144 ONID 0x053D 0x053F Eutelsat satellite system at 53°East Eutelsat S.A.
145 ONID 0x055D 0x055D Skylogic at 5°W Skylogic Italia
146 ONID 0x055E 0x055F Eutelsat Satellite System at 5°W Eutelsat
147 ONID 0x0600 0x0600 UPC Satellite UPC  
148 ONID 0x0601 0x0601 UPC Cable UPC  
149 ONID 0x0602 0x0602 Tevel Tevel Cable (Israel )
150 ONID 0x071D 0x071D Skylogic at 70.5°E Skylogic Italia
151 ONID 0x071E 0x071F Eutelsat Satellite System at 70.5°E Eutelsat S.A.
152 ONID 0x077D 0x077D Skylogic Satellite System at 7°W Skylogic Italia
153 ONID 0x077E 0x077F Eutelsat Satellite System at 7°W Eutelsat S.A.
154 ONID 0x0800 0x0801 Nilesat 101 Nilesat
155 ONID 0x0880 0x0880 MEASAT 1, 91.5°E MEASAT Broadcast Network Systems SDN. BHD. (Kuala Lumpur, Malaysia)
156 ONID 0x0882 0x0882 MEASAT 2, 91.5°E MEASAT Broadcast Network Systems SDN. BHD. (Kuala Lumpur, Malaysia)
157 ONID 0x0883 0x0883 MEASAT 2, 148.0°E Hsin Chi Broadcast Company Ltd .
158 ONID 0x088F 0x088F MEASAT 3 MEASAT Broadcast Network Systems SDN. BHD. (Kuala Lumpur, Malaysia)
159 ONID 0x08A0 0x08A0 Mainland Television Limited Mainland Television Limited
160 ONID 0x0E26 0x0E26 IRIB IRIB
161 ONID 0x0FFF 0x0FFF Optus Networks Optus Networks
162 ONID 0x1000 0x1000 Optus B3 156°E Optus Communications
163 ONID 0x1001 0x1001 DISH Network Echostar Communications
164 ONID 0x1002 0x1002 Dish Network 61.5 W Echostar Communications
165 ONID 0x1003 0x1003 Dish Network 83 W Echostar Communications
166 ONID 0x1004 0x1004 Dish Network 119 W Echostar Communications
167 ONID 0x1005 0x1005 Dish Network 121 W Echostar Communications
168 ONID 0x1006 0x1006 Dish Network 148 W Echostar Communications
169 ONID 0x1007 0x1007 Dish Network 175 W Echostar Communications
170 ONID 0x1008 0x100B Dish Network W - Z Echostar Communications
171 ONID 0x1010 0x1010 ABC TV Australian Broadcasting Corporation  
172 ONID 0x1011 0x1011 SBS SBS Australia  
173 ONID 0x1012 0x1012 Nine Network Australia Nine Network Australia  
174 ONID 0x1013 0x1013 Seven Network Australia Seven Network Limited  
175 ONID 0x1014 0x1014 Network TEN Australia Network TEN Limited  
176 ONID 0x1015 0x1015 WIN Television Australia WIN Television Pty Ltd  
177 ONID 0x1016 0x1016 Prime Television Australia Prime Television Limited  
178 ONID 0x1017 0x1017 Southern Cross Broadcasting Australia Southern Cross Broadcasting (Australia) Limited  
179 ONID 0x1018 0x1018 Telecasters Australia Telecasters Australia Limited  
180 ONID 0x1019 0x1019 NBN Australia NBN Limited  
181 ONID 0x101A 0x101A Imparja Television Australia Imparja Television Australia 
182 ONID 0x101B 0x101F (Reserved for Australian broadcaster) (Reserved for Australian broadcasters)
183 ONID 0x1100 0x1100 GE Americom GE American Communications
184 ONID 0x1101 0x1101 MiTV Networks Broadcast Terrestrial Network - DVB-H MiTV Networks Sdn Bhd Malaysia
185 ONID 0x1102 0x1102 Dream Mobile TV Philippines Multimedia System, Inc.
186 ONID 0x1103 0x1103 PT MAC PT. Mediatama Anugrah Citra
187 ONID 0x1104 0x1104 Levira Mobile TV Levira AS
188 ONID 0x1105 0x1105 Mobision Alsumaria TV
189 ONID 0x1106 0x1106 Trenmobile PT. Citra Karya Investasi
190 ONID 0x1107 0x1107 VTC Mobile TV VTC Mobile TV
191 ONID 0x1700 0x1700 Echostar 2A EchoStar Communications
192 ONID 0x1701 0x1701 Echostar 2B EchoStar Communications
193 ONID 0x1702 0x1702 Echostar 2C EchoStar Communications
194 ONID 0x1703 0x1703 Echostar 2D EchoStar Communications
195 ONID 0x1704 0x1704 Echostar 2E EchoStar Communications
196 ONID 0x1705 0x1705 Echostar 2F EchoStar Communications
197 ONID 0x1706 0x1706 Echostar 2G EchoStar Communications
198 ONID 0x1707 0x1707 Echostar 2H EchoStar Communications
199 ONID 0x1708 0x1708 Echostar 2I EchoStar Communications
200 ONID 0x1709 0x1709 Echostar 2J EchoStar Communications
201 ONID 0x170A 0x170A Echostar 2K EchoStar Communications
202 ONID 0x170B 0x170B Echostar 2L EchoStar Communications
203 ONID 0x170C 0x170C Echostar 2M EchoStar Communications
204 ONID 0x170D 0x170D Echostar 2N EchoStar Communications
205 ONID 0x170E 0x170E Echostar 2O EchoStar Communications
206 ONID 0x170F 0x170F Echostar 2P EchoStar Communications
207 ONID 0x1710 0x1710 Echostar 2Q EchoStar Communications
208 ONID 0x1711 0x1711 Echostar 2R EchoStar Communications
209 ONID 0x1712 0x1712 Echostar 2S EchoStar Communications
210 ONID 0x1713 0x1713 Echostar 2T EchoStar Communications
211 ONID 0x1714 0x1714 Platforma HD Platforma HD Ltd.
212 ONID 0x1715 0x1715 Profit Group Terrestrial Profit Group SpA
213 ONID 0x1716 0x1716 JSC Mostelekom JSC Mostelekom
214 ONID 0x2000 0x2000 Thiacom 1 & 2 co-located 78.5°E Shinawatra Satellite
215 ONID 0x2014 0x2014 DTT - Andorran Digital Terrestrial Television STA
216 ONID 0x2024 0x2024 Australian Digital Terrestrial Television Australian Broadcasting Authority 
217 ONID 0x2028 0x2028 Austrian Digital Terrestrial Television ORS - Austrian Broadcasting Services
218 ONID 0x2038 0x2038 Belgian Digital Terrestrial Television BIPT
219 ONID 0x209E 0x209E Taiwanese Digital Terrestrial Television Directorate General of Telecommunications
220 ONID 0x20AA 0x20AA Comision Nacional de Television de Colombia Comision Nacional de Television de Colombia
221 ONID 0x20BF 0x20BF Croatian Post and Electronic Communications Agency (HAKOM) Croatian Post and Electronic Communications Agency (HAKOM)
222 ONID 0x20C4 0x20C4 Office Of the Commissioner of Electronic Communications and Postal Regulation Office Of the Commissioner of Electronic Communications and Postal Regulation
223 ONID 0x20CB 0x20CB Czech Republic Digital Terrestrial Television Czech Digital Group  
224 ONID 0x20D0 0x20D0 Danish Digital Terrestrial Television National Telecom Agency Denmark  
225 ONID 0x20E9 0x20E9 Estonian Digital Terrestrial Television Estonian National Communications Board
226 ONID 0x20F6 0x20F6 Finnish Digital Terrestrial Television Telecommunicatoins Administratoin Centre, Finland  
227 ONID 0x20FA 0x20FA French Digital Terrestrial Television Conseil Superieur de l'AudioVisuel
228 ONID 0x2114 0x2114 German Digital Terrestrial Television IRT on behalf of the German DVB-T broadcasts 
229 ONID 0x2124 0x2124 Gibraltar Regulatory Authority Gibraltar Regulatory Authority
230 ONID 0x2168 0x2168 Digital Terrestrial Network of Indonesia Ministry of Communication and Information Technology of the Republic of Indonesia
231 ONID 0x2174 0x2174 Irish Digital Terrestrial Television Irish Telecommunications Regulator  
232 ONID 0x2178 0x2178 Israeli Digital Terrestrial Television BEZEQ (The Israel Telecommunication Corp Ltd .)
233 ONID 0x217C 0x217C Italian Digital Terrestrial Television
234 ONID 0x21AC 0x21AC DTT - Latvian Digital Terrestrial Television Electronic Communications Office
235 ONID 0x21B8 0x21B8 DTT Lithuania Communications Regulatory Authority
236 ONID 0x21CA 0x21CA Malaysian Technical Standards Forum Bhd (MTFSB) Malaysian Technical Standards Forum Bhd (MTFSB)
237 ONID 0x2210 0x2210 Netherlands Digital Terrestrial Television Nozema  
238 ONID 0x2213 0x2213 DTT for Country of Curacao Bureau Telecommunicatie en Post
239 ONID 0x222A 0x222A DTT - New Zealand Digial Terrestrial Television TVNZ on behalf of Freeview New Zealand
240 ONID 0x2242 0x2242 Norwegian Digital Terrestrial Television Norwegian Regulator
241 ONID 0x224F 0x224F Autoridad Nacional de los Servicios Públicos Autoridad Nacional de los Servicios Públicos
242 ONID 0x2260 0x2260 DTT - Philippines Digital Terrestrial Television NTA (porivionally ABS-CBN)
243 ONID 0x2268 0x2268 DTT Poland Office of Electronic Communications
244 ONID 0x2283 0x2283 DTT - Russian Federation RTRN
245 ONID 0x22B0 0x22B0 DTT - Serbia JP Emisiona Tehnika i Veze JP Emisiona Tehnika i Veze
246 ONID 0x22BE 0x22BE Singapore Digital Terrestrial Television Singapore Broadcasting Authority  
247 ONID 0x22BF 0x22BF Telecommunications office of the Slovak republic Telecommunications office of the Slovak republic
248 ONID 0x22C1 0x22C1 DTT - Slovenian Digital Terrestrial Television APEK
249 ONID 0x22C6 0x22C6 DTT - South African Digital Terrestrial Television South African Broadcasting Corporation Ltd. (SABC), pending formation of DZONGA
250 ONID 0x22C7 0x22C7 DTT- Hungarian Digital Terrestrial Television National Communications Authority, Hungary
251 ONID 0x22C8 0x22C8 DTT- Portugal Digital Terrestrial Television ANACOM- National Communications Authority
252 ONID 0x22D4 0x22D4 Spanish Digital Terrestrial Television “Spanish Broadcasting Regulator 
253 ONID 0x22F1 0x22F1 Swedish Digital Terrestrial Television “Swedish Broadcasting Regulator ”
254 ONID 0x22F4 0x22F4 Swiss Digital Terrestrial Television OFCOM
255 ONID 0x233A 0x233A UK Digital Terrestrial Television Independent Television Commission 
256 ONID 0x2B00 0x2B00 DTT – Sky New Zealand Sky Network Television Limited
257 ONID 0x3000 0x3000 PanAmSat 4 68.5°E Pan American Satellite System
258 ONID 0x5000 0x5000 Irdeto Mux System Irdeto Test Laboratories
259 ONID 0x616D 0x616D BellSouth Entertainment BellSouth Entertainment, Atlanta, GA, USA  
260 ONID 0x6600 0x6600 UPC Satellite UPC  
261 ONID 0x6601 0x6601 UPC Cable UPC  
262 ONID 0x6602 0x6602 Comcast Media Center Comcast Media Center
263 ONID 0xA011 0xA011 Sichuan Cable TV Network Sichuan Cable TV Network (PRC)
264 ONID 0xA012 0xA012 China Network Systems STAR Koos Finance Company (Taiwan)
265 ONID 0xA013 0xA013 Versatel Versatel (Russia)
266 ONID 0xA014 0xA014 Chongqing Cable Chongqing Municipality, PRC
267 ONID 0XA015 0XA015 Guizhou Cable Guizhou Province, PRC
268 ONID 0xA016 0xA016 Hathway Cable Hathway Cable and Datacom, India
269 ONID 0xA017 0xA017 RCN Rogers Cable Network, USA
270 ONID 0xA018 0xA040 (NDS satellite services) (NDS to be allocated)
271 ONID 0xA401 0xA401 ARD ARD-Sternpunkte
272 ONID 0xA509 0xA509 Welho Cable Network Helsinki Welho
273 ONID 0xA600 0xA600 Madritel Madritel (Spain)
274 ONID 0xA602 0xA602 Tevel Tevel (Israel) (NDS)
275 ONID 0xA603 0xA603 Globo Cabo (to be recycled) Globo Cabo (Brazil) (NDS)
276 ONID 0xA604 0xA604 Cablemas (to be recycled) Cablemas (Mexico) (NDS)
277 ONID 0xA605 0xA605 INC National Cable Network Information Network Centre of SARFT (PRC) (NDS)
278 ONID 0xA606 0xA607 Pepcom GmbH Pepcom GmbH
279 ONID 0xA900 0xA900 M-net Telekommunikations GmbH M-net Telekommunikations GmbH
280 ONID 0xF000 0xF000 SMALL CABLE NETWORKS (Small cable network network operators)
281 ONID 0xF001 0xF001 Deutsche Telekom Deutsche Telekom AG
282 ONID 0xF010 0xF010 Telefónica Cable Telefónica Cable SA
283 ONID 0xF020 0xF020 Cable and Wireless Communication Cable and Wireless Communications
284 ONID 0xF100 0xF100 Casema Casema N.V .
285 ONID 0xF750 0xF750 Telewest Communications Cable Network Telewest Communications Plc  
286 ONID 0xF751 0xF751 OMNE Communications OMNE Communications Ltd.
287 ONID 0xFBFC 0xFBFC MATAV MATAV (Israel ) (NDS)
288 ONID 0xFBFD 0xFBFD Com Hem ab Com Hem ab
289 ONID 0xFBFE 0xFBFE TPS La Télévision Par Satellite
290 ONID 0xFBFF 0xFBFF Sky Italia Sky Italia Spa.
291 ONID 0xFC10 0xFC10 Rhône Vision Cable Rhône Vision Cable
292 ONID 0xFC41 0xFC41 France Telecom Cable France Telecom  
293 ONID 0xFD00 0xFD00 National Cable Network Lyonnaise Communications
294 ONID 0xFE00 0xFE00 TeleDenmark Cable TV TeleDenmark
295 ONID 0xFEC0 0xFEFF Network Interface Modules Common Interface  
296 ONID 0xFF00 0xFFFA Private_temporary_use ETSI
297 TRANSP Number MHz
298 TRANSP 49 10714
299 TRANSP 50 10729
300 TRANSP 51 10744
301 TRANSP 52 10758
302 TRANSP 53 10773
303 TRANSP 54 10788
304 TRANSP 55 10803
305 TRANSP 56 10818
306 TRANSP 57 10832
307 TRANSP 58 10847
308 TRANSP 59 10862
309 TRANSP 60 10876
310 TRANSP 61 10891
311 TRANSP 62 10906
312 TRANSP 63 10921
313 TRANSP 64 10936
314 TRANSP 33 10964
315 TRANSP 34 10979
316 TRANSP 35 10994
317 TRANSP 36 11009
318 TRANSP 37 11023
319 TRANSP 38 11038
320 TRANSP 39 11053
321 TRANSP 40 11067
322 TRANSP 41 11082
323 TRANSP 42 11097
324 TRANSP 43 11112
325 TRANSP 44 11127
326 TRANSP 45 11141
327 TRANSP 46 11156
328 TRANSP 47 11171
329 TRANSP 48 11186
330 TRANSP 1 11214
331 TRANSP 2 11229
332 TRANSP 3 11244
333 TRANSP 4 11258
334 TRANSP 5 11273
335 TRANSP 6 11288
336 TRANSP 7 11303
337 TRANSP 8 11318
338 TRANSP 9 11332
339 TRANSP 10 11347
340 TRANSP 11 11362
341 TRANSP 12 11376
342 TRANSP 13 11391
343 TRANSP 14 11406
344 TRANSP 15 11421
345 TRANSP 16 11436
346 TRANSP 17 11464
347 TRANSP 18 11479
348 TRANSP 19 11494
349 TRANSP 20 11509
350 TRANSP 21 11523
351 TRANSP 22 11538
352 TRANSP 23 11553
353 TRANSP 24 11568
354 TRANSP 25 11582
355 TRANSP 26 11597
356 TRANSP 27 11612
357 TRANSP 28 11627
358 TRANSP 29 11641
359 TRANSP 30 11656
360 TRANSP 31 11671
361 TRANSP 32 11686
362 TRANSP 65 11720
363 TRANSP 66 11739
364 TRANSP 67 11758
365 TRANSP 68 11778
366 TRANSP 69 11798
367 TRANSP 70 11817
368 TRANSP 71 11836
369 TRANSP 72 11856
370 TRANSP 73 11876
371 TRANSP 74 11895
372 TRANSP 75 11914
373 TRANSP 76 11934
374 TRANSP 77 11954
375 TRANSP 78 11973
376 TRANSP 79 11992
377 TRANSP 80 12012
378 TRANSP 81 12032
379 TRANSP 82 12051
380 TRANSP 83 12070
381 TRANSP 84 12090
382 TRANSP 85 12110
383 TRANSP 86 12129
384 TRANSP 87 12148
385 TRANSP 88 12168
386 TRANSP 89 12188
387 TRANSP 90 12207
388 TRANSP 91 12226
389 TRANSP 92 12246
390 TRANSP 93 12266
391 TRANSP 94 12285
392 TRANSP 95 12304
393 TRANSP 96 12324
394 TRANSP 97 12344
395 TRANSP 98 12363
396 TRANSP 99 12382
397 TRANSP 100 12402
398 TRANSP 101 12422
399 TRANSP 102 12441
400 TRANSP 103 12460
401 TRANSP 104 12480
402 TRANSP 105 12515
403 TRANSP 106 12522
404 TRANSP 107 12545
405 TRANSP 108 12552
406 TRANSP 109 12574
407 TRANSP 110 12581
408 TRANSP 111 12604
409 TRANSP 112 12610
410 TRANSP 113 12633
411 TRANSP 114 12640
412 TRANSP 115 12663
413 TRANSP 116 12670
414 TRANSP 117 12692
415 TRANSP 118 12699
416 TRANSP 119 12722
417 TRANSP 120 12728
418 SERVICETYPE Number Description
419 SERVICETYPE 01 SD-TV
420 SERVICETYPE 02 Radio
421 SERVICETYPE 12 Daten/Test
422 SERVICETYPE 25 HD-TV
423 SERVICETYPE 211 Sky Select
424 DVBT Channel MHz
425 DVBT 21 474
426 DVBT 22 482
427 DVBT 23 490
428 DVBT 24 498
429 DVBT 25 506
430 DVBT 26 514
431 DVBT 27 522
432 DVBT 28 530
433 DVBT 29 538
434 DVBT 30 546
435 DVBT 31 554
436 DVBT 32 562
437 DVBT 33 570
438 DVBT 34 578
439 DVBT 35 586
440 DVBT 36 594
441 DVBT 37 602
442 DVBT 38 610
443 DVBT 39 618
444 DVBT 40 626
445 DVBT 41 634
446 DVBT 42 642
447 DVBT 43 650
448 DVBT 44 658
449 DVBT 45 666
450 DVBT 46 674
451 DVBT 47 682
452 DVBT 48 690
453 DVBT 49 698
454 DVBT 50 706
455 DVBT 51 714
456 DVBT 52 722
457 DVBT 53 730
458 DVBT 54 738
459 DVBT 55 746
460 DVBT 56 754
461 DVBT 57 762
462 DVBT 58 770
463 DVBT 59 778
464 DVBT 60 786
465 DVBT 61 794
466 DVBT 62 802
467 DVBT 63 810
468 DVBT 64 818
469 DVBT 65 826
470 DVBT 66 834
471 DVBT 67 842
472 DVBT 68 850
473 DVBT 69 858

View File

@@ -0,0 +1,205 @@
using System;
using System.Collections.Generic;
namespace ChanSort.Api
{
public class ChannelInfo
{
private string uid;
/// <summary>
/// List of channels that have the same UID as this channel and were not added to the channel list directly
/// </summary>
public readonly List<ChannelInfo> Duplicates = new List<ChannelInfo>();
public SignalSource SignalSource { get; private set; }
public SignalType SignalType { get; private set; }
public int RecordIndex { get; set; }
public int RecordOrder { get; set; }
public int OldProgramNr { get; set; }
public int NewProgramNr { get; set; }
public string Name { get; set; }
public string ShortName { get; set; }
public Favorites Favorites { get; set; }
public bool Skip { get; set; }
public bool Lock { get; set; }
public bool Hidden { get; set; }
public bool? Encrypted { get; set; }
public string ChannelOrTransponder { get; set; }
public string Satellite { get; set; }
public decimal FreqInMhz { get; set; }
public char Polarity { get; set; }
public int ServiceId { get; set; }
public int VideoPid { get; set; }
public int AudioPid { get; set; }
public int OriginalNetworkId { get; set; }
public int TransportStreamId { get; set; }
public int SymbolRate { get; set; }
public int ServiceType { get; set; }
public string Debug { get; private set; }
public string SatPosition { get; set; }
public Transponder Transponder { get; set; }
public bool IsNameModified { get; set; }
#region ctor()
/// <summary>
/// Constructor for exiting TV channel
/// </summary>
public ChannelInfo(SignalSource source, SignalType type, int index, int oldProgNr, string name)
{
this.SignalSource = source;
this.SignalType = type;
this.RecordIndex = index;
this.RecordOrder = index;
this.OldProgramNr = oldProgNr;
this.Name = name;
this.Encrypted = null;
}
/// <summary>
/// Constructor for reference list channels which no longer exist in TV list
/// </summary>
/// <param name="source"></param>
/// <param name="type"></param>
/// <param name="uid"></param>
/// <param name="newProgNr"></param>
/// <param name="name"></param>
public ChannelInfo(SignalSource source, SignalType type, string uid, int newProgNr, string name)
{
this.SignalSource = source;
this.SignalType = type;
this.Uid = uid;
this.NewProgramNr = newProgNr;
this.Name = name;
this.Encrypted = null;
}
#endregion
#region Uid
public string Uid
{
get
{
if (this.uid == null)
{
if ((this.SignalSource & SignalSource.Digital) == 0)
this.uid = "A-0-" + (int)(this.FreqInMhz*20) + "-0";
else if (this.SignalSource == SignalSource.DvbS)
this.uid = "S" + this.SatPosition + "-" + this.OriginalNetworkId + "-" + this.TransportStreamId + "-" + this.ServiceId;
else if (this.SignalSource == SignalSource.HdPlusD)
this.uid = "H" + this.OriginalNetworkId + "-" + this.ServiceId;
else
this.uid = "C-" + this.OriginalNetworkId + "-" + this.TransportStreamId + "-" + this.ServiceId + "-" + this.ChannelOrTransponder;
}
return this.uid;
}
set { this.uid = value; }
}
#endregion
#region ToString(), Equals(), GetHashCode()
public override string ToString()
{
return this.Name;
}
public override bool Equals(object obj)
{
//ChannelInfo that = obj as ChannelInfo;
//return that != null && this.Uid == that.Uid && this.OldProgramNr == that.OldProgramNr;
return ReferenceEquals(this, obj);
}
public override int GetHashCode()
{
return this.Uid.GetHashCode() + this.OldProgramNr;
}
#endregion
#region NetworkName, NetworkOperator
public string NetworkName
{
get
{
var network = LookupData.Instance.GetNetwork(this.OriginalNetworkId);
return network == null ? null : network.Name;
}
}
public string NetworkOperator
{
get
{
var network = LookupData.Instance.GetNetwork(this.OriginalNetworkId);
return network == null ? null : network.Operator;
}
}
#endregion
#region ServiceTypeName
public string ServiceTypeName { get { return LookupData.Instance.GetServiceTypeDescription(this.ServiceType); } }
#endregion
#region GetFavString()
public static string GetFavString(Favorites favorites)
{
string sep = "";
string text = "";
foreach (Favorites favMask in Enum.GetValues(typeof(Favorites)))
{
if ((favorites & favMask) != 0)
{
text += sep + favMask.ToString();
sep = ",";
}
}
return text;
}
#endregion
#region ParseFavString()
public static Favorites ParseFavString(string value)
{
Favorites favMask = 0;
foreach (Favorites fav in Enum.GetValues(typeof (Favorites)))
{
foreach (char c in value)
{
if (c == fav.ToString()[0])
{
favMask |= fav;
break;
}
}
}
return favMask;
}
#endregion
#region AddDebug()
public void AddDebug(byte val)
{
if (this.Debug == null)
this.Debug = val.ToString("x2");
else
this.Debug += " " + val.ToString("x2");
}
public void AddDebug(ushort val)
{
if (this.Debug == null)
this.Debug = val.ToString("x2");
else
this.Debug += " " + val.ToString("x4");
}
public unsafe void AddDebug(byte* ptr, int len)
{
for (int i = 0; i < len; i++)
this.AddDebug(ptr[i]);
}
#endregion
}
}

View File

@@ -0,0 +1,176 @@
using System;
using System.Collections.Generic;
using System.Text;
using System.Linq;
namespace ChanSort.Api
{
public class ChannelList
{
private readonly SignalSource source;
private readonly SignalType type;
private readonly IList<ChannelInfo> channels = new List<ChannelInfo>();
private readonly Dictionary<string, IList<ChannelInfo>> channelByUid = new Dictionary<string, IList<ChannelInfo>>();
private readonly Dictionary<int, ChannelInfo> channelByProgNr = new Dictionary<int, ChannelInfo>();
private readonly Dictionary<string, IList<ChannelInfo>> channelByName = new Dictionary<string, IList<ChannelInfo>>();
private int insertProgramNr = 1;
private int duplicateUidCount;
private int duplicateProgNrCount;
public ChannelList(SignalSource source, SignalType type)
{
this.source = source;
this.type = type;
}
public SignalSource SignalSource { get { return this.source; } }
public SignalType SignalType { get { return this.type; } }
public IList<ChannelInfo> Channels { get { return this.channels; } }
public int Count { get { return channels.Count; } }
public int DuplicateUidCount { get { return duplicateUidCount; } }
public int DuplicateProgNrCount { get { return duplicateProgNrCount; } }
#region ShortCaption
public string ShortCaption
{
get
{
StringBuilder sb = new StringBuilder();
switch (this.source)
{
case SignalSource.AnalogC: sb.Append("Analog Cable"); break;
case SignalSource.AnalogT: sb.Append("Analog Antenna"); break;
case SignalSource.AnalogCT: sb.Append("Analog Cable/Antenna"); break;
case SignalSource.DvbC: sb.Append("DVB-C"); break;
case SignalSource.DvbT: sb.Append("DVB-T"); break;
case SignalSource.DvbCT: sb.Append("DVB-C/T"); break;
case SignalSource.DvbS: sb.Append("DVB-S"); break;
case SignalSource.HdPlusD: sb.Append("Astra HD Plus"); break;
default: sb.Append(this.source.ToString()); break;
}
switch (this.type)
{
case SignalType.Tv: sb.Append(" - TV"); break;
case SignalType.Radio: sb.Append(" - Radio"); break;
case SignalType.Mixed: break;
default: sb.Append(this.type.ToString()); break;
}
return sb.ToString();
}
}
#endregion
#region Caption
public string Caption
{
get
{
string cap = this.ShortCaption;
int validChannelCount = this.Channels.Count(ch => ch.OldProgramNr != 0);
return cap + " (" + validChannelCount + ")";
}
}
#endregion
#region InsertProgramNumber
public int InsertProgramNumber
{
get { return this.Count == 0 ? 1 : this.insertProgramNr; }
set { this.insertProgramNr = Math.Max(1, value); }
}
#endregion
#region AddChannel()
public string AddChannel(ChannelInfo ci)
{
IList<ChannelInfo> others;
if (this.channelByUid.TryGetValue(ci.Uid, out others))
{
++duplicateUidCount;
ChannelInfo twin = others.FirstOrDefault(c => c.OldProgramNr == ci.OldProgramNr);
if (twin != null)
{
string warning = null;
if (ci.OldProgramNr != 0)
{
warning = string.Format(Resources.ChannelList_AddChannel__DuplicateUid,
this.ShortCaption, ci.Name, twin.RecordIndex, twin.OldProgramNr, ci.RecordIndex,
ci.OldProgramNr);
}
twin.Duplicates.Add(ci);
ci.OldProgramNr = 0;
return warning;
}
}
else
{
others = new List<ChannelInfo>();
this.channelByUid.Add(ci.Uid, others);
others.Add(ci);
}
string warning2 = null;
bool isDupeProgNr = false;
if (ci.OldProgramNr != 0)
{
ChannelInfo other;
this.channelByProgNr.TryGetValue(ci.OldProgramNr, out other);
if (other != null)
{
warning2 = string.Format(Resources.ChannelList_ProgramNrAssignedToMultipleChannels,
this.ShortCaption, ci.OldProgramNr, other.RecordIndex, other.Name, ci.RecordIndex, ci.Name);
++duplicateProgNrCount;
isDupeProgNr = true;
}
}
if (!isDupeProgNr)
this.channelByProgNr[ci.OldProgramNr] = ci;
var lowerName = ci.Name.ToLower().Trim();
var byNameList = this.channelByName.TryGet(lowerName);
if (byNameList == null)
{
byNameList = new List<ChannelInfo>();
this.channelByName[lowerName] = byNameList;
}
byNameList.Add(ci);
this.channels.Add(ci);
return warning2;
}
#endregion
#region GetChannelByUid()
public IList<ChannelInfo> GetChannelByUid(string uid)
{
IList<ChannelInfo> channel;
this.channelByUid.TryGetValue(uid, out channel);
return channel ?? new List<ChannelInfo>(0);
}
#endregion
#region ToString()
public override string ToString()
{
return this.Caption;
}
#endregion
#region GetChannelByName()
public IEnumerable<ChannelInfo> GetChannelByName(string name)
{
var hits = this.channelByName.TryGet(name.ToLower().Trim());
return hits ?? new List<ChannelInfo>();
}
#endregion
#region GetChannelByNewProgNr()
public IList<ChannelInfo> GetChannelByNewProgNr(int newProgNr)
{
return this.channels.Where(c => c.NewProgramNr == newProgNr).ToList();
}
#endregion
}
}

View File

@@ -0,0 +1,82 @@
using System.Collections.Generic;
using System.Text;
namespace ChanSort.Api
{
public class DataRoot
{
private readonly IDictionary<int, Satellite> satellites = new Dictionary<int, Satellite>();
private readonly IDictionary<int, Transponder> transponder = new Dictionary<int, Transponder>();
private readonly IList<ChannelList> channelLists = new List<ChannelList>();
private readonly StringBuilder warnings = new StringBuilder();
public StringBuilder Warnings { get { return this.warnings; } }
public IDictionary<int, Satellite> Satellites { get { return this.satellites; } }
public IDictionary<int, Transponder> Transponder { get { return this.transponder; } }
public ICollection<ChannelList> ChannelLists { get { return this.channelLists; } }
public bool IsEmpty { get { return this.channelLists.Count == 0; } }
public bool NeedsSaving { get; set; }
public Favorites SupportedFavorites { get; set; }
public DataRoot()
{
this.SupportedFavorites = Favorites.A | Favorites.B | Favorites.C | Favorites.D;
}
#region AddSatellite()
public virtual void AddSatellite(Satellite satellite)
{
this.satellites.Add(satellite.Id, satellite);
}
#endregion
#region AddTransponder()
public virtual void AddTransponder(Satellite sat, Transponder trans)
{
trans.Satellite = sat;
if (this.transponder.ContainsKey(trans.Id))
{
this.warnings.AppendFormat("Duplicate transponder data record for satellite #{0} with id {1}\r\n", sat.Id, trans.Id);
return;
}
sat.Transponder.Add(trans.Id, trans);
this.transponder.Add(trans.Id, trans);
}
#endregion
#region AddChannelList()
public virtual void AddChannelList(ChannelList list)
{
this.channelLists.Add(list);
}
#endregion
#region AddChannel()
public virtual void AddChannel(ChannelList list, ChannelInfo channel)
{
string warning = list.AddChannel(channel);
if (warning != null)
this.Warnings.AppendLine(warning);
}
#endregion
#region GetChannelList()
public ChannelList GetChannelList(SignalSource signalSource, SignalType signalType, bool createIfNotExists)
{
foreach (var list in this.channelLists)
{
if ((list.SignalSource&SignalSource.Digital) != (signalSource&SignalSource.Digital)) // match digital/analog
continue;
if (((int)list.SignalSource & 0x0F & (int)signalSource) == 0) // match any of cable/terrestrial/satellite
continue;
if (list.SignalType == signalType || list.SignalType == SignalType.Mixed) // match radio/tv/any
return list;
}
ChannelList newList = new ChannelList(signalSource, signalType);
this.AddChannelList(newList);
return newList;
}
#endregion
}
}

View File

@@ -0,0 +1,36 @@
using System;
namespace ChanSort.Api
{
[Flags]
public enum SignalSource
{
Analog = 0x00,
Digital = 0x10,
Cable = 0x01,
Antenna = 0x02,
Sat = 0x04,
HdPlus = 0x08,
AnalogC=Analog + Cable,
AnalogT=Analog + Antenna,
AnalogCT=Analog + Cable + Antenna,
DvbC = Digital + Cable,
DvbT= Digital + Antenna,
DvbCT= Digital + Cable + Antenna,
DvbS= Digital + Sat,
HdPlusD = Digital + HdPlus
}
public enum SignalType { Tv, Radio, Mixed }
[Flags]
public enum Favorites : byte { A = 0x01, B = 0x02, C = 0x04, D = 0x08, E = 0x10 }
public enum UnsortedChannelMode
{
AppendInOrder,
AppendAlphabetically,
Hide
}
}

View File

@@ -0,0 +1,198 @@
using System.Collections.Generic;
using System.IO;
using System.Reflection;
namespace ChanSort.Api
{
public class LookupData
{
private readonly IDictionary<int, NetworkInfo> networks = new Dictionary<int, NetworkInfo>();
private readonly IDictionary<int, int> transponderNrByFreqInMhz = new Dictionary<int, int>();
private readonly IDictionary<int, int> transponderFreqInMhzByNr = new Dictionary<int, int>();
private readonly IDictionary<int, string> serviceTypeDescriptions = new Dictionary<int, string>();
private readonly IDictionary<int, int> dvbtFreqInMhzByTransponder = new Dictionary<int, int>();
public static readonly LookupData Instance = new LookupData();
private LookupData()
{
this.LoadDataFromCsvFile();
}
#region GetNetwork()
public NetworkInfo GetNetwork(int networkId)
{
NetworkInfo network;
this.networks.TryGetValue((ushort)networkId, out network);
return network;
}
#endregion
#region GetTransponderNumber(), GetTransponderFrequency()
public int GetTransponderNumber(int frequencyInMhz)
{
int number;
bool found = this.transponderNrByFreqInMhz.TryGetValue(frequencyInMhz, out number) ||
this.transponderNrByFreqInMhz.TryGetValue(frequencyInMhz - 1, out number) ||
this.transponderNrByFreqInMhz.TryGetValue(frequencyInMhz + 1, out number) ||
this.transponderNrByFreqInMhz.TryGetValue(frequencyInMhz - 2, out number) ||
this.transponderNrByFreqInMhz.TryGetValue(frequencyInMhz + 2, out number);
return found ? number : 0;
}
public int GetTransponderFrequency(int transponderNr)
{
return this.transponderNrByFreqInMhz.TryGet(transponderNr);
}
#endregion
#region GetDvbtTransponderFrequency()
public int GetDvbtTransponderFrequency(int transponderNr)
{
return this.dvbtFreqInMhzByTransponder.TryGet(transponderNr);
}
#endregion
#region GetServiceTypeDescription()
public string GetServiceTypeDescription(int serviceType)
{
string descr;
this.serviceTypeDescriptions.TryGetValue(serviceType, out descr);
return descr;
}
#endregion
#region LoadDataFromCsvFile()
public void LoadDataFromCsvFile()
{
this.networks.Clear();
this.transponderFreqInMhzByNr.Clear();
this.transponderNrByFreqInMhz.Clear();
this.serviceTypeDescriptions.Clear();
this.dvbtFreqInMhzByTransponder.Clear();
string file = Path.Combine(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "lookup.csv");
if (!File.Exists(file))
return;
using (var reader = new StreamReader(file, System.Text.Encoding.UTF8))
{
string line;
while ((line = reader.ReadLine()) != null)
{
var fields = CsvFile.Parse(line, ';');
if (fields.Count == 0)
continue;
switch (fields[0].ToLower())
{
case "onid": this.ParseNetwork(fields); break;
case "dvbt": this.ParseDvbtTransponder(fields); break;
case "transp": this.ParseTransponder(fields); break;
case "servicetype": this.ParseServiceType(fields); break;
}
}
}
}
#endregion
#region AddNetwork()
private void AddNetwork(NetworkInfo network)
{
this.networks[network.OriginalNetworkId] = network;
}
#endregion
#region AddTransponderMapping()
private void AddTransponderMapping(int transponderNr, int frequencyInMhz)
{
this.transponderNrByFreqInMhz[frequencyInMhz] = transponderNr;
this.transponderFreqInMhzByNr[transponderNr] = frequencyInMhz;
}
#endregion
#region AddDvbtTransponderMapping()
private void AddDvbtTransponderMapping(int transponderNr, int frequencyInMhz)
{
this.dvbtFreqInMhzByTransponder[transponderNr] = frequencyInMhz;
}
#endregion
#region AddServiceType()
public void AddServiceType(int serviceType, string description)
{
this.serviceTypeDescriptions[serviceType] = description;
}
#endregion
#region ParseNetwork()
private void ParseNetwork(IList<string> fields)
{
if (fields.Count < 3)
return;
int start = ParseNumber(fields[1]);
int end = ParseNumber(fields[2]);
if (start == 0 || end == 0 || start > end)
return;
for (int onid = start; onid <= end; onid++)
{
var network = new NetworkInfo();
network.OriginalNetworkId = onid;
if (fields.Count >= 4)
network.Name = fields[3];
if (fields.Count >= 5)
network.Operator = fields[4];
this.AddNetwork(network);
}
}
#endregion
#region ParseNumber()
private int ParseNumber(string nr)
{
int number;
if (nr.StartsWith("0x"))
int.TryParse(nr.Substring(2), System.Globalization.NumberStyles.HexNumber, System.Globalization.NumberFormatInfo.InvariantInfo, out number);
else
int.TryParse(nr, System.Globalization.NumberStyles.Integer, System.Globalization.NumberFormatInfo.InvariantInfo, out number);
return number;
}
#endregion
#region ParseTransponder()
private void ParseTransponder(IList<string> fields)
{
if (fields.Count < 3)
return;
int nr, freq;
int.TryParse(fields[1], out nr);
int.TryParse(fields[2], out freq);
if (nr == 0 || freq == 0)
return;
this.AddTransponderMapping(nr, freq);
}
#endregion
#region ParseTransponder()
private void ParseDvbtTransponder(IList<string> fields)
{
if (fields.Count < 3)
return;
int nr, freq;
int.TryParse(fields[1], out nr);
int.TryParse(fields[2], out freq);
if (nr == 0 || freq == 0)
return;
this.AddDvbtTransponderMapping(nr, freq);
}
#endregion
#region ParseServiceType()
private void ParseServiceType(IList<string> fields)
{
if (fields.Count < 3) return;
int serviceType = this.ParseNumber(fields[1]);
if (serviceType <= 0) return;
this.AddServiceType(serviceType, fields[2]);
}
#endregion
}
}

View File

@@ -0,0 +1,9 @@
namespace ChanSort.Api
{
public class NetworkInfo
{
public int OriginalNetworkId { get; set; }
public string Name { get; set; }
public string Operator { get; set; }
}
}

View File

@@ -0,0 +1,25 @@
using System.Collections.Generic;
namespace ChanSort.Api
{
public class Satellite
{
private readonly int id;
private readonly IDictionary<int, Transponder> transponder = new Dictionary<int, Transponder>();
public int Id { get { return this.id; } }
public string Name { get; set; }
public string OrbitalPosition { get; set; }
public IDictionary<int, Transponder> Transponder { get { return this.transponder; } }
public Satellite(int id)
{
this.id = id;
}
public override string ToString()
{
return Name;
}
}
}

View File

@@ -0,0 +1,22 @@
namespace ChanSort.Api
{
public class Transponder
{
private readonly int id;
public int Id { get { return id; } }
public Satellite Satellite { get; set; }
public decimal FrequencyInMhz { get; set; }
public int Number { get; set; }
public int SymbolRate { get; set; }
public char Polarity { get; set; }
public int OriginalNetworkId { get; set; }
public int TransportStreamId { get; set; }
public Transponder(int id)
{
this.id = id;
}
}
}

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("API")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("API")]
[assembly: AssemblyCopyright("Copyright © 2012")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("5cd52683-ba04-4610-8435-ba409a37e08f")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

81
ChanSort.Api/Resources.Designer.cs generated Normal file
View File

@@ -0,0 +1,81 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.586
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ChanSort.Api {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ChanSort.Api.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to {0}: Channel &apos;{1}&apos; has multiple data records: index {2}=Pr#{3} and index {4}=Pr#{5}.
/// </summary>
internal static string ChannelList_AddChannel__DuplicateUid {
get {
return ResourceManager.GetString("ChannelList_AddChannel__DuplicateUid", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to {0} Program #{1} is assigned to multiple channels: index {2}=&apos;{3}&apos; and index {4}=&apos;{5}&apos;.
/// </summary>
internal static string ChannelList_ProgramNrAssignedToMultipleChannels {
get {
return ResourceManager.GetString("ChannelList_ProgramNrAssignedToMultipleChannels", resourceCulture);
}
}
}
}

0
ChanSort.Api/Resources.de.Designer.cs generated Normal file
View File

View File

@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ChannelList_ProgramNrAssignedToMultipleChannels" xml:space="preserve">
<value>{0} Program #{1} ist mehreren Sendern zugeordnet: Index {2}='{3}' und Index {4}='{5}'</value>
</data>
<data name="ChannelList_AddChannel__DuplicateUid" xml:space="preserve">
<value>{0}: Sender '{1}' ist in mehreren Datensätzen enthalten: Index {2}=Pr#{3} und Index {4}=Pr#{5}</value>
</data>
</root>

126
ChanSort.Api/Resources.resx Normal file
View File

@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="ChannelList_ProgramNrAssignedToMultipleChannels" xml:space="preserve">
<value>{0} Program #{1} is assigned to multiple channels: index {2}='{3}' and index {4}='{5}'</value>
</data>
<data name="ChannelList_AddChannel__DuplicateUid" xml:space="preserve">
<value>{0}: Channel '{1}' has multiple data records: index {2}=Pr#{3} and index {4}=Pr#{5}</value>
</data>
</root>

View File

@@ -0,0 +1,151 @@
using System.Text;
namespace ChanSort.Api
{
public unsafe class ChannelMappingBase : DataMapping
{
protected const string offInUse = "offInUse";
protected const string maskInUse = "maskInUse";
protected const string offProgramNr = "offProgramNr";
protected const string offName = "offName";
protected const string offNameLength = "offNameLength";
protected const string lenName = "lenName";
protected const string offSkip = "offSkip";
protected const string maskSkip = "maskSkip";
protected const string offLock = "offLock";
protected const string maskLock = "maskLock";
protected const string offLockSkipHide = "offHide";
protected const string maskHide = "maskHide";
protected const string offFavorites = "offFavorites";
private const string offDeleted = "offDeleted";
private const string maskDeleted = "maskDeleted";
#region ctor()
public ChannelMappingBase(IniFile.Section settings, int length, Encoding stringEncoding) :
base(settings, length, stringEncoding)
{
}
#endregion
#region InUse
public virtual bool InUse
{
get
{
var val = this.GetOffsets(offInUse);
return val.Length == 0 || this.GetFlag(offInUse, maskInUse);
}
}
#endregion
#region ProgramNr
public virtual ushort ProgramNr
{
get { return this.GetWord(offProgramNr); }
set { this.SetWord(offProgramNr, value); }
}
#endregion
#region NameLength
public virtual int NameLength
{
get
{
var off = this.GetOffsets(offNameLength);
if (off.Length > 0)
return this.GetWord(off[0]);
return MaxNameLength;
}
set { this.SetByte(offNameLength, (byte) value); }
}
#endregion
#region MaxNameLength
public virtual int MaxNameLength
{
get
{
var off = this.GetOffsets(lenName); // not an offset!
return off.Length > 0 ? off[0] : 0;
}
}
#endregion
#region Name
public virtual string Name
{
get { return this.GetString(offName, this.NameLength); }
// ReSharper disable ValueParameterNotUsed
set { }
// ReSharper restore ValueParameterNotUsed
}
#endregion
#region NamePtr
public virtual byte* NamePtr
{
get { return this.DataPtr + this.GetOffsets(offName)[0]; }
set
{
int maxLen = this.MaxNameLength - 1;
if (maxLen == 0)
maxLen = this.NameLength;
foreach (int off in this.GetOffsets(offName))
{
int i;
for (i = 0; i < maxLen && value[i] != 0; i++)
this.DataPtr[off + i] = value[i];
for (; i <= maxLen; i++)
this.DataPtr[off + i] = 0;
}
}
}
#endregion
#region ShortName
public virtual string ShortName { get; set; }
#endregion
#region Skip
public virtual bool Skip
{
get { return this.GetFlag(offSkip, maskSkip); }
set { this.SetFlag(offSkip, maskSkip, value); }
}
#endregion
#region Lock
public virtual bool Lock
{
get { return this.GetFlag(offLock, maskLock); }
set { this.SetFlag(offLock, maskLock, value); }
}
#endregion
#region Hide
public virtual bool Hide
{
get { return this.GetFlag(offLockSkipHide, maskHide); }
set { this.SetFlag(offLockSkipHide, maskHide, value); }
}
#endregion
#region Favorites
public virtual Favorites Favorites
{
get { return (Favorites) this.GetByte(offFavorites); }
set { this.SetByte(offFavorites, (byte) value); }
}
#endregion
#region IsDeleted
public virtual bool IsDeleted
{
get { return this.GetFlag(offDeleted, maskDeleted); }
set { this.SetFlag(offDeleted, maskDeleted, value); }
}
#endregion
}
}

View File

@@ -0,0 +1,60 @@
namespace ChanSort.Api
{
public static class Crc32
{
private const uint CrcMask = 0xFFFFFFFF;
private const uint CrcPoly = 0xEDB88320;
private static readonly uint[] crc32Table;
static Crc32()
{
crc32Table = InitCrc32Table();
}
#region InitCrc32Table()
private static uint[] InitCrc32Table()
{
var crcTable = new uint[256];
for (uint i = 0; i < 256; i++)
{
uint r = i;
for (uint j = 8; j > 0; j--)
{
if ((r & 1) == 1)
r = ((r >> 1) ^ CrcPoly);
else
r >>= 1;
}
crcTable[i] = r;
}
return crcTable;
}
#endregion
#region CalcCrc32()
public static unsafe uint CalcCrc32(byte* block, int length)
{
uint crc32 = CrcMask;
for (int i = 0; i < length; i++)
crc32 = crc32Table[(crc32 & 0xff) ^ block[i]] ^ (crc32 >> 8);
return crc32;
}
#endregion
#region Crack()
public static unsafe int Crack(byte* block, int maxLen, uint checksum)
{
uint crc32 = CrcMask;
for (int i = 0; i < maxLen; i++)
{
if (crc32 == checksum)
return i;
crc32 = crc32Table[(crc32 & 0xff) ^ block[i]] ^ (crc32 >> 8);
}
return 0;
}
#endregion
}
}

View File

@@ -0,0 +1,44 @@
using System.Collections.Generic;
using System.Text;
namespace ChanSort.Api
{
public static class CsvFile
{
public static IList<string> Parse(string line, char separator)
{
if (line.EndsWith("\n")) line = line.Substring(0, line.Length - 1);
if (line.EndsWith("\r")) line = line.Substring(0, line.Length - 1);
List<string> tokens = new List<string>();
if (line.Length == 0)
return tokens;
bool inQuote = false;
StringBuilder token = new StringBuilder();
for(int i = 0, len=line.Length; i<len; i++)
{
char ch = line[i];
if (ch == separator && !inQuote)
{
tokens.Add(token.ToString());
token.Remove(0, token.Length);
continue;
}
if (ch == '"')
{
if (inQuote && i+1 < len && line[i+1] == '"')
{
token.Append('"');
++i;
continue;
}
inQuote = !inQuote;
}
token.Append(ch);
}
tokens.Add(token.ToString());
return tokens;
}
}
}

View File

@@ -0,0 +1,204 @@
using System.Text;
namespace ChanSort.Api
{
public unsafe class DataMapping
{
protected readonly Encoding stringEncoding;
protected readonly IniFile.Section settings;
protected readonly int length;
#region ctor()
public DataMapping(IniFile.Section settings, int structureLength, Encoding stringEncoding)
{
this.settings = settings;
this.length = structureLength;
this.stringEncoding = stringEncoding;
}
#endregion
#region DataPtr
public byte* DataPtr { get; set; }
#endregion
#region DataLength
public int DataLength { get { return this.length; } }
#endregion
#region Next()
public void Next()
{
this.DataPtr += this.length;
}
#endregion
#region GetOffsets()
protected int[] GetOffsets(string key)
{
return settings.GetIntList(key);
}
#endregion
#region GetByte()
public byte GetByte(int off)
{
return off < 0 ? (byte)0 : this.DataPtr[off];
}
public byte GetByte(string key)
{
var offsets = settings.GetIntList(key);
return offsets.Length > 0 ? this.GetByte(offsets[0]) : (byte)0;
}
#endregion
#region GetWord()
public ushort GetWord(int off)
{
return off < 0 ? (ushort)0 : *(ushort*) (this.DataPtr + off);
}
public ushort GetWord(string key)
{
var offsets = settings.GetIntList(key);
return offsets.Length > 0 ? this.GetWord(offsets[0]) : (ushort)0;
}
#endregion
#region GetDword()
public uint GetDword(int off)
{
return off < 0 ? 0 : *(uint*) (this.DataPtr + off);
}
public uint GetDword(string key)
{
var offsets = settings.GetIntList(key);
return offsets.Length > 0 ? this.GetDword(offsets[0]) : 0;
}
#endregion
#region GetFloat()
public float GetFloat(int off)
{
return off < 0 ? 0 : *(float*) (this.DataPtr + off);
}
public float GetFloat(string key)
{
var offsets = settings.GetIntList(key);
return offsets.Length > 0 ? this.GetFloat(offsets[0]) : 0;
}
#endregion
#region GetFlag()
public bool GetFlag(int offset, byte mask)
{
return offset >= 0 && (this.GetByte(offset) & mask) != 0;
}
public bool GetFlag(string valueKey, string maskKey)
{
byte mask = (byte)settings.GetInt(maskKey);
var offsets = settings.GetIntList(valueKey);
return offsets.Length > 0 && this.GetFlag(offsets[0], mask);
}
#endregion
#region GetString()
public string GetString(int offset, int maxByteLen)
{
if (offset < 0) return null;
byte[] buffer = new byte[maxByteLen];
for (int i = 0; i < maxByteLen; i++)
buffer[i] = this.DataPtr[offset + i];
return stringEncoding.GetString(buffer).TrimEnd('\0');
}
public string GetString(string key, int maxLen)
{
var offsets = settings.GetIntList(key);
return offsets.Length == 0 ? null : GetString(offsets[0], maxLen);
}
#endregion
#region SetByte()
public void SetByte(int off, byte value)
{
if (off >= 0)
this.DataPtr[off] = value;
}
public void SetByte(string key, byte value)
{
var offsets = settings.GetIntList(key);
foreach(int offset in offsets)
this.SetByte(offset, value);
}
#endregion
#region SetWord()
public void SetWord(int off, int value)
{
if (off >= 0)
*(ushort*) (this.DataPtr + off) = (ushort)value;
}
public void SetWord(string key, int value)
{
var offsets = settings.GetIntList(key);
foreach (int offset in offsets)
this.SetWord(offset, value);
}
#endregion
#region SetDword()
public void SetDword(int off, uint value)
{
if (off >= 0)
*(uint*) (this.DataPtr + off) = value;
}
public void SetDword(string key, uint value)
{
var offsets = settings.GetIntList(key);
foreach (int offset in offsets)
this.SetDword(offset, value);
}
#endregion
#region SetFloat()
public void SetFloat(int off, float value)
{
if (off >= 0)
*(float*)(this.DataPtr + off) = value;
}
public void SetFloat(string key, float value)
{
var offsets = settings.GetIntList(key);
foreach (int offset in offsets)
this.SetFloat(offset, value);
}
#endregion
#region SetFlag()
public void SetFlag(int offset, byte mask, bool set)
{
byte val = this.GetByte(offset);
this.SetByte(offset, (byte)(set ? val | mask : val & ~mask));
}
public void SetFlag(string valueKey, string maskKey, bool set)
{
byte mask = (byte)settings.GetInt(maskKey);
var offsets = settings.GetIntList(valueKey);
foreach (int offset in offsets)
this.SetFlag(offset, mask, set);
}
#endregion
}
}

View File

@@ -0,0 +1,125 @@
using System.Text;
namespace ChanSort.Api
{
public class DvbChannelMappingBase : ChannelMappingBase
{
protected const string offChannelTransponder = "offChannelTransponder";
protected const string offPcrPid = "offPcrPid";
protected const string offVideoPid = "offVideoPid";
protected const string offAudioPid = "offAudioPid";
protected const string offServiceId = "offServiceId";
protected const string offOriginalNetworkId = "offOriginalNetworkId";
protected const string offTransportStreamId = "offTransportStreamId";
protected const string offServiceType = "offServiceType";
protected const string offSymbolRate = "offSymbolRate";
protected const string offEncrypted = "offEncrypted";
protected const string maskEncrypted = "maskEncrypted";
protected const string offShortName = "offShortName";
protected const string offShortNameLength = "offShortNameLength";
protected const string lenShortName = "lenShortName";
#region ctor()
public DvbChannelMappingBase(IniFile.Section settings, int dataLength, Encoding stringEncoding)
: base(settings, dataLength, stringEncoding)
{
}
#endregion
#region ChannelOrTransponder
public virtual byte ChannelOrTransponder
{
get { return this.GetByte(offChannelTransponder); }
set { this.SetByte(offChannelTransponder, value); }
}
#endregion
#region ShortName
public int ShortNameLength
{
get
{
var off = this.GetOffsets(offShortNameLength);
if (off.Length > 0)
return this.GetWord(off[0]);
off = this.GetOffsets(lenShortName); // not an offset!
return off.Length > 0 ? off[0] : 0;
}
}
public override string ShortName { get { return this.GetString(offShortName, this.ShortNameLength); } }
#endregion
#region PcrPid
public virtual ushort PcrPid
{
get { return this.GetWord(offPcrPid); }
set { this.SetWord(offPcrPid, value); }
}
#endregion
#region VideoPid
public virtual ushort VideoPid
{
get { return this.GetWord(offVideoPid); }
set { this.SetWord(offVideoPid, value); }
}
#endregion
#region AudioPid
public virtual ushort AudioPid
{
get { return this.GetWord(offAudioPid); }
set { this.SetWord(offAudioPid, value); }
}
#endregion
#region ServiceId
public virtual ushort ServiceId
{
get { return this.GetWord(offServiceId); }
set { this.SetWord(offServiceId, value); }
}
#endregion
#region OriginalNetworkId
public virtual ushort OriginalNetworkId
{
get { return this.GetWord(offOriginalNetworkId); }
set { this.SetWord(offOriginalNetworkId, value); }
}
#endregion
#region TransportStreamId
public virtual ushort TransportStreamId
{
get { return this.GetWord(offTransportStreamId); }
set { this.SetWord(offTransportStreamId, value); }
}
#endregion
#region ServiceType
public virtual byte ServiceType
{
get { return this.GetByte(offServiceType); }
set { this.SetByte(offServiceType, value); }
}
#endregion
#region SymbolRate
public virtual ushort SymbolRate
{
get { return this.GetWord(offSymbolRate); }
set { this.SetWord(offSymbolRate, value); }
}
#endregion
#region Encrypted
public virtual bool Encrypted
{
get { return this.GetFlag(offEncrypted, maskEncrypted); }
}
#endregion
}
}

View File

@@ -0,0 +1,196 @@
using System;
using System.Collections.Generic;
using System.Text;
namespace ChanSort.Api
{
#region Documentation
/*
ETSI EN 300 468
For one-byte character tables, the codes in the range 0x80 to 0x9F are assigned to control functions
as shown in Table A.1: Single byte control codes
Control code - Control code Description
0x80 to 0x85 reserved for future use
0x86 character emphasis on
0x87 character emphasis off
0x88 to 0x89 reserved for future use
0x8A CR/LF
0x8B to 0x9F user defined
A.2 Selection of character table
First byte value - Character code table - Table description - Reproduced in figure
0x01 ISO/IEC 8859-5 [27] Latin/Cyrillic alphabet A.2
0x02 ISO/IEC 8859-6 [28] Latin/Arabic alphabet A.3
0x03 ISO/IEC 8859-7 [29] Latin/Greek alphabet A.4
0x04 ISO/IEC 8859-8 [30] Latin/Hebrew alphabet A.5
0x05 ISO/IEC 8859-9 [31] Latin alphabet No. 5 A.6
0x06 ISO/IEC 8859-10 [32] Latin alphabet No. 6 A.7
0x07 ISO/IEC 8859-11 [33] Latin/Thai (draft only) A.8
0x08 reserved for future use (see note)
0x09 ISO/IEC 8859-13 [34] Latin alphabet No. 7 A.9
0x0A ISO/IEC 8859-14 [35] Latin alphabet No. 8 (Celtic) A.10
0x0B ISO/IEC 8859-15 [36] Latin alphabet No. 9 A.11
0x0C to 0x0F reserved for future use
0x10 ISO/IEC 8859 See table A.4
0x11 ISO/IEC 10646 [16] Basic Multilingual Plane (BMP)
0x12 KSX1001-2004 [44] Korean Character Set
0x13 GB-2312-1980 Simplified Chinese Character
0x14 Big5 subset of ISO/IEC 10646 [16] Traditional Chinese
0x15 UTF-8 encoding of ISO/IEC 10646 [16] Basic Multilingual Plane (BMP)
0x16 to 0x1E reserved for future use
0x1F Described by encoding_type_id Described by 8 bit
Table A.4: Character Coding Tables for first byte 0x10
First byte value - Second byte value - Third Byte Value - Selected character code - table - Table Description
0x10 0x00 0x00 reserved for future use
0x10 0x00 0x01 ISO/IEC 8859-1 [23] West European
0x10 0x00 0x02 ISO/IEC 8859-2 [24] East European
0x10 0x00 0x03 ISO/IEC 8859-3 [25] South European
0x10 0x00 0x04 ISO/IEC 8859-4 [26] North and North-East European
0x10 0x00 0x05 ISO/IEC 8859-5 [27] Latin/Cyrillic A.2
0x10 0x00 0x06 ISO/IEC 8859-6 [28] Latin/Arabic A.3
0x10 0x00 0x07 ISO/IEC 8859-7 [29] Latin/Greek A.4
0x10 0x00 0x08 ISO/IEC 8859-8 [30] Latin/Hebrew A.5
0x10 0x00 0x09 ISO/IEC 8859-9 [31] West European & Turkish A.6
0x10 0x00 0x0A ISO/IEC 8859-10 [32] North European A.7
0x10 0x00 0x0B ISO/IEC 8859-11 [33] Thai A.8
0x10 0x00 0x0C Reserved for future use
0x10 0x00 0x0D ISO/IEC 8859-13 [34] Baltic A.9
0x10 0x00 0x0E ISO/IEC 8859-14 [35] Celtic A.10
0x10 0x00 0x0F ISO/IEC 8859-15 [36] West European A.11
*/
#endregion
public class DvbStringDecoder
{
static readonly string[] codePages1 =
{
null, "iso-8859-5", "iso-8859-6", "iso-8859-7", "iso-8859-8", "iso-8859-9", "iso-8859-10", "iso-8859-11",
null, "iso-8859-13", "iso-8859-14", "iso-8859-15", null, null, null, null,
null, // codePages2 prefix
"utf-16", "x-cp20949", "x-cp20936", "utf-16", "utf-8", null, null, null
};
static readonly string[] codePages2 =
{
null, "iso-8859-1", "iso-8859-2", "iso-8859-3", "iso-8859-4", "iso-8859-5", "iso-8859-6", "iso-8859-7",
"iso-8859-8", "iso-8859-9", "iso-8859-10", "iso-8859-11", null, "iso-8859-13", "iso-8859-14", "iso-8859-15"
};
private readonly Dictionary<string, Decoder> decoderCache = new Dictionary<string, Decoder>();
public DvbStringDecoder(Encoding defaultEncoding)
{
this.DefaultEncoding = defaultEncoding;
}
public Encoding DefaultEncoding { get; set; }
#region GetChannelNames()
public unsafe void GetChannelNames(byte* name, int len, out string longName, out string shortName)
{
StringBuilder sbLong = new StringBuilder();
StringBuilder sbShort = new StringBuilder();
Decoder decoder = this.DefaultEncoding.GetDecoder();
bool inShortMode = false;
for (int i = 0; i < len; i++)
{
byte b = name[i];
if (b == 0x00)
break;
if (b == 0x10) // prefix for 3-byte code page
{
int cpIndex = name[i + 1] * 256 + name[i + 2];
i += 2;
SetDecoder(codePages2, cpIndex, ref decoder);
continue;
}
if (b <= 0x1F)
{
SetDecoder(codePages1, b, ref decoder);
continue;
}
char ch = '\0';
switch (b)
{
case 0x86: inShortMode = true; break;
case 0x87: inShortMode = false; break;
case 0x8a: ch = '\n'; break;
default:
// read as many bytes as necessary to get a character
char[] charArray = new char[1];
fixed (char* pCh = charArray)
{
byte* start = name + i;
for (int j = 1; i < len && decoder.GetChars(start, j, pCh, 1, true) == 0; ++j)
++i;
}
ch = charArray[0];
break;
}
if (ch == '\0')
continue;
sbLong.Append(ch);
if (inShortMode)
sbShort.Append(ch);
}
longName = sbLong.ToString();
shortName = sbShort.ToString();
}
#endregion
#region SetDecoder()
private void SetDecoder(string[] codePages, int cpIndex, ref Decoder defaultDecoder)
{
if (cpIndex >= codePages.Length)
return;
Decoder decoder;
string cp = codePages[cpIndex];
if (cp == null)
return;
if (this.decoderCache.TryGetValue(cp, out decoder))
{
defaultDecoder = decoder;
return;
}
try
{
var encoding = Encoding.GetEncoding(cp);
defaultDecoder = encoding.GetDecoder();
}
catch (ArgumentException)
{
}
decoderCache[cp] = defaultDecoder;
}
#endregion
#region GetCodepageBytes()
public static byte[] GetCodepageBytes(Encoding encoding)
{
var encName = encoding.WebName;
for (int i = 0; i < codePages1.Length; i++)
{
if (codePages1[i] == encName)
return new [] {(byte)i};
}
for (int i = 0; i < codePages2.Length; i++)
{
if (codePages2[i] == encName)
return new[] { (byte)0x10, (byte)i };
}
return new byte[0];
}
#endregion
}
}

View File

@@ -0,0 +1,164 @@
using System;
using System.Collections.Generic;
using System.IO;
namespace ChanSort.Api
{
public class IniFile
{
#region class Section
public class Section
{
private readonly Dictionary<string, string> data = new Dictionary<string, string>(StringComparer.CurrentCultureIgnoreCase);
public Section(string name)
{
this.Name = name;
}
#region Name
public string Name { get; private set; }
#endregion
#region Set()
internal void Set(string key, string value)
{
data[key] = value;
}
#endregion
#region Keys
public IEnumerable<string> Keys { get { return data.Keys; } }
#endregion
#region GetString()
public string GetString(string key)
{
string value;
if (!data.TryGetValue(key, out value))
return null;
return value;
}
#endregion
#region GetInt()
public int GetInt(string key, int defaultValue = 0)
{
string value;
if (!data.TryGetValue(key, out value))
return defaultValue;
return this.ParseNumber(value);
}
#endregion
#region GetBytes()
public byte[] GetBytes(string key)
{
string value;
if (!data.TryGetValue(key, out value))
return null;
if (string.IsNullOrEmpty(value))
return new byte[0];
string[] parts = value.Split(',');
byte[] bytes = new byte[parts.Length];
int i = 0;
foreach (var part in parts)
bytes[i++] = (byte)this.ParseNumber(part);
return bytes;
}
#endregion
#region GetIntList()
public int[] GetIntList(string key)
{
string value = this.GetString(key);
if (string.IsNullOrEmpty(value))
return new int[0];
string[] numbers = value.Split(',');
int[] ret = new int[numbers.Length];
for (int i = 0; i < numbers.Length; i++)
ret[i] = this.ParseNumber(numbers[i]);
return ret;
}
#endregion
#region ParseNumber()
private int ParseNumber(string value)
{
if (value.ToLower().StartsWith("0x"))
{
try { return Convert.ToInt32(value, 16); }
catch { return 0; }
}
int intValue;
int.TryParse(value, out intValue);
return intValue;
}
#endregion
}
#endregion
private readonly Dictionary<string, Section> sectionDict;
private readonly List<Section> sectionList;
public IniFile(string fileName)
{
this.sectionDict = new Dictionary<string, Section>();
this.sectionList = new List<Section>();
this.ReadIniFile(fileName);
}
public IEnumerable<Section> Sections
{
get { return this.sectionList; }
}
public Section GetSection(string sectionName)
{
return sectionDict.TryGet(sectionName);
}
#region ReadIniFile()
private void ReadIniFile(string fileName)
{
using (StreamReader rdr = new StreamReader(fileName))
{
Section currentSection = null;
string line;
while ((line = rdr.ReadLine()) != null)
{
string trimmedLine = line.Trim();
if (trimmedLine.StartsWith(";"))
continue;
if (trimmedLine.StartsWith("["))
{
string sectionName = trimmedLine.EndsWith("]")
? trimmedLine.Substring(1, trimmedLine.Length - 2)
: trimmedLine.Substring(1);
currentSection = new Section(sectionName);
this.sectionList.Add(currentSection);
this.sectionDict[sectionName] = currentSection;
continue;
}
if (currentSection == null)
continue;
int idx = trimmedLine.IndexOf("=");
if (idx < 0)
continue;
string key = trimmedLine.Substring(0, idx).Trim();
string val = trimmedLine.Substring(idx + 1).Trim();
currentSection.Set(key, val);
}
}
}
#endregion
}
}

View File

@@ -0,0 +1,33 @@
using System;
using System.Collections.Generic;
namespace ChanSort.Api
{
public class MappingPool<T> where T : DataMapping
{
private const string ERR_unknownACTChannelDataLength = "Configuration doesn't contain a {0} data mapping for length {1}";
private readonly Dictionary<int, T> mappings = new Dictionary<int, T>();
private readonly string caption;
public MappingPool(string caption)
{
this.caption = caption;
}
public void AddMapping(T mapping)
{
mappings[mapping.DataLength] = mapping;
}
public T GetMapping(int dataLength, bool throwException = true)
{
if (dataLength == 0)
return null;
T mapping;
if (!mappings.TryGetValue(dataLength, out mapping) && throwException)
throw new Exception(string.Format(ERR_unknownACTChannelDataLength, this.caption, dataLength));
return mapping;
}
}
}

View File

@@ -0,0 +1,27 @@
using System.Collections.Generic;
using System.Text;
namespace ChanSort.Api
{
public static class Tools
{
public static V TryGet<K, V>(this IDictionary<K, V> dict, K key)
{
V val;
dict.TryGetValue(key, out val);
return val;
}
public static unsafe string GetString(this Encoding encoding, byte* str, int len)
{
byte[] copy = new byte[len];
for (int i = 0; i < len; i++)
copy[i] = *str++;
string name = encoding.GetString(copy, 0, len);
int idx = name.IndexOf('\0');
if (idx >= 0)
name = name.Substring(0, idx);
return name;
}
}
}

View File

@@ -0,0 +1,72 @@
using System.Text;
using ChanSort.Api;
namespace ChanSort.Plugin.ScmFile
{
internal class AnalogChannelDataMapping : ChannelMappingBase
{
const string offFrequency = "offFrequency";
const string offChecksum = "offChecksum";
#region ctor()
public AnalogChannelDataMapping(IniFile.Section settings, int length) :
base(settings, length, new UnicodeEncoding(true, false))
{
}
#endregion
#region Favorites
public override Favorites Favorites
{
get
{
if (this.DataLength < 64)
return base.Favorites;
byte fav = 0;
byte mask = 0x01;
foreach (int off in this.GetOffsets(offFavorites))
{
if (this.GetByte(off) == 1)
fav |= mask;
mask <<= 1;
}
return (Favorites)fav;
}
set
{
if (this.DataLength < 64)
{
base.Favorites = value;
return;
}
int intValue = (int)value;
foreach (int off in this.GetOffsets(offFavorites))
{
if ((intValue & 1) != 0)
this.SetByte(off, 1);
intValue >>= 1;
}
}
}
#endregion
#region Frequency
public float Frequency
{
get { return this.GetFloat(offFrequency); }
set { this.SetFloat(offFrequency, value); }
}
#endregion
#region Checksum
public byte Checksum
{
get { return this.GetByte(offChecksum); }
set { this.SetByte(offChecksum, value); }
}
#endregion
}
}

View File

@@ -0,0 +1,98 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{A1C9A98D-368A-44E8-9B7F-7EACA46C9EC5}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ChanSort.Plugin.ScmFile</RootNamespace>
<AssemblyName>ChanSort.Plugin.ScmFile</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<PlatformTarget>x86</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>..\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
<CodeAnalysisFailOnMissingRules>false</CodeAnalysisFailOnMissingRules>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisIgnoreBuiltInRuleSets>true</CodeAnalysisIgnoreBuiltInRuleSets>
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
<CodeAnalysisFailOnMissingRules>true</CodeAnalysisFailOnMissingRules>
</PropertyGroup>
<ItemGroup>
<Reference Include="ICSharpCode.SharpZipLib, Version=0.86.0.518, Culture=neutral, PublicKeyToken=1b03e6acf1164f73, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\DLL\ICSharpCode.SharpZipLib.dll</HintPath>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="AnalogChannelDataMapping.cs" />
<Compile Include="DvbSChannelDataMapping.cs" />
<Compile Include="DvbCtChannelDataMapping.cs" />
<Compile Include="ModelConstants.cs" />
<Compile Include="ScmSerializer.cs" />
<Compile Include="ScmSerializerPlugin.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="ScmStructures.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ChanSort.Api\ChanSort.Api.csproj">
<Project>{DCCFFA08-472B-4D17-BB90-8F513FC01392}</Project>
<Name>ChanSort.Api</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="ChanSort.Plugin.ScmFile.ini">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,334 @@
[Series:B]
SatDataBase.dat = 145
TransponderDataBase.dat = 49
FineTune = 20
FineTune_Digital = 28
map-AirA = 28
map-AirD = 248
map-CableD = 248
map-SateD = 144
Favorites = 4
[Series:C]
SatDataBase.dat = 145
TransponderDataBase.dat = 45
map-AirA = 40
map-AirD = 292
map-CableD = 292
map-SateD = 144
Favorites = 4
[Series:D]
SatDataBase.dat = 145
TransponderDataBase.dat = 45
map-AirA = 64
map-AirD = 320
map-CableD = 320
map-SateD = 172
map-AstraHDPlusD = 212
Favorites = 5
[Series:E]
SatDataBase.dat = 145
TransponderDataBase.dat = 45
map-AirA = 64
map-AirD = 320
map-CableD = 320
map-SateD = 168
map-AstraHDPlusD = 212
Favorites = 5
[Analog:28]
; map-AirA and map-CableA for B series
offInUse = 0
maskInUse = 0x02
;offNameLength = 1
offProgramNr = 4
offFavorites =
offName = 12
lenName = 12
offChecksum = 27
[Analog:40]
; map-AirA and map-CableA for C series
offInUse = 1
maskInUse = 0x01
offSkip = 2
maskSkip = 0x01
offLock = 6
maskLock = 0x01
offTuned = 8
maskTuned = 0x01
offProgramNr = 9
offSlotNr = 16
offNameLength = 18
offName = 20
offFrequency = 32
offFavorites = 38
offChecksum = 39
[Analog:64]
; map-AirA and map-CableA for D series
offInUse = 1
maskInUse = 0x01
offSkip = 2
maskSkip = 0x01
offLock = 6
maskLock = 0x01
offTuned = 8
maskTuned = 0x01
offProgramNr = 9
offSlotNr = 16
offNameLength = 18
offName = 20
offFrequency = 32
offFavorite = 36,40,44,48,52
offChecksum = 63
[FineTune:20]
offIsCable = 0
maskIsCable = 0x01
offSlotNr = 4
offFrequency = 8
[FineTune_Digital:28]
offIsCable = 0
maskIsCable = 0x01
offChannelTransponder = 4
offFrequency = 16
[DvbCT:248]
; map-AirD and map-CableD for B series
offProgramNr = 0
offVideoPid = 2
offPcrPid = 4
offServiceId = 10
offStatus = 8
offQam = 7
offServiceType = 9
offEncrypted = 23
maskEncrypted = 0xff
offSymbolRate = 32
offLock = 244
maskLock = 0x01
offOriginalNetworkId = 12
offNetworkId = 14
offBouquet = 34
offChannelTransponder = 26
offLogicalProgramNr = 28
offTransportStreamId = 36
offName = 44
lenName = 100
offFavorites = 246
offChecksum = 247
offCodec =
offServiceProviderId =
offShortName =
lenShortName =
offVideoFormat =
[DvbCT:292]
; map-AirD and map-CableD for C series
offProgramNr = 0
offVideoPid = 2
offPcrPid = 4
offServiceId = 6
offStatus =
offQam = 12
offBandwidth = 14
offServiceType = 15
offCodec = 16
offHRes = 20
offVRes = 22
offEncrypted = 24
maskEncrypted = 0xff
offFrameRate = 25
offSymbolRate = 28
offLock = 31
maskLock = 0x01
offOriginalNetworkId = 32
offNetworkId = 34
offServiceProviderId = 40
offChannelTransponder = 42
offLogicalProgramNr = 44
offTransportStreamId = 48
offName = 64
lenName = 200
offShortName = 264
lenShortName = 18
offVideoFormat = 282
offFavorites = 289
offChecksum = 291
offBouquet =
[DvbCT:320]
; map-AirD and map-CableD for D and E series
offProgramNr = 0
offVideoPid = 2
offPcrPid = 4
offServiceId = 6
offStatus =
offQam = 12
offBandwidth = 14
offServiceType = 15
offCodec = 16
offHRes = 20
offVRes = 22
offEncrypted = 24
maskEncrypted = 0xff
offFrameRate = 25
offSymbolRate = 28
offLock = 31
maskLock = 0x01
offOriginalNetworkId = 32
offNetworkId = 34
offServiceProviderId = 40
offChannelTransponder = 42
offLogicalProgramNr = 44
offTransportStreamId = 48
offName = 64
lenName = 200
offShortName = 264
lenShortName = 18
offVideoFormat = 282
offFavorites = 292,296,300,304,308
offChecksum = 319
offBouquet =
[DvbS:144]
; map-SateD for B and C Series
offProgramNr = 0
offVideoPid = 2
offPcrPid = 4
offInUse = 7
maskInUse = 0x01
offLock = 13
maskLock = 0x01
offServiceType = 14
offServiceId = 16
offTransponderNr = 18
offSatelliteNr = 20
offTransportStreamId = 24
offOriginalNetworkId = 28
offHRes = 32
offVRes = 34
offName = 36
lenName = 100
offEncrypted = 136
maskEncrypted = 0x01
offBouquet = 138
offFavorites = 142
offChecksum = 143
offCodec =
offSymbolRate =
offNetworkId =
offServiceProviderId =
offChannelTransponder =
offLogicalProgramNr =
offShortName =
lenShortName =
offVideoFormat =
[DvbS:172]
; map-SateD for D Series
offProgramNr = 0
offVideoPid = 2
offPcrPid = 4
offInUse = 7
maskInUse = 0x01
offLock = 13
maskLock = 0x01
offServiceType = 14
offServiceId = 16
offTransponderNr = 18
offSatelliteNr = 20
offTransportStreamId = 24
offOriginalNetworkId = 28
offHRes = 32
offVRes = 34
offName = 36
lenName = 100
offEncrypted = 136
maskEncrypted = 0x01
offBouquet = 138
offFavorites = 140,144,148,152,156
offChecksum = 171
offCodec =
offSymbolRate =
offNetworkId =
offServiceProviderId =
offChannelTransponder =
offLogicalProgramNr =
offShortName =
lenShortName =
offVideoFormat =
[DvbS:168]
; map-SateD for E Series
offProgramNr = 0
offVideoPid = 2
offPcrPid = 4
offInUse = 7
maskInUse = 0x01
offLock = 13
maskLock = 0x01
offServiceType = 14
offServiceId = 16
offTransponderNr = 18
offSatelliteNr = 20
offTransportStreamId = 24
offOriginalNetworkId = 28
offHRes = 32
offVRes = 34
offName = 36
offEncrypted = 136
maskEncrypted = 0x01
lenName = 100
offBouquet = 138
offFavorites = 140,144,148,152,156
offChecksum = 167
offCodec =
offSymbolRate =
offNetworkId =
offServiceProviderId =
offChannelTransponder =
offLogicalProgramNr =
offShortName =
lenShortName =
offVideoFormat =
[AstraHDPlusD:212]
; map-AstraHDPlusD for D and E Series
offProgramNr = 0,20
offVideoPid =
offPcrPid =
offInUse = 14
maskInUse = 0xff
offLock =
maskLock = 0x01
offServiceType = 14
offServiceId = 16
offTransponderNr = 18
offSatelliteNr =
offTransportStreamId = 36
offOriginalNetworkId = 32
offHRes =
offVRes =
offName = 48
offEncrypted = 180
maskEncrypted = 0x01
lenName = 100
offBouquet = 138
offFavorites = 184,188,192,196,200
offChecksum = 211
offCodec =
offSymbolRate =
offNetworkId =
offServiceProviderId =
offChannelTransponder =
offLogicalProgramNr =
offShortName =
lenShortName =
offVideoFormat =

View File

@@ -0,0 +1,63 @@
using System.Text;
using ChanSort.Api;
namespace ChanSort.Plugin.ScmFile
{
internal class DvbCtChannelDataMapping : DvbChannelMappingBase
{
const string offChecksum = "offChecksum";
#region ctor()
public DvbCtChannelDataMapping(IniFile.Section settings, int dataLength)
: base(settings, dataLength, new UnicodeEncoding(true, false))
{
}
#endregion
#region Checksum
public byte Checksum
{
get { return this.GetByte(offChecksum); }
set { this.SetByte(offChecksum, value); }
}
#endregion
#region Favorites
public override Favorites Favorites
{
get
{
if (this.DataLength < 320)
return base.Favorites;
byte fav = 0;
byte mask = 0x01;
foreach (int off in this.GetOffsets(offFavorites))
{
if (this.GetByte(off) == 1)
fav |= mask;
mask <<= 1;
}
return (Favorites)fav;
}
set
{
if (this.DataLength < 320)
{
base.Favorites = value;
return;
}
int intValue = (int)value;
foreach (int off in this.GetOffsets(offFavorites))
{
if ((intValue & 1) != 0)
this.SetByte(off, 1);
intValue >>= 1;
}
}
}
#endregion
}
}

View File

@@ -0,0 +1,83 @@
using System.Text;
using ChanSort.Api;
namespace ChanSort.Plugin.ScmFile
{
internal class DvbSChannelDataMapping : DvbChannelMappingBase
{
private const string offChecksum = "offChecksum";
private const string offTransponderNr = "offTransponderNr";
private const string offSatelliteNr = "offSatelliteNr";
private readonly bool hasExtendedFavorites;
#region ctor()
public DvbSChannelDataMapping(IniFile.Section settings, int dataLength)
: base(settings, dataLength, new UnicodeEncoding(true, false))
{
this.hasExtendedFavorites = dataLength >= 168;
}
#endregion
#region TransponderNr
public ushort TransponderNr
{
get { return this.GetWord(offTransponderNr); }
set { this.SetWord(offTransponderNr, value); }
}
#endregion
#region SatelliteNr
public ushort SatelliteNr
{
get { return this.GetWord(offSatelliteNr); }
set { this.SetWord(offSatelliteNr, value); }
}
#endregion
#region Favorites
public override Favorites Favorites
{
get
{
if (!this.hasExtendedFavorites)
return base.Favorites;
byte fav = 0;
byte mask = 0x01;
foreach (int off in this.GetOffsets(offFavorites))
{
if (this.GetDword(off) == 1)
fav |= mask;
mask <<= 1;
}
return (Favorites)fav;
}
set
{
if (!this.hasExtendedFavorites)
{
base.Favorites = value;
return;
}
int intValue = (int)value;
foreach (int off in this.GetOffsets(offFavorites))
{
if ((intValue & 1) != 0)
this.SetDword(off, 1);
intValue >>= 1;
}
}
}
#endregion
#region Checksum
public byte Checksum
{
get { return this.GetByte(offChecksum); }
set { this.SetByte(offChecksum, value); }
}
#endregion
}
}

View File

@@ -0,0 +1,34 @@
using ChanSort.Api;
namespace ChanSort.Plugin.ScmFile
{
internal class ModelConstants
{
public readonly int dvbsSatelliteLength;
public readonly int dvbsTransponderLength;
public readonly int dvbsChannelLength;
public readonly int dvbtChannelLength;
public readonly int avbtChannelLength;
public readonly int hdplusChannelLength;
public readonly int avbtFineTuneLength;
public readonly int dvbtFineTuneLength;
public readonly Favorites supportedFavorites;
public ModelConstants(IniFile.Section iniSection)
{
this.avbtChannelLength = iniSection.GetInt("map-AirA");
this.dvbtChannelLength = iniSection.GetInt("map-AirD");
this.dvbsChannelLength = iniSection.GetInt("map-SateD");
this.hdplusChannelLength = iniSection.GetInt("map-AstraHDPlusD");
this.dvbsSatelliteLength = iniSection.GetInt("SatDataBase.dat");
this.dvbsTransponderLength = iniSection.GetInt("TransponderDataBase.dat");
this.avbtFineTuneLength = iniSection.GetInt("FineTune");
this.dvbtFineTuneLength = iniSection.GetInt("FineTune_Digital");
int numFavorites = iniSection.GetInt("Favorites");
int mask = 0;
for (int i = 0; i < numFavorites; i++)
mask = (mask << 1) | 1;
this.supportedFavorites = (Favorites)mask;
}
}
}

View File

@@ -0,0 +1,36 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("ChanSort.Plugin.ScmFile")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ChanSort.Plugin.ScmFile")]
[assembly: AssemblyCopyright("Copyright © 2012")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("6f59ac5a-afba-42e3-a63e-c74793c15980")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,740 @@
using System;
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Text;
using System.Linq;
using System.Windows.Forms;
using ChanSort.Api;
using ICSharpCode.SharpZipLib.Zip;
namespace ChanSort.Plugin.ScmFile
{
class ScmSerializer : SerializerBase
{
private readonly Dictionary<string, ModelConstants> modelConstants = new Dictionary<string, ModelConstants>();
private readonly MappingPool<AnalogChannelDataMapping> analogMappings = new MappingPool<AnalogChannelDataMapping>("Analog");
private readonly MappingPool<DvbCtChannelDataMapping> dvbctMappings = new MappingPool<DvbCtChannelDataMapping>("DVB-C/T");
private readonly MappingPool<DvbSChannelDataMapping> dvbsMappings = new MappingPool<DvbSChannelDataMapping>("DVB-S");
private readonly MappingPool<DvbSChannelDataMapping> hdplusMappings = new MappingPool<DvbSChannelDataMapping>("AstraHDPlus");
private readonly MappingPool<DataMapping> analogFineTuneMappings = new MappingPool<DataMapping>("FineTune");
private readonly ChannelList avbtChannels = new ChannelList(SignalSource.AnalogT, SignalType.Mixed);
private readonly ChannelList avbcChannels = new ChannelList(SignalSource.AnalogC, SignalType.Mixed);
private readonly ChannelList dvbcChannels = new ChannelList(SignalSource.DvbC, SignalType.Mixed);
private readonly ChannelList dvbtChannels = new ChannelList(SignalSource.DvbT, SignalType.Mixed);
private readonly ChannelList dvbsChannels = new ChannelList(SignalSource.DvbS, SignalType.Mixed);
private readonly ChannelList hdplusChannels = new ChannelList(SignalSource.HdPlusD, SignalType.Mixed);
private readonly Dictionary<int, decimal> avbtFrequency = new Dictionary<int, decimal>();
private readonly Dictionary<int, decimal> avbcFrequency = new Dictionary<int, decimal>();
private byte[] avbtFileContent;
private byte[] avbcFileContent;
private byte[] dvbtFileContent;
private byte[] dvbcFileContent;
private byte[] dvbsFileContent;
private byte[] hdplusFileContent;
private UnsortedChannelMode unsortedChannelMode;
private ModelConstants c;
#region ctor()
public ScmSerializer(string inputFile) : base(inputFile)
{
this.ReadConfigurationFromIniFile();
}
#endregion
#region DisplayName
public override string DisplayName { get { return "Samsung *.scm Loader"; } }
#endregion
#region ReadConfigurationFromIniFile()
private void ReadConfigurationFromIniFile()
{
string iniFile = Assembly.GetExecutingAssembly().Location.Replace(".dll", ".ini");
IniFile ini = new IniFile(iniFile);
foreach (var section in ini.Sections)
{
int idx = section.Name.IndexOf(":");
int len=0;
if (idx >= 0)
int.TryParse(section.Name.Substring(idx + 1), out len);
if (section.Name.StartsWith("Series:"))
modelConstants.Add(section.Name, new ModelConstants(section));
else if (section.Name.StartsWith("Analog:"))
analogMappings.AddMapping(new AnalogChannelDataMapping(section, len));
else if (section.Name.StartsWith("DvbCT:"))
dvbctMappings.AddMapping(new DvbCtChannelDataMapping(section, len));
else if (section.Name.StartsWith("DvbS:"))
dvbsMappings.AddMapping(new DvbSChannelDataMapping(section, len));
else if (section.Name.StartsWith("FineTune:"))
analogFineTuneMappings.AddMapping(new DataMapping(section, len, null));
else if (section.Name.StartsWith("AstraHDPlusD:"))
hdplusMappings.AddMapping(new DvbSChannelDataMapping(section, len));
}
}
#endregion
#region Load()
public override void Load()
{
using (ZipFile zip = new ZipFile(this.FileName))
{
DetectModelConstants(zip);
DataRoot.SupportedFavorites = c.supportedFavorites;
ReadAnalogFineTuning(zip);
ReadAnalogChannels(zip, "map-AirA", this.avbtChannels, out this.avbtFileContent, this.avbtFrequency);
ReadAnalogChannels(zip, "map-CableA", this.avbcChannels, out this.avbcFileContent, this.avbcFrequency);
ReadDvbctChannels(zip, "map-AirD", this.dvbtChannels, out this.dvbtFileContent);
ReadDvbctChannels(zip, "map-CableD", this.dvbcChannels, out this.dvbcFileContent);
ReadSatellites(zip);
ReadTransponder(zip, "TransponderDataBase.dat");
ReadTransponder(zip, "UserTransponderDataBase.dat");
ReadDvbsChannels(zip);
ReadAstraHdPlusChannels(zip);
}
}
#endregion
#region DetectModelConstants()
private void DetectModelConstants(ZipFile zip)
{
if (DetectModelFromCloneInfoFile(zip)) return;
if (DetectModelFromContentFileLengths(zip)) return;
if (DetectModelFromFileName()) return;
throw new IOException("Unable to determine TV model from file content or name");
}
#endregion
#region DetectModelFromFileName()
private bool DetectModelFromFileName()
{
string file = Path.GetFileName(this.FileName);
System.Text.RegularExpressions.Regex regex =
new System.Text.RegularExpressions.Regex("channel_list_[A-Z]{2}[0-9]{2}([A-Z])[0-9A-Z]+_[0-9]+\\.scm");
var match = regex.Match(file);
if (match.Success)
{
string series = match.Groups[1].Value;
if (this.modelConstants.TryGetValue("Series:" + series, out this.c))
return true;
}
return false;
}
#endregion
#region DetectModelFromCloneInfoFile()
private bool DetectModelFromCloneInfoFile(ZipFile zip)
{
byte[] cloneInfo = ReadFileContent(zip, "CloneInfo");
if (cloneInfo == null)
{
this.c = this.modelConstants["Series:B"];
return true;
}
if (cloneInfo.Length >= 9)
{
char series = (char) cloneInfo[8];
if (this.modelConstants.TryGetValue("Series:" + series, out this.c))
return true;
}
return false;
}
#endregion
#region DetectModelFromContentFileLengths()
private bool DetectModelFromContentFileLengths(ZipFile zip)
{
string[] candidates = new[]
{
DetectModelFromAirAOrCableA(zip),
DetectModelFromAirDOrCableD(zip),
DetectModelFromSateD(zip),
DetectModelFromTranspoderDatabase(zip)
};
string validCandidates = "BCDE";
foreach (var candidateList in candidates)
{
if (candidateList == null)
continue;
string newValidCandidats = "";
foreach (var candidate in candidateList)
{
if (validCandidates.Contains(candidate))
newValidCandidats += candidate;
}
validCandidates = newValidCandidats;
}
if (validCandidates.Length != 1)
return false;
this.modelConstants.TryGetValue("Series:" + validCandidates, out this.c);
return true;
}
#endregion
#region DetectModelFromAirAOrCableA()
private string DetectModelFromAirAOrCableA(ZipFile zip)
{
var entry = zip.GetEntry("map-AirA") ?? zip.GetEntry("map-CableA");
if (entry == null)
return null;
var candidates = "";
if (entry.Size % 28000 == 0)
candidates += "B";
if (entry.Size % 40000 == 0)
candidates += "C";
if (entry.Size % 64000 == 0)
candidates += "DE";
return candidates;
}
#endregion
#region DetectModelFromAirDOrCableD()
private string DetectModelFromAirDOrCableD(ZipFile zip)
{
var entry = zip.GetEntry("map-AirD") ?? zip.GetEntry("map-CableD");
if (entry == null)
return null;
var candidates = "";
if (entry.Size % 248 == 0)
candidates += "B";
if (entry.Size % 292 == 0)
candidates += "C";
if (entry.Size % 320 == 0)
candidates += "DE";
return candidates;
}
#endregion
#region DetectModelFromSateD()
private string DetectModelFromSateD(ZipFile zip)
{
var entry = zip.GetEntry("map-SateD");
if (entry == null)
return null;
var candidates = "";
if (entry.Size % 144 == 0)
candidates += "BC";
if (entry.Size % 172 == 0)
candidates += "D";
if (entry.Size % 168 == 0)
candidates += "E";
return candidates;
}
#endregion
#region DetectModelFromTranspoderDatabase()
private string DetectModelFromTranspoderDatabase(ZipFile zip)
{
var entry = zip.GetEntry("TransponderDatabase.dat");
if (entry == null)
return null;
var size = entry.Size - 4;
var candidates = "";
if (size%49 == 0)
candidates += "B";
if (size%45 == 0)
candidates += "CDE";
return candidates;
}
#endregion
#region ReadAnalogFineTuning()
private unsafe void ReadAnalogFineTuning(ZipFile zip)
{
int entrySize = c.avbtFineTuneLength;
if (entrySize == 0)
return;
byte[] data = ReadFileContent(zip, "FineTune");
if (data == null)
return;
var mapping = analogFineTuneMappings.GetMapping(c.avbtFineTuneLength);
fixed (byte* ptr = data)
{
mapping.DataPtr = ptr;
int count = data.Length / mapping.DataLength;
for (int i = 0; i < count; i++)
{
bool isCable = mapping.GetFlag("offIsCable", "maskIsCable"); // HACK: this is just a guess
int slot = mapping.GetWord("offSlotNr");
float freq = mapping.GetFloat("offFrequency");
var dict = isCable ? avbcFrequency : avbtFrequency;
dict[slot] = (decimal)freq;
mapping.Next();
}
}
}
#endregion
#region ReadAnalogChannels()
private unsafe void ReadAnalogChannels(ZipFile zip, string fileName, ChannelList list, out byte[] data, Dictionary<int,decimal> freq)
{
data = null;
int entrySize = c.avbtChannelLength;
if (entrySize == 0)
return;
data = ReadFileContent(zip, fileName);
if (data == null)
return;
this.DataRoot.AddChannelList(list);
fixed (byte* ptr = data)
{
var rawChannel = analogMappings.GetMapping(entrySize);
rawChannel.DataPtr = ptr;
int count = data.Length / entrySize;
for (int slotIndex = 0; slotIndex < count; slotIndex++)
{
MapAnalogChannel(rawChannel, slotIndex, list, freq);
rawChannel.DataPtr += entrySize;
}
}
}
#endregion
#region MapAnalogChannel()
private unsafe void MapAnalogChannel(AnalogChannelDataMapping rawChannel, int slotIndex, ChannelList list, Dictionary<int,decimal> freq)
{
if (!rawChannel.InUse)
return;
if (rawChannel.Checksum != CalcChecksum(rawChannel.DataPtr, c.avbtChannelLength))
this.DataRoot.Warnings.AppendFormat("{0}: Incorrect checksum for channel index {1}\r\n", list, slotIndex);
ChannelInfo ci = new ChannelInfo(list.SignalSource, list.SignalType, slotIndex, rawChannel.ProgramNr, rawChannel.Name);
ci.FreqInMhz = (decimal)Math.Round(rawChannel.Frequency, 2);
if (ci.FreqInMhz == 0)
ci.FreqInMhz = freq.TryGet(ci.RecordIndex);
if (ci.FreqInMhz == 0)
ci.FreqInMhz = slotIndex;
ci.Lock = rawChannel.Lock;
ci.Skip = rawChannel.Skip;
ci.Favorites = rawChannel.Favorites;
this.DataRoot.AddChannel(list, ci);
}
#endregion
#region ReadDvbctChannels()
private unsafe void ReadDvbctChannels(ZipFile zip, string fileName, ChannelList list, out byte[] data)
{
data = null;
int entrySize = c.dvbtChannelLength;
if (entrySize == 0)
return;
data = ReadFileContent(zip, fileName);
if (data == null)
return;
this.DataRoot.AddChannelList(list);
fixed (byte* ptr = data)
{
DvbCtChannelDataMapping rawChannel = dvbctMappings.GetMapping(entrySize);
rawChannel.DataPtr = ptr;
int count = data.Length / entrySize;
for (int slotIndex = 0; slotIndex < count; slotIndex++)
{
MapDvbctChannel(rawChannel, slotIndex, list);
rawChannel.Next();
}
}
}
#endregion
#region MapDvbctChannel()
private unsafe void MapDvbctChannel(DvbCtChannelDataMapping rawChannel, int slotIndex, ChannelList list)
{
if (rawChannel.ProgramNr == 0)
return;
if (rawChannel.Checksum != CalcChecksum(rawChannel.DataPtr, rawChannel.DataLength))
this.DataRoot.Warnings.AppendFormat("{0}: Incorrect checksum for channel index {1}\r\n", list, slotIndex);
ChannelInfo ci = new ChannelInfo(list.SignalSource, list.SignalType, slotIndex, rawChannel.ProgramNr, rawChannel.Name);
ci.VideoPid = rawChannel.VideoPid;
ci.ServiceId = rawChannel.ServiceId;
ci.ServiceType = rawChannel.ServiceType;
ci.TransportStreamId = rawChannel.TransportStreamId;
ci.FreqInMhz = LookupData.Instance.GetDvbtTransponderFrequency(rawChannel.ChannelOrTransponder);
ci.OriginalNetworkId = rawChannel.OriginalNetworkId;
ci.Favorites = rawChannel.Favorites;
ci.Lock = rawChannel.Lock;
ci.ShortName = rawChannel.ShortName;
ci.SymbolRate = rawChannel.SymbolRate;
ci.Encrypted = rawChannel.Encrypted;
ci.ChannelOrTransponder = rawChannel.ChannelOrTransponder.ToString();
this.DataRoot.AddChannel(list, ci);
}
#endregion
#region ReadSatellites()
private unsafe void ReadSatellites(ZipFile zip)
{
byte[] data = ReadFileContent(zip, "SatDataBase.dat");
if (data == null)
return;
var utf16Encoding = new UnicodeEncoding(false, false);
fixed (byte* ptr = data)
{
int count = data.Length/this.c.dvbsSatelliteLength;
for (int i = 0; i < count; i++)
{
SatDataBase* sat = (SatDataBase*)(ptr + 4 + i * this.c.dvbsSatelliteLength);
if (sat->Magic0x55 != 0x55)
throw new IOException("Unknown SatDataBase.dat format");
string name = utf16Encoding.GetString((byte*)sat->Name, 64*2);
string location = string.Format("{0}.{1}{2}", sat->LongitudeTimes10/10, sat->LongitudeTimes10%10, sat->IsWest != 0 ? "W" : "E");
Satellite satellite = new Satellite(sat->SatelliteNr);
satellite.Name = name;
satellite.OrbitalPosition = location;
this.DataRoot.Satellites.Add(sat->SatelliteNr, satellite);
}
}
}
#endregion
#region ReadTransponder()
private unsafe void ReadTransponder(ZipFile zip, string fileName)
{
byte[] data = ReadFileContent(zip, fileName);
if (data == null)
return;
fixed (byte* ptr = data)
{
int count = data.Length/c.dvbsTransponderLength;
for (int i=0; i<count; i++)
{
int baseOffset = 4 + i*c.dvbsTransponderLength;
TransponderDataBase* trans = (TransponderDataBase*) (ptr + baseOffset);
if (trans->Magic0x55 == 0)
continue;
if (trans->TransponderNr == 0)
continue;
var sat = this.DataRoot.Satellites.TryGet(trans->SatelliteNr);
if (sat == null)
{
DataRoot.Warnings.Append(string.Format("Transponder #{0} references invalid satellite #{1}",
trans->TransponderNr, trans->SatelliteNr));
continue;
}
Transponder transponder = new Transponder(trans->TransponderNr);
transponder.FrequencyInMhz = (uint) (trans->Frequency/1000);
transponder.Polarity = trans->IsVerticalPolarity == 1 ? 'V' : 'H';
transponder.SymbolRate = trans->SymbolRate/1000;
this.DataRoot.AddTransponder(sat, transponder);
}
}
}
#endregion
#region ReadDvbsChannels()
private unsafe void ReadDvbsChannels(ZipFile zip)
{
this.dvbsFileContent = ReadFileContent(zip, "map-SateD");
if (this.dvbsFileContent == null)
return;
this.DataRoot.AddChannelList(this.dvbsChannels);
fixed (byte* ptr = this.dvbsFileContent)
{
int entrySize = c.dvbsChannelLength;
int count = this.dvbsFileContent.Length/entrySize;
DvbSChannelDataMapping mapping = dvbsMappings.GetMapping(entrySize);
mapping.DataPtr = ptr;
for (int slotIndex = 0; slotIndex < count; slotIndex++)
{
MapDvbsChannel(this.dvbsChannels, mapping, slotIndex);
mapping.Next();
}
}
}
#endregion
#region MapDvbsChannel()
private void MapDvbsChannel(ChannelList channelList, DvbSChannelDataMapping rawChannel, int slotIndex)
{
if (!rawChannel.InUse)
return;
Transponder transponder = this.DataRoot.Transponder.TryGet(rawChannel.TransponderNr);
Satellite satellite = transponder == null ? null : transponder.Satellite;
string satPosition = satellite != null ? satellite.OrbitalPosition : "#" + rawChannel.SatelliteNr;
string satName = satellite != null ? satellite.Name : null;
ChannelInfo ci = new ChannelInfo(channelList.SignalSource, SignalType.Mixed, slotIndex, rawChannel.ProgramNr, rawChannel.Name);
ci.Satellite = satName;
ci.SatPosition = satPosition;
ci.VideoPid = rawChannel.VideoPid;
ci.ServiceId = rawChannel.ServiceId;
ci.ServiceType = rawChannel.ServiceType;
ci.TransportStreamId = rawChannel.TransportStreamId;
ci.OriginalNetworkId = rawChannel.OriginalNetworkId;
ci.Favorites = rawChannel.Favorites;
ci.Encrypted = rawChannel.Encrypted;
ci.Lock = rawChannel.Lock;
ci.ShortName = rawChannel.ShortName;
if (transponder != null)
{
ci.Transponder = transponder;
ci.FreqInMhz = transponder.FrequencyInMhz;
ci.ChannelOrTransponder = this.GetTransponderChannelNumber((ushort)transponder.FrequencyInMhz);
ci.SymbolRate = transponder.SymbolRate;
ci.Polarity = transponder.Polarity;
}
this.DataRoot.AddChannel(channelList, ci);
}
#endregion
#region GetTransponderChannelNumber()
private string GetTransponderChannelNumber(ushort frequency)
{
int nr = LookupData.Instance.GetTransponderNumber(frequency);
return nr <= 0 ? "" : nr.ToString("d3");
}
#endregion
#region ReadAstraHdPlusChannels()
private unsafe void ReadAstraHdPlusChannels(ZipFile zip)
{
this.hdplusFileContent = ReadFileContent(zip, "map-AstraHDPlusD");
if (hdplusFileContent == null || c.hdplusChannelLength == 0)
return;
this.DataRoot.AddChannelList(this.hdplusChannels);
fixed (byte* ptr = hdplusFileContent)
{
int entrySize = c.hdplusChannelLength;
int count = hdplusFileContent.Length / entrySize;
DvbSChannelDataMapping mapping = hdplusMappings.GetMapping(entrySize);
mapping.DataPtr = ptr;
for (int slotIndex = 0; slotIndex < count; slotIndex++)
{
MapDvbsChannel(this.hdplusChannels, mapping, slotIndex);
mapping.Next();
}
}
}
#endregion
#region ReadFileContent()
private static byte[] ReadFileContent(ZipFile zip, string fileName)
{
var entry = zip.GetEntry(fileName);
if (entry == null)
return null;
byte[] data = new byte[entry.Size];
using (var stream = zip.GetInputStream(entry))
{
stream.Read(data, 0, data.Length);
}
return data;
}
#endregion
private unsafe delegate void UpdateFunc(ChannelInfo channelInfo, byte* fileContent);
#region Save()
public override unsafe void Save(string tvOutputFile, string csvOutputFile, UnsortedChannelMode unsortedMode)
{
this.unsortedChannelMode = unsortedMode;
if (tvOutputFile != this.FileName)
{
File.Copy(this.FileName, tvOutputFile);
this.FileName = tvOutputFile;
}
using (ZipFile zip = new ZipFile(tvOutputFile))
{
zip.BeginUpdate();
this.SaveChannels(zip, "map-AirA", this.avbtChannels, this.UpdateAnalogChannel, ref this.avbtFileContent);
this.SaveChannels(zip, "map-CableA", this.avbcChannels, this.UpdateAnalogChannel, ref this.avbcFileContent);
this.SaveChannels(zip, "map-AirD", this.dvbtChannels, this.UpdateDvbctChannel, ref this.dvbtFileContent);
this.SaveChannels(zip, "map-CableD", this.dvbcChannels, this.UpdateDvbctChannel, ref this.dvbcFileContent);
this.SaveChannels(zip, "map-SateD", this.dvbsChannels, this.UpdateDvbsChannel, ref this.dvbsFileContent);
this.SaveChannels(zip, "map-AstraHDPlusD", this.hdplusChannels, this.UpdateHdPlusChannel, ref this.hdplusFileContent);
zip.CommitUpdate();
}
}
#endregion
#region SaveChannels()
private unsafe void SaveChannels(ZipFile zip, string fileName, ChannelList channels, UpdateFunc updateChannel, ref byte[] fileContent)
{
if (fileContent == null)
return;
zip.Delete(fileName);
string tempFilePath = Path.GetTempFileName();
using (var stream = new FileStream(tempFilePath, FileMode.OpenOrCreate, FileAccess.ReadWrite))
{
this.WriteChannels(channels, updateChannel, fileContent, stream);
stream.Flush();
stream.Seek(0, SeekOrigin.Begin);
int size = (int)new FileInfo(tempFilePath).Length;
fileContent = new byte[size];
stream.Read(fileContent, 0, size);
}
zip.Add(tempFilePath, fileName);
}
#endregion
#region WriteChannels()
private unsafe void WriteChannels(ChannelList list, UpdateFunc updateChannel, byte[] fileContent, FileStream stream)
{
fixed (byte* ptr = fileContent)
{
int maxSlot = 0;
foreach (var channel in list.Channels.OrderBy(ChannelComparer))
{
if (channel.RecordIndex < 0) // channel only exists in reference list
continue;
int newProgNr;
if (channel.NewProgramNr == 0 && this.unsortedChannelMode == UnsortedChannelMode.Hide)
newProgNr = 0;
else
{
newProgNr = channel.NewProgramNr != 0 ? channel.NewProgramNr : ++maxSlot;
if (newProgNr > maxSlot)
maxSlot = channel.NewProgramNr;
}
var channels = new List<ChannelInfo>();
channels.Add(channel);
channels.AddRange(channel.Duplicates);
foreach (var channelInstance in channels)
{
channelInstance.OldProgramNr = newProgNr;
updateChannel(channelInstance, ptr);
}
}
stream.Write(fileContent, 0, fileContent.Length);
#if false
if (count == 0 || count%padToPageSize != 0)
{
byte[] padding = new byte[(padToPageSize - count%padToPageSize) * entrySize];
stream.Write(padding, 0, padding.Length);
}
#endif
}
}
#endregion
#region UpdateAnalogChannel()
private unsafe void UpdateAnalogChannel(ChannelInfo channel, byte* ptr)
{
AnalogChannelDataMapping raw = analogMappings.GetMapping(c.avbtChannelLength);
int startOffset = channel.RecordIndex * raw.DataLength;
raw.DataPtr = ptr + startOffset;
raw.ProgramNr = (ushort)channel.OldProgramNr;
raw.Favorites = channel.Favorites;
raw.Lock = channel.Lock;
raw.Checksum = CalcChecksum(raw.DataPtr, raw.DataLength);
}
#endregion
#region UpdateDvbctChannel()
private unsafe void UpdateDvbctChannel(ChannelInfo channel, byte* ptr)
{
DvbCtChannelDataMapping raw = dvbctMappings.GetMapping(c.dvbtChannelLength);
int startOffset = channel.RecordIndex * raw.DataLength;
raw.DataPtr = ptr + startOffset;
raw.ProgramNr = (ushort)channel.OldProgramNr;
raw.Favorites = channel.Favorites;
raw.Lock = channel.Lock;
raw.Checksum = CalcChecksum(raw.DataPtr, raw.DataLength);
}
#endregion
#region UpdateDvbsChannel()
private unsafe void UpdateDvbsChannel(ChannelInfo channel, byte* ptr)
{
DvbSChannelDataMapping raw = dvbsMappings.GetMapping(c.dvbsChannelLength);
int startOffset = channel.RecordIndex*raw.DataLength;
raw.DataPtr = (ptr + startOffset);
raw.ProgramNr = (ushort)channel.OldProgramNr;
raw.Favorites = channel.Favorites;
raw.Lock = channel.Lock;
raw.Checksum = CalcChecksum(raw.DataPtr, raw.DataLength);
}
#endregion
#region UpdateHdPlusChannel()
private unsafe void UpdateHdPlusChannel(ChannelInfo channel, byte* ptr)
{
DvbSChannelDataMapping raw = hdplusMappings.GetMapping(c.hdplusChannelLength);
int startOffset = channel.RecordIndex * raw.DataLength;
raw.DataPtr = (ptr + startOffset);
raw.ProgramNr = (ushort)channel.OldProgramNr;
raw.Favorites = channel.Favorites;
raw.Lock = channel.Lock;
raw.Checksum = CalcChecksum(raw.DataPtr, raw.DataLength);
}
#endregion
#region CalcChecksum()
private static unsafe byte CalcChecksum(byte* ptr, int length)
{
byte checksum = 0;
for (int i = 1; i < length; i++)
checksum += *ptr++;
return checksum;
}
#endregion
#region ChannelComparer()
private string ChannelComparer(ChannelInfo channel)
{
if (channel.NewProgramNr != 0)
return "A" + channel.NewProgramNr.ToString("d4");
if (channel.OldProgramNr != 0)
{
if (this.unsortedChannelMode == UnsortedChannelMode.AppendInOrder)
return "B" + channel.OldProgramNr.ToString("d4");
return "B" + channel.Name;
}
return "Z";
}
#endregion
public override void ShowDeviceSettingsForm(object parentWindow)
{
MessageBox.Show((Form) parentWindow, "Sorry, ChanSort currently doesn't support any settings for your TV model.",
"Device Settings",
MessageBoxButtons.OK, MessageBoxIcon.Information);
}
}
}

View File

@@ -0,0 +1,15 @@
using ChanSort.Api;
namespace ChanSort.Plugin.ScmFile
{
public class ScmSerializerPlugin : ISerializerPlugin
{
public string PluginName { get { return "Samsung *.scm Loader"; } }
public string FileFilter { get { return "*.scm"; } }
public SerializerBase CreateSerializer(string inputFile)
{
return new ScmSerializer(inputFile);
}
}
}

View File

@@ -0,0 +1,97 @@
using System.Runtime.InteropServices;
namespace ChanSort.Plugin.ScmFile
{
[StructLayout(LayoutKind.Sequential, Pack=1)]
unsafe struct SatDataBase
{
public byte Magic0x55;
public int SatelliteNr;
public int TransponderCount;
public fixed ushort Name[64];
public int IsWest;
public int LongitudeTimes10;
};
[StructLayout(LayoutKind.Sequential, Pack = 1)]
struct TransponderDataBase
{
public byte Magic0x55;
public int TransponderNr;
public int SatelliteNr;
public int Frequency;
public int SymbolRate;
public int IsVerticalPolarity;
public int Modulation;
public int CodeRate;
public int Unknown1;
public int Unknown2;
public int Unknown3;
public int Unknown4;
};
#if false
[StructLayout(LayoutKind.Sequential, Pack=1)]
unsafe struct MapSateD
{
public ushort ChannelNumber;
public ushort VideoPid;
public ushort Pid;
public byte Mpeg4;
public byte Unknown8;
public ushort Unknown9;
public ushort Unknonw11;
public ushort Unknown13;
public byte ServiceType;
public byte Unknown16;
public ushort ServiceId;
public ushort TransponderNr;
public ushort SatelliteNr;
public ushort Unknown23;
public ushort TransportStreamId;
public ushort Unknown27;
public ushort OriginalNetworkId;
public ushort Unknown31;
public ushort HRes;
public ushort VRes;
public fixed ushort NameInBigEndianUtf16[51];
public ushort Bouquet;
public byte Unknown141;
public byte Locked;
public byte Favorites;
public byte ChecksumCSeries;
public fixed byte Padding [28];
}
#endif
#if false
[StructLayout(LayoutKind.Sequential, Pack = 1)]
unsafe struct MapAirD
{
public ushort ChannelNumber;
public ushort VideoPid;
public ushort PcrPid;
public ushort ServiceId;
public ushort Status;
public ushort Unknown11;
public ushort Qam;
public byte ServiceType;
public byte Codec;
public fixed byte Unknown17 [7];
public byte Encrypted;
public fixed byte Unknown25 [3];
public ushort Frequency;
public ushort LogicalChannelNumber;
public fixed byte Unknown31 [2];
public ushort SymbolRate;
public ushort Bouquet;
public ushort TransportStreamId;
public fixed byte Unknown39 [5];
public fixed ushort NameInBigEndianUtf16[100];
public byte Unknown244;
public ushort Locked;
public byte FavoritesX79;
public byte ChecksumBSeries;
public fixed byte PaddingCSeries [292 - 248];
}
#endif
}

View File

@@ -0,0 +1,219 @@
using System.Collections.Generic;
using System.Text;
using ChanSort.Api;
namespace ChanSort.Plugin.TllFile
{
#region class ActChannelDataMapping
/// <summary>
/// Mapping for Analog, Cable and Terrestrial
/// </summary>
public unsafe class ActChannelDataMapping : DvbChannelMappingBase
{
private readonly DvbStringDecoder dvbsStringDecoder;
private const string offFrequencyLong = "offFrequencyLong";
private const string offFavorites2 = "offFavorites2";
private const string offProgramNr2 = "offProgramNr2";
#region ctor()
public ActChannelDataMapping(IniFile.Section settings, int length, DvbStringDecoder dvbsStringDecoder) : base(settings, length, null)
{
this.dvbsStringDecoder = dvbsStringDecoder;
this.ReorderChannelData = settings.GetInt("reorderChannelData") != 0;
}
#endregion
#region Encoding
public Encoding Encoding
{
get { return this.dvbsStringDecoder.DefaultEncoding; }
set { this.dvbsStringDecoder.DefaultEncoding = value; }
}
#endregion
public bool ReorderChannelData { get; private set; }
#region Favorites
public override Favorites Favorites
{
get { return (Favorites)(this.GetByte(offFavorites) & 0x0F); }
set
{
int intValue = (int)value;
foreach (int off in this.GetOffsets(offFavorites))
this.DataPtr[off] = (byte) ((this.DataPtr[off] & 0xF0) | intValue);
intValue <<= 2;
foreach (int off in this.GetOffsets(offFavorites2))
this.DataPtr[off] = (byte)((this.DataPtr[off] & 0xC3) | intValue);
}
}
#endregion
#region ProgramNr
public override ushort ProgramNr
{
get { return base.ProgramNr; }
set
{
base.ProgramNr = value;
this.SetWord(offProgramNr2, (ushort)((value<<2) | (GetWord(offProgramNr2) & 0x03)));
}
}
#endregion
#region Name
public override string Name
{
get
{
string longName, shortName;
this.dvbsStringDecoder.GetChannelNames(this.NamePtr, this.NameLength, out longName, out shortName);
return longName;
}
set { ChannelDataMapping.SetChannelName(this, value, this.dvbsStringDecoder.DefaultEncoding); }
}
#endregion
#region ShortName
public override string ShortName
{
get
{
string longName, shortName;
this.dvbsStringDecoder.GetChannelNames(this.NamePtr, this.NameLength, out longName, out shortName);
return shortName;
}
}
#endregion
#region FrequencyLong
public virtual uint FrequencyLong
{
get { return this.GetDword(offFrequencyLong); }
set { this.SetDword(offFrequencyLong, value); }
}
#endregion
#region AnalogFrequency, AnalogChannelNr, AnalogChannelBand
public ushort AnalogFrequency
{
get { return this.PcrPid; }
set { this.PcrPid = value; }
}
public byte AnalogChannelNr
{
get { return (byte)(this.VideoPid & 0xFF); }
}
public byte AnalogChannelBand
{
get { return (byte)(this.VideoPid >> 8); }
}
#endregion
#region Validate()
public string Validate()
{
bool ok = true;
List<string> warnings = new List<string>();
ok &= ValidateByte(offChannelTransponder) || AddWarning(warnings, "Channel/Transponder number");
ok &= ValidateWord(offProgramNr) || AddWarning(warnings, "Program#");
ok &= ValidateByte(offFavorites) || AddWarning(warnings, "Favorites");
ok &= ValidateWord(offPcrPid) || AddWarning(warnings, "PCR-PID");
ok &= ValidateWord(offAudioPid) || AddWarning(warnings, "Audio-PID");
ok &= ValidateWord(offVideoPid) || AddWarning(warnings, "Video-PID");
ok &= ValidateString(offName, 40) || AddWarning(warnings, "Channel name");
ok &= ValidateByte(offNameLength) || AddWarning(warnings, "Channel name length");
ok &= ValidateWord(offServiceId) || AddWarning(warnings, "Service-ID");
ok &= ValidateString(offFrequencyLong, 4) || AddWarning(warnings, "Frequency");
ok &= ValidateWord(offOriginalNetworkId) || AddWarning(warnings, "Original Network-ID");
ok &= ValidateWord(offTransportStreamId) || AddWarning(warnings, "Transport Stream ID");
ok &= ValidateByte(offFavorites2) || AddWarning(warnings, "Favorites #2");
ok &= ValidateByte(offServiceType) || AddWarning(warnings, "Service Type");
if (ok)
return null;
StringBuilder sb = new StringBuilder();
foreach (var warning in warnings)
{
if (sb.Length > 0)
sb.Append(", ");
sb.Append(warning);
}
return sb.ToString();
}
#endregion
#region AddWarning()
private bool AddWarning(List<string> warnings, string p)
{
warnings.Add(p);
return false;
}
#endregion
#region ValidateByte()
private bool ValidateByte(string key)
{
var offsets = this.GetOffsets(key);
if (offsets == null || offsets.Length < 1)
return true;
byte value = *(this.DataPtr + offsets[0]);
bool ok = true;
foreach(int offset in offsets)
{
if (this.DataPtr[offset] != value)
ok = false;
}
return ok;
}
#endregion
#region ValidateWord()
private bool ValidateWord(string key)
{
var offsets = this.GetOffsets(key);
if (offsets == null || offsets.Length < 1)
return true;
ushort value = *(ushort*)(this.DataPtr + offsets[0]);
bool ok = true;
foreach (int offset in offsets)
{
if (*(ushort*) (this.DataPtr + offset) != value)
ok = false;
}
return ok;
}
#endregion
#region ValidateString()
private bool ValidateString(string key, int len)
{
var offsets = this.GetOffsets(key);
if (offsets == null || offsets.Length < 1)
return true;
bool ok = true;
int off0 = offsets[0];
for (int i = 1; i < offsets.Length; i++)
{
int offI = offsets[i];
for (int j = 0; j < len; j++)
{
byte b = this.DataPtr[off0 + j];
if (this.DataPtr[offI + j] != b)
ok = false;
if (b == 0)
break;
}
}
return ok;
}
#endregion
}
#endregion
}

View File

@@ -0,0 +1,138 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{E972D8A1-2F5F-421C-AC91-CFF45E5191BE}</ProjectGuid>
<OutputType>Library</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ChanSort.Plugin.TllFile</RootNamespace>
<AssemblyName>ChanSort.Plugin.TllFile</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|x86'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>..\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<AllowUnsafeBlocks>true</AllowUnsafeBlocks>
<DebugType>full</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
<CodeAnalysisIgnoreBuiltInRules>true</CodeAnalysisIgnoreBuiltInRules>
<CodeAnalysisFailOnMissingRules>true</CodeAnalysisFailOnMissingRules>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|x86'">
<OutputPath>bin\x86\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>x86</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
<CodeAnalysisFailOnMissingRules>true</CodeAnalysisFailOnMissingRules>
</PropertyGroup>
<ItemGroup>
<Reference Include="DevExpress.Data.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL" />
<Reference Include="System" />
<Reference Include="System.Core" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms" />
<Reference Include="System.Xml.Linq" />
<Reference Include="System.Data.DataSetExtensions" />
<Reference Include="System.Data" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="ActChannelDataMapping.cs" />
<Compile Include="ChannelDataMapping.cs" />
<Compile Include="DvbsChannelDataMapping.cs" />
<Compile Include="FirmwareDataMapping.cs" />
<Compile Include="ModelConstants.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Resource.de.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resource.de.resx</DependentUpon>
</Compile>
<Compile Include="Resource.Designer.cs">
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
<DependentUpon>Resource.resx</DependentUpon>
</Compile>
<Compile Include="TllFileSerializer.cs" />
<Compile Include="TllFileSerializer.sql.cs" />
<Compile Include="TllFileSerializerPlugin.cs" />
<Compile Include="TllStructures.cs" />
<Compile Include="TvSettingsForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="TvSettingsForm.Designer.cs">
<DependentUpon>TvSettingsForm.cs</DependentUpon>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ChanSort.Api\ChanSort.Api.csproj">
<Project>{DCCFFA08-472B-4D17-BB90-8F513FC01392}</Project>
<Name>ChanSort.Api</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<None Include="ChanSort.Plugin.TllFile.ini">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Properties\licenses.licx" />
<EmbeddedResource Include="Resource.de.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resource.de.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Resource.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resource.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="TvSettingsForm.de.resx">
<DependentUpon>TvSettingsForm.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="TvSettingsForm.resx">
<DependentUpon>TvSettingsForm.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

View File

@@ -0,0 +1,331 @@
; FileConfigurationX: overall file and DVB-S data layout
; ACTChannelDataMappingX: analog, DVB-C and DVB-T channel data mapping for data length X
[FileConfiguration1]
; LM and PM series except LM611S and LM340S
magicBytes = 90, 90, 90, 90
satCount = 64
satLength = 44
transponderCount = 2400
transponderLength = 40
dvbsChannelCount = 7520
dvbsChannelLength = 72
lnbCount = 40
lnbLength = 44
[FileConfiguration2]
; LV and LW series (some LW don't have DVB-S though), some LM models
magicBytes = 90, 90, 90, 90
satCount = 64
satLength = 44
transponderCount = 2400
transponderLength = 40
dvbsChannelCount = 7520
dvbsChannelLength = 68
lnbCount = 40
lnbLength = 44
[FileConfiguration3]
; DM and LH series
magicBytes =
satCount = 0
[ACTChannelDataMapping:192]
; LM series with Firmware 4.x (all except LM611S and LM340S)
reorderChannelData = 0
lenName = 40
offChannelTransponder = 10, 94, 126, 132
offProgramNr = 12, 128
offFavorites = 20
offPcrPid = 22, 180
offAudioPid = 24
offVideoPid = 26
offName = 30, 140
offNameLength = 70, 139
offServiceId = 72, 136
offFrequencyLong = 96
offOriginalNetworkId = 102
offTransportStreamId = 104
offFavorites2 = 134
offLock = 135
maskLock = 0x01
offSkip = 135
maskSkip = 0x02
offHide = 135
maskHide = 0x04
offServiceType = 138
offAudioPid2 = 182
[ACTChannelDataMapping:188]
; LM series with Firmware 3.x (LM611S with exceptions, LM340S)
reorderChannelData = 0
lenName = 40
offChannelTransponder = 10, 94, 125, 132
offProgramNr = 12, 128
offFavorites = 20
offPcrPid = 22, 180
offAudioPid = 24
offVideoPid = 26
offName = 30, 140
offNameLength = 70, 139
offServiceId = 72, 136
offFrequencyLong = 96
offOriginalNetworkId = 102
offTransportStreamId = 104
offFavorites2 = 134
offLock = 135
maskLock = 0x01
offSkip = 135
maskSkip = 0x02
offHide = 135
maskHide = 0x04
offServiceType = 138
offAudioPid2 = 182
[ACTChannelDataMapping:184]
; LV470S,LV570S,LV579S(with exceptions), LW5500,LW5590,LW570S,LW579S,LW650S,LW659S(with exceptions)
; LK950S, CS460S, PM670S, LM611S(with exceptions)
reorderChannelData = 0
lenName = 40
offChannelTransponder = 10, 90, 121, 128
offProgramNr = 12, 124
offFavorites = 20
offPcrPid = 22, 176
offAudioPid = 24
offVideoPid = 26
offName = 30, 136
offNameLength = 70, 135
offServiceId = 72, 132
offFrequencyLong = 92
offOriginalNetworkId = 98
offTransportStreamId = 100
offFavorites2 = 130
offLock = 131
maskLock = 0x01
offSkip = 131
maskSkip = 0x02
offHide = 131
maskHide = 0x04
offServiceType = 134
offAudioPid2 = 178
[ACTChannelDataMapping:180]
; PT
reorderChannelData = 0
lenName = 40
offChannelTransponder = 10, 90, 124
offProgramNr = 12
offFavorites = 20
offPcrPid = 22, 172
offAudioPid = 24
offVideoPid = 26
offName = 30, 132
offNameLength = 70, 131
offServiceId = 72, 128
offFrequencyLong = 92
offOriginalNetworkId = 98
offTransportStreamId = 100
offProgramNr2 = 120
offFavorites2 = 126
offLock = 127
maskLock = 0x01
offSkip = 127
maskSkip = 0x02
offHide = 127
maskHide = 0x04
offServiceType = 130
offAudioPid2 = 172
[ACTChannelDataMapping:176]
; LD, LE series, LK450, LW4500, LW5400
reorderChannelData = 0
lenName = 40
offChannelTransponder = 10, 86, 120
offProgramNr = 12
offFavorites = 20
offPcrPid = 22, 168
offAudioPid = 24
offVideoPid = 26
offName = 30, 128
offNameLength = 70, 127
offServiceId = 72, 124
offFrequencyLong = 88
offOriginalNetworkId = 94
offTransportStreamId = 96
offProgramNr2 = 116
offFavorites2 = 122
offLock = 123
maskLock = 0x01
offSkip = 123
maskSkip = 0x02
offHide = 123
maskHide = 0x04
offServiceType = 126
offAudioPid2 = 170
[ACTChannelDataMapping:164]
; DM and LH series
reorderChannelData = 1
lenName = 40
offChannelTransponder = 9, 112
offProgramNr = 10
offFavorites = 18
offPcrPid = 20, 156
offAudioPid = 22
offVideoPid = 24
offName = 28, 116
offNameLength = 68
offServiceId = 70
offOriginalNetworkId = 86
offTransportStreamId = 88
offFrequencyLong = 96
offProgramNr2 = 108
offFavorites2 = 113
offLock = 113
maskLock =
offSkip = 113
maskSkip = 0x20
offHide = 113
maskHide =
offServiceType = 115
offAudioPid2 = 158
[SatChannelDataMapping:68]
lenName = 40
offSatelliteNr = 0
offSourceType = 4
offTransponderIndex = 5, 12
offProgramNr = 8
offProgramNrPreset = 10
offFavorites = 14
maskFavorites = 0x3C
offDeleted = 14
maskDeleted = 0x42
offEncrypted = 14
maskEncrypted = 0x80
offLock = 15
maskLock = 0x01
offSkip = 15
maskSkip = 0x02
offHide = 15
maskHide = 0x04
offProgNrCustomized = 15
maskProgNrCustomized = 0x40
offServiceId = 16
offServiceType = 18
offNameLength = 19
offName = 20
offVideoPid = 60
offAudioPid = 62
[SatChannelDataMapping:72]
lenName = 40
offSatelliteNr = 0
offSourceType = 4
offTransponderIndex = 6, 12
offProgramNr = 8
offProgramNrPreset = 10
offFavorites = 14
maskFavorites = 0x3C
offDeleted = 14
maskDeleted = 0x42
offEncrypted = 14
maskEncrypted = 0x80
offLock = 15
maskLock = 0x01
offSkip = 15
maskSkip = 0x02
offHide = 15
maskHide = 0x04
offProgNrCustomized = 15
maskProgNrCustomized = 0x40
offServiceId = 16
offServiceType = 18
offNameLength = 19
offName = 20
offVideoPid = 60
offAudioPid = 62
[FirmwareData:6944]
; LH series
offSize = 0
offHotelModeEnabled=6543
offHotelModeDtvUpdate=6553
[FirmwareData:11008]
; DM (2350D)
offSize = 0
offHotelModeEnabled=10563
offHotelModeDtvUpdate=10573
[FirmwareData:15936]
; PT
offSize = 0
offHotelModeEnabled=12601
offHotelModeDtvUpdate=12611
[FirmwareData:15960]
; LW4500, LW5400
offSize = 0
offHotelModeEnabled=12603
offHotelModeDtvUpdate=12613
[FirmwareData:16024]
; LM611S, LM340S, CS460S
offSize = 0
offHotelModeEnabled=12639
offHotelModeDtvUpdate=12649
[FirmwareData:23072]
; LD420, LD450, LD550
offSize = 0
offHotelModeEnabled=19721
offHotelModeDtvUpdate=19731
[FirmwareData:23088]
; LK450
offSize = 0
offHotelModeEnabled=19723
offHotelModeDtvUpdate=19733
[FirmwareData:23096]
; LE5500, LD750
offSize = 0
offHotelModeEnabled=19721
offHotelModeDtvUpdate=19731
[FirmwareData:35504]
; LV,LW,LK950S
offSize = 0
offSystemLock =
offTvPassword =
offHbbTvEnabled =
offHotelModeEnabled=34643
offHotelModeDtvUpdate=34653
offHotelMenuAccessCode = 34668
offHotelMenuPin = 34714
[FirmwareData:36856]
; LM860V
offSize = 0
offSystemLock = 171
offTvPassword = 173
offHbbTvEnabled = 35096
offHotelModeEnabled=35635
offHotelModeDtvUpdate=35645
offHotelMenuAccessCode = 35660
offHotelMenuPin = 35706
offSettingsChannelUpdate=36544
[FirmwareData:36864]
; LM (except LM611S,LM340S and LM860V),PM,LS
offSize = 0
offSystemLock = 171
offTvPassword = 173
offHbbTvEnabled = 35096
offHotelModeEnabled=35635
offHotelModeDtvUpdate=35645
offHotelMenuAccessCode = 35660
offHotelMenuPin = 35706
offSettingsChannelUpdate=36544

View File

@@ -0,0 +1,23 @@
using System;
using System.Text;
using ChanSort.Api;
namespace ChanSort.Plugin.TllFile
{
internal static class ChannelDataMapping
{
public static unsafe void SetChannelName(ChannelMappingBase mapping, string channelName, Encoding defaultEncoding)
{
byte[] codePagePrefix = new byte[0]; // DvbStringDecoder.GetCodepageBytes(defaultEncoding);
byte[] name = defaultEncoding.GetBytes(channelName);
byte[] newName = new byte[codePagePrefix.Length + name.Length + 1];
Array.Copy(codePagePrefix, 0, newName, 0, codePagePrefix.Length);
Array.Copy(name, 0, newName, codePagePrefix.Length, name.Length);
fixed (byte* ptrNewName = newName)
{
mapping.NamePtr = ptrNewName;
}
mapping.NameLength = newName.Length;
}
}
}

View File

@@ -0,0 +1,197 @@
using System.Collections.Generic;
using System.Text;
using ChanSort.Api;
namespace ChanSort.Plugin.TllFile
{
public unsafe class DvbsChannelDataMapping : DvbChannelMappingBase
{
private const string offSatelliteNr = "offSatelliteNr";
private const string offTransponderIndex = "offTransponderIndex";
private const string offProgramNrPreset = "offProgramNrPreset";
private const string offProgNrCustomized = "offProgNrCustomized";
private const string maskProgNrCustomized = "maskProgNrCustomized";
private readonly DvbStringDecoder dvbsStringDecoder;
public DvbsChannelDataMapping(IniFile.Section settings, int dataLength, DvbStringDecoder dvbsStringDecoder) :
base(settings, dataLength, null)
{
this.dvbsStringDecoder = dvbsStringDecoder;
}
#region Encoding
public Encoding Encoding
{
get { return this.dvbsStringDecoder.DefaultEncoding; }
set { this.dvbsStringDecoder.DefaultEncoding = value; }
}
#endregion
#region InUse
public override bool InUse
{
get { return this.SatelliteNr != 0xFFFF; }
}
#endregion
#region IsDeleted
public override bool IsDeleted
{
get { return base.IsDeleted; }
set
{
base.IsDeleted = value;
if (value)
this.SatelliteNr = 0xFFFF;
}
}
#endregion
#region SatelliteNr
public int SatelliteNr
{
get { return this.GetWord(offSatelliteNr); }
set { this.SetWord(offSatelliteNr, value); }
}
#endregion
#region ProgramNr
public override ushort ProgramNr
{
get { return base.ProgramNr; }
set
{
base.ProgramNr = value;
this.IsProgNrCustomized = true;
}
}
#endregion
#region ProgramNrPreset
public int ProgramNrPreset
{
get { return this.GetWord(offProgramNrPreset); }
set { this.SetWord(offProgramNrPreset, (ushort)value); }
}
#endregion
#region IsProgNrCustomized
public bool IsProgNrCustomized
{
get { return GetFlag(offProgNrCustomized, maskProgNrCustomized); }
set { SetFlag(offProgNrCustomized, maskProgNrCustomized, value); }
}
#endregion
#region Name
public override string Name
{
get
{
string longName, shortName;
this.dvbsStringDecoder.GetChannelNames(this.NamePtr, this.NameLength, out longName, out shortName);
return longName;
}
set { ChannelDataMapping.SetChannelName(this, value, this.dvbsStringDecoder.DefaultEncoding); }
}
#endregion
#region ShortName
public override string ShortName
{
get
{
string longName, shortName;
this.dvbsStringDecoder.GetChannelNames(this.NamePtr, this.NameLength, out longName, out shortName);
return shortName;
}
}
#endregion
#region Favorites
public override Favorites Favorites
{
get { return (Favorites)((GetByte(offFavorites)>>2) & 0x0F); }
set
{
var newVal = (GetByte(offFavorites) & 0xC3) | (byte)((byte)value << 2);
SetByte(offFavorites, (byte)newVal);
}
}
#endregion
#region TransponderIndex
public ushort TransponderIndex
{
get { return GetWord(offTransponderIndex); }
set { SetWord(offTransponderIndex, value); }
}
#endregion
#region Validate()
public string Validate()
{
bool ok = true;
List<string> warnings = new List<string>();
ok &= ValidateByte(offTransponderIndex) || AddWarning(warnings, "Transponder index");
ok &= ValidateWord(offProgramNr) || AddWarning(warnings, "Program#");
if (ok)
return null;
StringBuilder sb = new StringBuilder();
foreach (var warning in warnings)
{
if (sb.Length > 0)
sb.Append(", ");
sb.Append(warning);
}
return sb.ToString();
}
#endregion
#region AddWarning()
private bool AddWarning(List<string> warnings, string p)
{
warnings.Add(p);
return false;
}
#endregion
#region ValidateByte()
private bool ValidateByte(string key)
{
var offsets = this.GetOffsets(key);
if (offsets == null || offsets.Length < 1)
return true;
byte value = *(this.DataPtr + offsets[0]);
bool ok = true;
foreach (int offset in offsets)
{
if (this.DataPtr[offset] != value)
ok = false;
}
return ok;
}
#endregion
#region ValidateWord()
private bool ValidateWord(string key)
{
var offsets = this.GetOffsets(key);
if (offsets == null || offsets.Length < 1)
return true;
ushort value = *(ushort*)(this.DataPtr + offsets[0]);
bool ok = true;
foreach (int offset in offsets)
{
if (*(ushort*)(this.DataPtr + offset) != value)
ok = false;
}
return ok;
}
#endregion
}
}

View File

@@ -0,0 +1,64 @@
using ChanSort.Api;
namespace ChanSort.Plugin.TllFile
{
public class FirmwareDataMapping : DataMapping
{
private const string offSize = "offSize";
private const string offSystemLock = "offSystemLock";
private const string offTvPassword = "offTvPassword";
private const string offHbbTvEnabled = "offHbbTvEnabled";
private const string offHotelModeEnabled = "offHotelModeEnabled";
private const string offHotelModeDtvUpdate = "offHotelModeDtvUpdate";
private const string offHotelMenuAccessCode = "offHotelMenuAccessCode";
private const string offHotelMenuPin = "offHotelMenuPin";
private const string offSettingsChannelUpdate = "offSettingsChannelUpdate";
public FirmwareDataMapping(IniFile.Section settings, int structureLength) :
base(settings, structureLength, null)
{
}
public uint Size { get { return this.GetDword(offSize); } }
public bool SystemLocked { get { return this.GetByte(offSystemLock) != 0; } }
public string TvPassword { get { return CodeToString(this.GetDword(offTvPassword)); } }
public string HotelMenuAccessCode { get { return CodeToString(this.GetDword(offHotelMenuAccessCode)); } }
public string HotelMenuPin { get { return CodeToString(this.GetDword(offHotelMenuPin)); } }
public bool SettingsAutomaticChannelUpdate
{
get { return this.GetByte(offSettingsChannelUpdate) != 0; }
set { this.SetByte(offSettingsChannelUpdate, (byte) (value ? 1 : 0)); }
}
public bool HbbTvEnabled
{
get { return this.GetByte(offHbbTvEnabled) != 0; }
set { this.SetByte(offHbbTvEnabled, (byte)(value ? 1 : 0)); }
}
public bool HotelModeEnabled
{
get { return this.GetByte(offHotelModeEnabled) != 0; }
set { this.SetByte(offHotelModeEnabled, (byte) (value ? 1 : 0)); }
}
public bool HotelModeDtvUpdate
{
get { return this.GetByte(offHotelModeDtvUpdate) != 0; }
set { this.SetByte(offHotelModeDtvUpdate, (byte)(value ? 1 : 0)); }
}
private string CodeToString(uint val)
{
var code = "";
for (int i = 0; i < 4; i++)
{
code += (char)(33 + (val & 0x0f));
val >>= 8;
}
return code;
}
}
}

View File

@@ -0,0 +1,49 @@
namespace ChanSort.Plugin.TllFile
{
public class ModelConstants
{
public readonly string series;
public readonly byte[] magicBytes;
public int actChannelLength; // auto-detect
public readonly int satCount;
public readonly int satLength;
public readonly int sizeOfTransponderBlockHeader;
public readonly int transponderCount;
public readonly int transponderLength;
public readonly int sizeOfZappingTableEntry = 8;
public readonly int dvbsMaxChannelCount;
public readonly int dvbsChannelLength;
public readonly int lnbCount;
public readonly int lnbLength;
public readonly int[] dvbsSubblockLength;
public bool hasDvbSBlock;
public int firmwareBlockLength; // auto-detect
public ModelConstants(Api.IniFile.Section iniSection)
{
this.series = iniSection.Name;
this.magicBytes = iniSection.GetBytes("magicBytes");
this.satCount = iniSection.GetInt("satCount");
this.satLength = iniSection.GetInt("satLength");
this.transponderCount = iniSection.GetInt("transponderCount");
this.transponderLength = iniSection.GetInt("transponderLength");
this.sizeOfTransponderBlockHeader = 14 + transponderCount/8 + transponderCount*6 + 2;
this.dvbsMaxChannelCount = iniSection.GetInt("dvbsChannelCount");
this.dvbsChannelLength = iniSection.GetInt("dvbsChannelLength");
this.lnbCount = iniSection.GetInt("lnbCount");
this.lnbLength = iniSection.GetInt("lnbLength");
this.dvbsSubblockLength = new[]
{
12,
14 + 2 + this.satCount + this.satCount*this.satLength, // 2896
sizeOfTransponderBlockHeader - 4 + transponderCount * transponderLength, // 110712
12 + dvbsMaxChannelCount/8 + dvbsMaxChannelCount*sizeOfZappingTableEntry + dvbsMaxChannelCount * dvbsChannelLength, // 602552
8 + lnbCount * lnbLength // 1768
};
}
}
}

View File

@@ -0,0 +1,38 @@
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
[assembly: InternalsVisibleTo("Test.Plugin.TllFile")]
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("ChanSort.Plugin.TllFile")]
[assembly: AssemblyDescription("")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ChanSort.Plugin.TllFile")]
[assembly: AssemblyCopyright("Copyright © 2012")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("387d8661-ecb3-4957-afca-9a156a90f384")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,4 @@
DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.TextEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a

View File

@@ -0,0 +1,117 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.586
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ChanSort.Plugin.TllFile {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resource {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resource() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ChanSort.Plugin.TllFile.Resource", typeof(Resource).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
/// <summary>
/// Looks up a localized string similar to File format is not supported: bad header.
/// </summary>
internal static string TllFileSerializer_ERR_badFileHeader {
get {
return ResourceManager.GetString("TllFileSerializer_ERR_badFileHeader", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Channel #{0} (Pr# {1}) was erased because it is a duplicate of channel #{2} (Pr# {3}): {4}.
/// </summary>
internal static string TllFileSerializer_ERR_dupeChannel {
get {
return ResourceManager.GetString("TllFileSerializer_ERR_dupeChannel", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Wrong checksum: calculated {1:x8} but file has {0:x8}.
/// </summary>
internal static string TllFileSerializer_ERR_wrongChecksum {
get {
return ResourceManager.GetString("TllFileSerializer_ERR_wrongChecksum", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to File size {0} is larger than allowed maxiumum of {1}.
/// </summary>
internal static string TllFileSerializerPlugin_ERR_fileTooBig {
get {
return ResourceManager.GetString("TllFileSerializerPlugin_ERR_fileTooBig", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The file content doesn&apos;t match any supported model.
/// </summary>
internal static string TllFileSerializerPlugin_ERR_modelUnknown {
get {
return ResourceManager.GetString("TllFileSerializerPlugin_ERR_modelUnknown", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to LG-Electronics *.tll Loader.
/// </summary>
internal static string TllFileSerializerPlugin_PluginName {
get {
return ResourceManager.GetString("TllFileSerializerPlugin_PluginName", resourceCulture);
}
}
}
}

View File

View File

@@ -0,0 +1,138 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="TllFileSerializer_ERR_badFileHeader" xml:space="preserve">
<value>Ungültiges Dateiformat: Dateikopf unbekannt</value>
</data>
<data name="TllFileSerializer_ERR_wrongChecksum" xml:space="preserve">
<value>Prüfsummenfehler: berechnet wurde {1:x8} aber Datei enthält {0:x8}</value>
</data>
<data name="TllFileSerializerPlugin_ERR_modelUnknown" xml:space="preserve">
<value>Der Dateiinhalt entstpricht keinem bekannten Modell</value>
</data>
<data name="TllFileSerializerPlugin_ERR_fileTooBig" xml:space="preserve">
<value>Dateigröße {0} überschreitet das erlaubte Maximum von {1}</value>
</data>
<data name="TllFileSerializerPlugin_PluginName" xml:space="preserve">
<value>LG-Electronics *.tll Loader</value>
</data>
<data name="TllFileSerializer_ERR_dupeChannel" xml:space="preserve">
<value>Sender #{0} (Pr# {1}) wurde gelöscht da er ein Duplikat von Sender #{2} (Pr# {3}) ist: {4}</value>
</data>
</root>

View File

@@ -0,0 +1,119 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 1.3
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">1.3</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1">this is my long string</data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
[base64 mime encoded serialized .NET Framework object]
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
[base64 mime encoded string representing a byte array form of the .NET Framework object]
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>1.3</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.3500.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="TllFileSerializer_ERR_badFileHeader" xml:space="preserve">
<value>File format is not supported: bad header</value>
</data>
<data name="TllFileSerializer_ERR_wrongChecksum" xml:space="preserve">
<value>Wrong checksum: calculated {1:x8} but file has {0:x8}</value>
</data>
<data name="TllFileSerializerPlugin_ERR_modelUnknown" xml:space="preserve">
<value>The file content doesn't match any supported model</value>
</data>
<data name="TllFileSerializerPlugin_ERR_fileTooBig" xml:space="preserve">
<value>File size {0} is larger than allowed maxiumum of {1}</value>
</data>
<data name="TllFileSerializerPlugin_PluginName" xml:space="preserve">
<value>LG-Electronics *.tll Loader</value>
</data>
<data name="TllFileSerializer_ERR_dupeChannel" xml:space="preserve">
<value>Channel #{0} (Pr# {1}) was erased because it is a duplicate of channel #{2} (Pr# {3}): {4}</value>
</data>
</root>

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,208 @@
using System;
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Text;
using ChanSort.Api;
namespace ChanSort.Plugin.TllFile
{
public partial class TllFileSerializer
{
#region SQL
/*
create table list (
listid int not null,
filename varchar(100),
created datetime,
primary key (listid))
create table channel (
listid int not null,
slot int not null,
isdel bit not null,
seq int,
progmask int not null,
prognr int not null,
name varchar(40) not null,
tpnr int not null,
satnr int,
onid int not null,
tsid int not null,
ssid int not null,
uid varchar(25),
favcrypt int,
lockskiphide int,
progfix int,
primary key (listid, slot))
create table chanseq(
listid int not null,
seq int not null,
slot int not null,
primary key (listid, seq))
update channel
set seq=s.seq
from channel c inner join chanseq s on s.listid=c.listid and s.slot=c.slot
*/
#endregion
private unsafe void StoreToDatabase()
{
return;
var list = this.DataRoot.GetChannelList(SignalSource.DvbS, SignalType.Tv, false);
if (list == null)
return;
using (var conn = SqlClientFactory.Instance.CreateConnection())
{
conn.ConnectionString = "server=(local);database=ChanSort;Integrated Security=true";
conn.Open();
using (var cmd = conn.CreateCommand())
{
var listId = InsertListData(cmd);
fixed (byte* ptr = this.fileContent)
{
InsertSequenceData(ptr, cmd, listId);
InsertChannelData(ptr, cmd, listId);
}
}
}
}
private unsafe void InsertSequenceData(byte* ptr, DbCommand cmd, int listId)
{
cmd.Parameters.Clear();
cmd.CommandText = "insert into chanseq(listid,seq,slot) values (" + listId + ",@seq,@slot)";
var pSeq = cmd.CreateParameter();
pSeq.ParameterName = "@seq";
pSeq.DbType = DbType.Int32;
cmd.Parameters.Add(pSeq);
var pSlot = cmd.CreateParameter();
pSlot.ParameterName = "@slot";
pSlot.DbType = DbType.Int32;
cmd.Parameters.Add(pSlot);
SatChannelListHeader* header = (SatChannelListHeader*) (ptr + this.dvbsChannelHeaderOffset);
int seq = 0;
ushort tableIndex = header->LinkedListStartIndex;
while(tableIndex != 0xFFFF)
{
ushort* entry = (ushort*)(ptr + this.dvbsChannelLinkedListOffset + tableIndex*c.sizeOfZappingTableEntry);
pSeq.Value = seq;
if (entry[2] != tableIndex)
break;
pSlot.Value = (int)tableIndex;
cmd.ExecuteNonQuery();
tableIndex = entry[1];
++seq;
}
}
#region InsertListData()
private int InsertListData(DbCommand cmd)
{
cmd.CommandText = "select max(listid) from list";
var maxObj = cmd.ExecuteScalar();
int listId = maxObj == DBNull.Value ? 1 : (int) maxObj + 1;
cmd.CommandText = "insert into list(listid, filename, created) values (" + listId + ", @filename, getdate())";
var parm = cmd.CreateParameter();
parm.ParameterName = "@filename";
parm.DbType = DbType.String;
parm.Value = this.FileName;
cmd.Parameters.Add(parm);
cmd.ExecuteNonQuery();
return listId;
}
#endregion
#region InsertChannelData()
private unsafe void InsertChannelData(byte* ptr, DbCommand cmd, int listId)
{
PrepareChannelInsert(cmd);
dvbsMapping.DataPtr = ptr + this.dvbsChannelListOffset;
for (int slot = 0; slot < this.dvbsChannelCount; slot++)
{
cmd.Parameters["@listid"].Value = listId;
cmd.Parameters["@slot"].Value = slot;
cmd.Parameters["@seq"].Value = DBNull.Value;
cmd.Parameters["@isdel"].Value = dvbsMapping.InUse ? 0 : 1;
cmd.Parameters["@progmask"].Value = dvbsMapping.ProgramNr;
cmd.Parameters["@prognr"].Value = (dvbsMapping.ProgramNr & 0x3FFF);
cmd.Parameters["@progfix"].Value = dvbsMapping.ProgramNrPreset;
cmd.Parameters["@name"].Value = dvbsMapping.Name;
cmd.Parameters["@tpnr"].Value = dvbsMapping.TransponderIndex;
var transp = this.DataRoot.Transponder.TryGet(dvbsMapping.TransponderIndex);
cmd.Parameters["@satnr"].Value = transp == null ? (object)DBNull.Value : transp.Satellite.Id;
cmd.Parameters["@onid"].Value = transp == null ? (object)DBNull.Value : transp.OriginalNetworkId;
cmd.Parameters["@tsid"].Value = transp == null ? (object)DBNull.Value : transp.TransportStreamId;
cmd.Parameters["@ssid"].Value = (int)dvbsMapping.ServiceId;
cmd.Parameters["@uid"].Value = transp == null
? (object) DBNull.Value
: transp.TransportStreamId + "-" + transp.OriginalNetworkId + "-" +
dvbsMapping.ServiceId;
cmd.Parameters["@favcrypt"].Value = (int)dvbsMapping.GetByte("offFavorites");
cmd.Parameters["@lockskiphide"].Value = (int)dvbsMapping.GetByte("offLock");
cmd.ExecuteNonQuery();
dvbsMapping.Next();
}
}
#endregion
#region PrepareChannelInsert()
private static void PrepareChannelInsert(DbCommand cmd)
{
var cols = new[] { "listid", "slot", "seq", "isdel", "progmask", "prognr", "progfix", "name", "tpnr", "satnr", "onid", "tsid", "ssid", "uid", "favcrypt", "lockskiphide" };
cmd.Parameters.Clear();
var sb = new StringBuilder();
sb.Append("insert into channel (");
var comma = "";
foreach (var col in cols)
{
sb.Append(comma).Append(col);
comma = ",";
}
sb.Append(") values (");
comma = "";
foreach (var col in cols)
{
sb.Append(comma).Append('@').Append(col);
comma = ",";
}
sb.Append(")");
cmd.CommandText = sb.ToString();
foreach (var col in cols)
{
DbParameter parm = cmd.CreateParameter();
parm.ParameterName = "@" + col;
if (col == "name" || col == "uid")
{
parm.DbType = DbType.String;
parm.Size = 40;
}
else
parm.DbType = DbType.Int32;
cmd.Parameters.Add(parm);
}
cmd.Prepare();
}
#endregion
}
}

View File

@@ -0,0 +1,185 @@
using System.Collections.Generic;
using System.IO;
using System.Reflection;
using System.Text;
using ChanSort.Api;
namespace ChanSort.Plugin.TllFile
{
public class TllFileSerializerPlugin : ISerializerPlugin
{
private const int MAX_FILE_SIZE = 16*1000*1000;
private readonly string ERR_modelUnknown = Resource.TllFileSerializerPlugin_ERR_modelUnknown;
private readonly string ERR_fileTooBig = Resource.TllFileSerializerPlugin_ERR_fileTooBig;
private static readonly byte[] DVBS_S2 = Encoding.ASCII.GetBytes("DVBS-S2");
private readonly MappingPool<ActChannelDataMapping> actMappings = new MappingPool<ActChannelDataMapping>("Analog and DVB-C/T");
private readonly MappingPool<DvbsChannelDataMapping> dvbsMappings = new MappingPool<DvbsChannelDataMapping>("DVB-S");
private readonly MappingPool<FirmwareDataMapping> firmwareMappings = new MappingPool<FirmwareDataMapping>("Firmware");
private readonly List<ModelConstants> modelConstants = new List<ModelConstants>();
private string series = "";
public string PluginName { get { return Resource.TllFileSerializerPlugin_PluginName; } }
public string FileFilter { get { return "*.TLL"; } }
public TllFileSerializerPlugin()
{
this.ReadConfigurationFromIniFile();
}
#region ReadConfigurationFromIniFile()
private void ReadConfigurationFromIniFile()
{
DvbStringDecoder dvbsStringDecoder = new DvbStringDecoder(null);
string iniFile = Assembly.GetExecutingAssembly().Location.Replace(".dll", ".ini");
IniFile ini = new IniFile(iniFile);
foreach (var section in ini.Sections)
{
int idx = section.Name.IndexOf(":");
int recordLength = idx < 0 ? 0 : int.Parse(section.Name.Substring(idx + 1));
if (section.Name.StartsWith("FileConfiguration"))
this.ReadModelConstants(section);
else if (section.Name.StartsWith("ACTChannelDataMapping"))
actMappings.AddMapping(new ActChannelDataMapping(section, recordLength, dvbsStringDecoder));
else if (section.Name.StartsWith("SatChannelDataMapping"))
dvbsMappings.AddMapping(new DvbsChannelDataMapping(section, recordLength, dvbsStringDecoder));
else if (section.Name.StartsWith("FirmwareData"))
firmwareMappings.AddMapping(new FirmwareDataMapping(section, recordLength));
}
}
private void ReadModelConstants(IniFile.Section section)
{
if (this.series.Length > 0)
this.series += ",";
this.series += section.Name;
ModelConstants c = new ModelConstants(section);
this.modelConstants.Add(c);
}
#endregion
#region CreateSerializer()
public SerializerBase CreateSerializer(string inputFile)
{
long fileSize = new FileInfo(inputFile).Length;
if (fileSize > MAX_FILE_SIZE)
throw new IOException(string.Format(ERR_fileTooBig, fileSize, MAX_FILE_SIZE));
byte[] fileContent = File.ReadAllBytes(inputFile);
ModelConstants model = this.DetermineModel(fileContent);
if (model == null)
throw new IOException(ERR_modelUnknown);
return new TllFileSerializer(inputFile, model,
this.actMappings.GetMapping(model.actChannelLength),
this.dvbsMappings.GetMapping(model.dvbsChannelLength),
this.firmwareMappings.GetMapping(model.firmwareBlockLength, false),
fileContent);
}
#endregion
#region DetermineModel()
private ModelConstants DetermineModel(byte[] fileContent)
{
foreach (var model in this.modelConstants)
{
if (this.IsModel(fileContent, model))
return model;
}
return null;
}
#endregion
#region IsModel()
private unsafe bool IsModel(byte[] fileContent, ModelConstants c)
{
c.hasDvbSBlock = false;
fixed (byte* p = fileContent)
{
long fileSize = fileContent.Length;
// check magic file header
uint offset = 0;
if (fileSize < c.magicBytes.Length)
return false;
if (!ByteCompare(p, c.magicBytes))
return false;
offset += (uint)c.magicBytes.Length;
// analog channel block
if (offset + 8 > fileSize) return false;
uint blockSize = *(uint*)(p + offset);
uint channelCount = *(uint*) (p + offset + 4);
if (blockSize < 4 + channelCount)
return false;
if (blockSize > 4 && channelCount > 0)
c.actChannelLength = (int)((blockSize - 4)/channelCount);
offset += 4 + blockSize;
// firmware data block
if (offset + 4 > fileSize) return false;
blockSize = *(uint*) (p + offset);
c.firmwareBlockLength = (int)blockSize;
offset += 4 + blockSize;
// DVB-C/T channel block
if (offset + 8 > fileSize) return false;
blockSize = *(uint*) (p + offset);
channelCount = *(uint*) (p + offset + 4);
if (blockSize < 4 + channelCount)
return false;
if (blockSize > 4 && channelCount > 0)
c.actChannelLength = (int)((blockSize - 4) / channelCount);
offset += 4 + blockSize;
// optional blocks
while (offset != fileSize)
{
if (offset + 4 > fileSize)
return false;
blockSize = *(uint*) (p + offset);
// check for DVBS-S2 block
if (blockSize >= sizeof(DvbSBlockHeader))
{
DvbSBlockHeader* header = (DvbSBlockHeader*) (p + offset);
if (ByteCompare(header->DvbS_S2, DVBS_S2))
{
c.hasDvbSBlock = true;
int length = sizeof(DvbSBlockHeader) +
c.satCount*c.satLength +
c.sizeOfTransponderBlockHeader +
c.transponderCount*c.transponderLength +
sizeof(SatChannelListHeader) +
c.dvbsMaxChannelCount/8 +
c.dvbsMaxChannelCount*c.sizeOfZappingTableEntry +
c.dvbsMaxChannelCount*c.dvbsChannelLength +
sizeof(LnbBlockHeader) + c.lnbCount*c.lnbLength;
if (length != 4 + blockSize)
return false;
}
}
offset += 4 + blockSize;
}
return true;
}
}
#endregion
#region ByteCompare()
private static unsafe bool ByteCompare(byte* buffer, byte[] expected)
{
for (int i = 0; i < expected.Length; i++)
{
if (buffer[i] != expected[i])
return false;
}
return true;
}
#endregion
}
}

View File

@@ -0,0 +1,169 @@
using System.Runtime.InteropServices;
namespace ChanSort.Plugin.TllFile
{
/*
TllFileHeader? ("ZZZZ" or nothing)
ChannelBlock
AnalogChannel[]
FirmwareBlock
ChannelBlock
DvbCtChannel[]
DvbSBlockHeader
TllSatellite[64]
TransponderBlockHeader
TllTransponder[2400]
SatChannelListHeader
DvbSChannel[7520]
LnbBlockHeader
Lnb[40]
SettingsBlock?
*/
#region struct ChannelBlock
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public struct ChannelBlock
{
public uint BlockSize; // = 4 + ChannelCount * ChannelLength
public uint ChannelCount;
public uint ChannelLength { get { return ChannelCount == 0 ? 0 : (BlockSize - 4) / ChannelCount; } }
public byte StartOfChannelList;
}
#endregion
#region struct FirmwareBlock
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public unsafe struct FirmwareBlock
{
public uint BlockSize;
public fixed byte Unknown_0x0000[35631];
public fixed byte HotelMenu[29];
public fixed byte Unknown_0x8B4C[1204]; // or more
}
#endregion
#region struct DvbSBlockHeader
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public unsafe struct DvbSBlockHeader
{
public uint BlockSize;
public uint Crc32ForSubblock1;
public fixed byte DvbS_S2 [8]; // "DVBS-S2\0"
public ushort Unknown_0x10; // 0x0007
public ushort Unknown_0x12; // 0x0004 // 0x0000
public uint Crc32ForSubblock2;
public const int Unknown0x18_Length = 12;
public fixed byte Unknown_0x18[Unknown0x18_Length];
public ushort SatOrderLength;
public fixed byte SatOrder[64];
public fixed byte Unknown [2];
//public fixed TllSatellite Satellites[64]
}
#endregion
#region struct TllSatellite
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public unsafe struct TllSatellite
{
public const int SatNameLength =32;
public fixed byte Name [SatNameLength];
public byte PosDeg;
public byte PosCDeg;
public byte Unknown_34; // typically 0
public byte Unknown_35; // typically 2
public ushort Unknown_36; // 0xFFFF if sat is not used
public ushort Unknown_38; // 0xFFFF if sat is not used
public ushort TransponderCount;
public ushort Unknown_42; // typically 0
}
#endregion
#region struct TransponderLinkedList
public struct TransponderLinkedList
{
public ushort Prev;
public ushort Next;
public ushort Current;
}
#endregion
#region struct TransponderBlockHeader
public unsafe struct TransponderBlockHeader
{
public uint Crc32;
public ushort Unknown1;
public ushort HeadIndex;
public ushort TailIndex1;
public ushort TailIndex2;
public ushort TransponderCount;
public fixed byte AllocationBitmap [2400/8];
public fixed ushort TransponderLinkedList [2400*3];
public ushort Unknown3;
// public fixed TllTransponder Transponders[2400]
}
#endregion
#region struct TllTransponder
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public unsafe struct TllTransponder
{
public fixed byte Unknown_0x00 [10];
public ushort Index;
public ushort Frequency;
public fixed byte Unknown_0x0E [4];
public ushort NetworkId;
public ushort TransportStreamId;
public fixed byte Unknown_0x16 [3];
public ushort SymbolRateAndPolarity;
public fixed byte Unknown_0x1B [9];
public byte SatIndex;
public fixed byte Unknown_0x25 [3];
//public int SymbolRate { get { return this.SymbolRateAndPolarity & 0x7FFFF; } }
public ushort SymbolRate { get { return this.SymbolRateAndPolarity; } set { this.SymbolRateAndPolarity = value; } }
public char Polarity { get { return '\0'; } }
}
#endregion
#region struct SatChannelListHeader
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public unsafe struct SatChannelListHeader
{
public uint Checksum;
public fixed byte Unknown_0x04[4];
public ushort LinkedListStartIndex;
public ushort LinkedListEndIndex1;
public ushort LinkedListEndIndex2;
public ushort ChannelCount;
}
#endregion
#region struct LnbBlockHeader
public unsafe struct LnbBlockHeader
{
public uint crc32;
public ushort lastUsedIndex;
public fixed byte lnbAllocationBitmap[6];
// public Lnb lnbs[40];
}
#endregion
#region struct Lnb
[StructLayout(LayoutKind.Sequential, Pack = 1)]
public unsafe struct Lnb
{
public byte SettingsID;
public fixed byte Unknown_0x0D[3];
public byte SatelliteID;
public fixed byte Unknown_0x11[3];
public fixed byte FrequencyName[12];
public ushort LOF1;
public fixed byte Unknown_0x22 [2];
public ushort LOF2;
public fixed byte Unknown_0x26 [18];
}
#endregion
}

View File

@@ -0,0 +1,223 @@
namespace ChanSort.Plugin.TllFile
{
partial class TvSettingsForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(TvSettingsForm));
this.grpSettings = new DevExpress.XtraEditors.GroupControl();
this.cbHbbTv = new DevExpress.XtraEditors.CheckEdit();
this.cbCustomCountry = new DevExpress.XtraEditors.CheckEdit();
this.comboBoxEdit1 = new DevExpress.XtraEditors.ComboBoxEdit();
this.labelControl1 = new DevExpress.XtraEditors.LabelControl();
this.btnOk = new DevExpress.XtraEditors.SimpleButton();
this.btnCancel = new DevExpress.XtraEditors.SimpleButton();
this.grpHotelMode = new DevExpress.XtraEditors.GroupControl();
this.labelControl3 = new DevExpress.XtraEditors.LabelControl();
this.labelControl2 = new DevExpress.XtraEditors.LabelControl();
this.cbDtvUpdate = new DevExpress.XtraEditors.CheckEdit();
this.cbHotelMode = new DevExpress.XtraEditors.CheckEdit();
this.cbAutoChannelUpdate = new DevExpress.XtraEditors.CheckEdit();
this.groupControl1 = new DevExpress.XtraEditors.GroupControl();
this.grpFirmwareNote = new DevExpress.XtraEditors.GroupControl();
this.labelControl4 = new DevExpress.XtraEditors.LabelControl();
((System.ComponentModel.ISupportInitialize)(this.grpSettings)).BeginInit();
this.grpSettings.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.cbHbbTv.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.cbCustomCountry.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.comboBoxEdit1.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.grpHotelMode)).BeginInit();
this.grpHotelMode.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.cbDtvUpdate.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.cbHotelMode.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.cbAutoChannelUpdate.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.groupControl1)).BeginInit();
this.groupControl1.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.grpFirmwareNote)).BeginInit();
this.grpFirmwareNote.SuspendLayout();
this.SuspendLayout();
//
// grpSettings
//
this.grpSettings.Controls.Add(this.cbHbbTv);
this.grpSettings.Controls.Add(this.cbCustomCountry);
this.grpSettings.Controls.Add(this.comboBoxEdit1);
this.grpSettings.Controls.Add(this.labelControl1);
resources.ApplyResources(this.grpSettings, "grpSettings");
this.grpSettings.Name = "grpSettings";
//
// cbHbbTv
//
resources.ApplyResources(this.cbHbbTv, "cbHbbTv");
this.cbHbbTv.Name = "cbHbbTv";
this.cbHbbTv.Properties.Caption = resources.GetString("cbHbbTv.Properties.Caption");
//
// cbCustomCountry
//
resources.ApplyResources(this.cbCustomCountry, "cbCustomCountry");
this.cbCustomCountry.Name = "cbCustomCountry";
this.cbCustomCountry.Properties.Caption = resources.GetString("cbCustomCountry.Properties.Caption");
this.cbCustomCountry.CheckedChanged += new System.EventHandler(this.cbCustomCountry_CheckedChanged);
//
// comboBoxEdit1
//
resources.ApplyResources(this.comboBoxEdit1, "comboBoxEdit1");
this.comboBoxEdit1.Name = "comboBoxEdit1";
this.comboBoxEdit1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] {
new DevExpress.XtraEditors.Controls.EditorButton(((DevExpress.XtraEditors.Controls.ButtonPredefines)(resources.GetObject("comboBoxEdit1.Properties.Buttons"))))});
this.comboBoxEdit1.Properties.TextEditStyle = DevExpress.XtraEditors.Controls.TextEditStyles.DisableTextEditor;
//
// labelControl1
//
resources.ApplyResources(this.labelControl1, "labelControl1");
this.labelControl1.Name = "labelControl1";
//
// btnOk
//
resources.ApplyResources(this.btnOk, "btnOk");
this.btnOk.DialogResult = System.Windows.Forms.DialogResult.OK;
this.btnOk.Name = "btnOk";
this.btnOk.Click += new System.EventHandler(this.btnOk_Click);
//
// btnCancel
//
resources.ApplyResources(this.btnCancel, "btnCancel");
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.Name = "btnCancel";
//
// grpHotelMode
//
this.grpHotelMode.Controls.Add(this.labelControl3);
this.grpHotelMode.Controls.Add(this.labelControl2);
this.grpHotelMode.Controls.Add(this.cbDtvUpdate);
this.grpHotelMode.Controls.Add(this.cbHotelMode);
resources.ApplyResources(this.grpHotelMode, "grpHotelMode");
this.grpHotelMode.Name = "grpHotelMode";
//
// labelControl3
//
resources.ApplyResources(this.labelControl3, "labelControl3");
this.labelControl3.Name = "labelControl3";
//
// labelControl2
//
resources.ApplyResources(this.labelControl2, "labelControl2");
this.labelControl2.Name = "labelControl2";
//
// cbDtvUpdate
//
resources.ApplyResources(this.cbDtvUpdate, "cbDtvUpdate");
this.cbDtvUpdate.Name = "cbDtvUpdate";
this.cbDtvUpdate.Properties.Caption = resources.GetString("cbDtvUpdate.Properties.Caption");
//
// cbHotelMode
//
resources.ApplyResources(this.cbHotelMode, "cbHotelMode");
this.cbHotelMode.Name = "cbHotelMode";
this.cbHotelMode.Properties.Caption = resources.GetString("cbHotelMode.Properties.Caption");
//
// cbAutoChannelUpdate
//
resources.ApplyResources(this.cbAutoChannelUpdate, "cbAutoChannelUpdate");
this.cbAutoChannelUpdate.Name = "cbAutoChannelUpdate";
this.cbAutoChannelUpdate.Properties.Caption = resources.GetString("cbAutoChannelUpdate.Properties.Caption");
//
// groupControl1
//
this.groupControl1.Controls.Add(this.cbAutoChannelUpdate);
resources.ApplyResources(this.groupControl1, "groupControl1");
this.groupControl1.Name = "groupControl1";
//
// grpFirmwareNote
//
this.grpFirmwareNote.Controls.Add(this.labelControl4);
resources.ApplyResources(this.grpFirmwareNote, "grpFirmwareNote");
this.grpFirmwareNote.Name = "grpFirmwareNote";
//
// labelControl4
//
resources.ApplyResources(this.labelControl4, "labelControl4");
this.labelControl4.Name = "labelControl4";
//
// TvSettingsForm
//
this.AcceptButton = this.btnOk;
this.Appearance.Options.UseBackColor = true;
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnCancel;
this.Controls.Add(this.grpHotelMode);
this.Controls.Add(this.btnCancel);
this.Controls.Add(this.btnOk);
this.Controls.Add(this.grpSettings);
this.Controls.Add(this.groupControl1);
this.Controls.Add(this.grpFirmwareNote);
this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedDialog;
this.MaximizeBox = false;
this.MinimizeBox = false;
this.Name = "TvSettingsForm";
this.Load += new System.EventHandler(this.TvSettingsForm_Load);
((System.ComponentModel.ISupportInitialize)(this.grpSettings)).EndInit();
this.grpSettings.ResumeLayout(false);
this.grpSettings.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.cbHbbTv.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.cbCustomCountry.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.comboBoxEdit1.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.grpHotelMode)).EndInit();
this.grpHotelMode.ResumeLayout(false);
this.grpHotelMode.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.cbDtvUpdate.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.cbHotelMode.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.cbAutoChannelUpdate.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.groupControl1)).EndInit();
this.groupControl1.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.grpFirmwareNote)).EndInit();
this.grpFirmwareNote.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private DevExpress.XtraEditors.GroupControl grpSettings;
private DevExpress.XtraEditors.ComboBoxEdit comboBoxEdit1;
private DevExpress.XtraEditors.LabelControl labelControl1;
private DevExpress.XtraEditors.SimpleButton btnOk;
private DevExpress.XtraEditors.SimpleButton btnCancel;
private DevExpress.XtraEditors.CheckEdit cbCustomCountry;
private DevExpress.XtraEditors.GroupControl grpHotelMode;
private DevExpress.XtraEditors.CheckEdit cbHbbTv;
private DevExpress.XtraEditors.CheckEdit cbDtvUpdate;
private DevExpress.XtraEditors.CheckEdit cbHotelMode;
private DevExpress.XtraEditors.CheckEdit cbAutoChannelUpdate;
private DevExpress.XtraEditors.GroupControl groupControl1;
private DevExpress.XtraEditors.LabelControl labelControl3;
private DevExpress.XtraEditors.LabelControl labelControl2;
private DevExpress.XtraEditors.GroupControl grpFirmwareNote;
private DevExpress.XtraEditors.LabelControl labelControl4;
}
}

View File

@@ -0,0 +1,73 @@
using System;
using DevExpress.XtraEditors;
using DevExpress.XtraEditors.Controls;
namespace ChanSort.Plugin.TllFile
{
public partial class TvSettingsForm : XtraForm
{
private readonly TllFileSerializer tvSerializer;
public TvSettingsForm(TllFileSerializer tvSerializer)
{
this.tvSerializer = tvSerializer;
InitializeComponent();
}
private unsafe void TvSettingsForm_Load(object sender, EventArgs e)
{
var items = tvSerializer.SupportedTvCountryCodes;
foreach(var item in items)
this.comboBoxEdit1.Properties.Items.Add(item);
this.comboBoxEdit1.Text = this.tvSerializer.TvCountryCode;
byte[] fileContent = this.tvSerializer.FileContent;
fixed (byte* ptr = fileContent)
{
var mapping = this.tvSerializer.GetFirmwareMapping(ptr);
if (mapping != null)
{
this.cbAutoChannelUpdate.Checked = mapping.SettingsAutomaticChannelUpdate;
this.cbHbbTv.Checked = mapping.HbbTvEnabled;
this.cbHotelMode.Checked = mapping.HotelModeEnabled;
this.cbDtvUpdate.Checked = mapping.HotelModeDtvUpdate;
this.grpFirmwareNote.Visible = false;
this.Height -= this.grpFirmwareNote.Height;
}
else
{
this.cbAutoChannelUpdate.Enabled = false;
this.cbHbbTv.Enabled = false;
this.cbHotelMode.Enabled = false;
this.cbDtvUpdate.Enabled = false;
}
}
}
private unsafe void btnOk_Click(object sender, EventArgs e)
{
this.tvSerializer.TvCountryCode = this.comboBoxEdit1.Text;
byte[] fileContent = this.tvSerializer.FileContent;
fixed (byte* ptr = fileContent)
{
var mapping = this.tvSerializer.GetFirmwareMapping(ptr);
if (mapping != null)
{
mapping.SettingsAutomaticChannelUpdate = this.cbAutoChannelUpdate.Checked;
mapping.HbbTvEnabled = this.cbHbbTv.Checked;
mapping.HotelModeEnabled = this.cbHotelMode.Checked;
mapping.HotelModeDtvUpdate = this.cbDtvUpdate.Checked;
}
}
}
private void cbCustomCountry_CheckedChanged(object sender, EventArgs e)
{
this.comboBoxEdit1.Properties.TextEditStyle = this.cbCustomCountry.Checked
? TextEditStyles.Standard
: TextEditStyles.DisableTextEditor;
}
}
}

View File

@@ -0,0 +1,325 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="cbHbbTv.Properties.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="cbHbbTv.Properties.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="cbHbbTv.Properties.AutoHeight" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="cbHbbTv.Properties.Caption" xml:space="preserve">
<value>HbbTV aktivieren (funktioniert nur mit den Ländereinstellungen DEU, FRA, NED und ESP)</value>
</data>
<data name="cbHbbTv.Properties.DisplayValueChecked" xml:space="preserve">
<value />
</data>
<data name="cbHbbTv.Properties.DisplayValueGrayed" xml:space="preserve">
<value />
</data>
<data name="cbHbbTv.Properties.DisplayValueUnchecked" xml:space="preserve">
<value />
</data>
<data name="cbCustomCountry.Properties.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="cbCustomCountry.Properties.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="cbCustomCountry.Properties.AutoHeight" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="cbCustomCountry.Properties.Caption" xml:space="preserve">
<value>Eigene Werte erlauben (auf eigene Gefahr!)</value>
</data>
<data name="cbCustomCountry.Properties.DisplayValueChecked" xml:space="preserve">
<value />
</data>
<data name="cbCustomCountry.Properties.DisplayValueGrayed" xml:space="preserve">
<value />
</data>
<data name="cbCustomCountry.Properties.DisplayValueUnchecked" xml:space="preserve">
<value />
</data>
<data name="comboBoxEdit1.Properties.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="comboBoxEdit1.Properties.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="comboBoxEdit1.Properties.AutoHeight" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="comboBoxEdit1.Properties.NullValuePrompt" xml:space="preserve">
<value />
</data>
<data name="comboBoxEdit1.Properties.NullValuePromptShowForEmptyValue" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="labelControl1.Size" type="System.Drawing.Size, System.Drawing">
<value>27, 13</value>
</data>
<data name="labelControl1.Text" xml:space="preserve">
<value>Land:</value>
</data>
<data name="grpSettings.Text" xml:space="preserve">
<value>OPTION Menü</value>
</data>
<data name="btnCancel.Text" xml:space="preserve">
<value>Abbrechen</value>
</data>
<data name="labelControl3.Text" xml:space="preserve">
<value>HINWEIS: Bei aktivem Hotel-Modus kann man in der EPG nicht zum gewählten Sender wechseln und die Funktion "Werkseinstellungen" ist gesperrt.</value>
</data>
<data name="labelControl2.Size" type="System.Drawing.Size, System.Drawing">
<value>341, 13</value>
</data>
<data name="labelControl2.Text" xml:space="preserve">
<value>Die folgenden Einstellungen funktionieren nur bei aktivem Hotel-Modus:</value>
</data>
<data name="cbDtvUpdate.Properties.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="cbDtvUpdate.Properties.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="cbDtvUpdate.Properties.AutoHeight" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="cbDtvUpdate.Properties.Caption" xml:space="preserve">
<value>D-TV Senderliste automatisch aktualisieren (empfohlen: AUS)</value>
</data>
<data name="cbDtvUpdate.Properties.DisplayValueChecked" xml:space="preserve">
<value />
</data>
<data name="cbDtvUpdate.Properties.DisplayValueGrayed" xml:space="preserve">
<value />
</data>
<data name="cbDtvUpdate.Properties.DisplayValueUnchecked" xml:space="preserve">
<value />
</data>
<data name="cbHotelMode.Properties.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="cbHotelMode.Properties.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="cbHotelMode.Properties.AutoHeight" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="cbHotelMode.Properties.Caption" xml:space="preserve">
<value>Hotel Modus aktivieren (empfohlen: EIN)</value>
</data>
<data name="cbHotelMode.Properties.DisplayValueChecked" xml:space="preserve">
<value />
</data>
<data name="cbHotelMode.Properties.DisplayValueGrayed" xml:space="preserve">
<value />
</data>
<data name="cbHotelMode.Properties.DisplayValueUnchecked" xml:space="preserve">
<value />
</data>
<data name="grpHotelMode.Text" xml:space="preserve">
<value>Hotel Modus</value>
</data>
<data name="cbAutoChannelUpdate.Properties.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="cbAutoChannelUpdate.Properties.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="cbAutoChannelUpdate.Properties.AutoHeight" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="cbAutoChannelUpdate.Properties.Caption" xml:space="preserve">
<value>Senderliste automatisch aktualisieren (empfohlen: AUS)</value>
</data>
<data name="cbAutoChannelUpdate.Properties.DisplayValueChecked" xml:space="preserve">
<value />
</data>
<data name="cbAutoChannelUpdate.Properties.DisplayValueGrayed" xml:space="preserve">
<value />
</data>
<data name="cbAutoChannelUpdate.Properties.DisplayValueUnchecked" xml:space="preserve">
<value />
</data>
<data name="groupControl1.Text" xml:space="preserve">
<value>EINST. Menü</value>
</data>
<data name="labelControl4.Text" xml:space="preserve">
<value>Das Dateiformat Ihres TV-Modells wird nicht vollständig unterstützt. Deshalb sind viele Einstellungen in diesem Dialog gesperrt.</value>
</data>
<data name="textEdit1.Properties.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="textEdit1.Properties.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="textEdit1.Properties.AutoHeight" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<assembly alias="DevExpress.XtraEditors.v12.2" name="DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="textEdit1.Properties.Mask.AutoComplete" type="DevExpress.XtraEditors.Mask.AutoCompleteType, DevExpress.XtraEditors.v12.2">
<value>Default</value>
</data>
<data name="textEdit1.Properties.Mask.BeepOnError" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="textEdit1.Properties.Mask.EditMask" xml:space="preserve">
<value />
</data>
<data name="textEdit1.Properties.Mask.IgnoreMaskBlank" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="textEdit1.Properties.Mask.MaskType" type="DevExpress.XtraEditors.Mask.MaskType, DevExpress.XtraEditors.v12.2">
<value>None</value>
</data>
<data name="textEdit1.Properties.Mask.PlaceHolder" type="System.Char, mscorlib" xml:space="preserve">
<value>_</value>
</data>
<data name="textEdit1.Properties.Mask.SaveLiteral" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="textEdit1.Properties.Mask.ShowPlaceHolders" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="textEdit1.Properties.Mask.UseMaskAsDisplayFormat" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="textEdit1.Properties.NullValuePrompt" xml:space="preserve">
<value />
</data>
<data name="textEdit1.Properties.NullValuePromptShowForEmptyValue" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="TvSettingsForm.Appearance.GradientMode" type="System.Drawing.Drawing2D.LinearGradientMode, System.Drawing">
<value>Horizontal</value>
</data>
<data name="TvSettingsForm.Appearance.Image" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="$this.Text" xml:space="preserve">
<value>TV Einstellungen</value>
</data>
</root>

View File

@@ -0,0 +1,569 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="cbHbbTv.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="cbHbbTv.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 64</value>
</data>
<data name="cbHbbTv.Properties.Caption" xml:space="preserve">
<value>Enable HbbTV (only works with country settings DEU, FRA, NED and ESP)</value>
</data>
<data name="cbHbbTv.Size" type="System.Drawing.Size, System.Drawing">
<value>456, 19</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="cbHbbTv.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;cbHbbTv.Name" xml:space="preserve">
<value>cbHbbTv</value>
</data>
<data name="&gt;&gt;cbHbbTv.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;cbHbbTv.Parent" xml:space="preserve">
<value>grpSettings</value>
</data>
<data name="&gt;&gt;cbHbbTv.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="cbCustomCountry.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="cbCustomCountry.Location" type="System.Drawing.Point, System.Drawing">
<value>150, 30</value>
</data>
<data name="cbCustomCountry.Properties.Caption" xml:space="preserve">
<value>allow custom value (at your own risk!)</value>
</data>
<data name="cbCustomCountry.Size" type="System.Drawing.Size, System.Drawing">
<value>320, 19</value>
</data>
<data name="cbCustomCountry.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;cbCustomCountry.Name" xml:space="preserve">
<value>cbCustomCountry</value>
</data>
<data name="&gt;&gt;cbCustomCountry.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;cbCustomCountry.Parent" xml:space="preserve">
<value>grpSettings</value>
</data>
<data name="&gt;&gt;cbCustomCountry.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="comboBoxEdit1.Location" type="System.Drawing.Point, System.Drawing">
<value>72, 29</value>
</data>
<assembly alias="DevExpress.Utils.v12.2" name="DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="comboBoxEdit1.Properties.Buttons" type="DevExpress.XtraEditors.Controls.ButtonPredefines, DevExpress.Utils.v12.2">
<value>Combo</value>
</data>
<data name="comboBoxEdit1.Size" type="System.Drawing.Size, System.Drawing">
<value>72, 20</value>
</data>
<data name="comboBoxEdit1.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;comboBoxEdit1.Name" xml:space="preserve">
<value>comboBoxEdit1</value>
</data>
<data name="&gt;&gt;comboBoxEdit1.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;comboBoxEdit1.Parent" xml:space="preserve">
<value>grpSettings</value>
</data>
<data name="&gt;&gt;comboBoxEdit1.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="labelControl1.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 32</value>
</data>
<data name="labelControl1.Size" type="System.Drawing.Size, System.Drawing">
<value>43, 13</value>
</data>
<data name="labelControl1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="labelControl1.Text" xml:space="preserve">
<value>Country:</value>
</data>
<data name="&gt;&gt;labelControl1.Name" xml:space="preserve">
<value>labelControl1</value>
</data>
<data name="&gt;&gt;labelControl1.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;labelControl1.Parent" xml:space="preserve">
<value>grpSettings</value>
</data>
<data name="&gt;&gt;labelControl1.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="grpSettings.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="grpSettings.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 142</value>
</data>
<data name="grpSettings.Size" type="System.Drawing.Size, System.Drawing">
<value>480, 106</value>
</data>
<data name="grpSettings.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="grpSettings.Text" xml:space="preserve">
<value>OPTION Menu</value>
</data>
<data name="&gt;&gt;grpSettings.Name" xml:space="preserve">
<value>grpSettings</value>
</data>
<data name="&gt;&gt;grpSettings.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;grpSettings.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;grpSettings.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="btnOk.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="btnOk.Location" type="System.Drawing.Point, System.Drawing">
<value>310, 413</value>
</data>
<data name="btnOk.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="btnOk.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="btnOk.Text" xml:space="preserve">
<value>Ok</value>
</data>
<data name="&gt;&gt;btnOk.Name" xml:space="preserve">
<value>btnOk</value>
</data>
<data name="&gt;&gt;btnOk.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;btnOk.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;btnOk.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="btnCancel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Bottom, Right</value>
</data>
<data name="btnCancel.Location" type="System.Drawing.Point, System.Drawing">
<value>395, 413</value>
</data>
<data name="btnCancel.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="btnCancel.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="btnCancel.Text" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="&gt;&gt;btnCancel.Name" xml:space="preserve">
<value>btnCancel</value>
</data>
<data name="&gt;&gt;btnCancel.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;btnCancel.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;btnCancel.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<assembly alias="DevExpress.XtraEditors.v12.2" name="DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="labelControl3.AutoSizeMode" type="DevExpress.XtraEditors.LabelAutoSizeMode, DevExpress.XtraEditors.v12.2">
<value>Vertical</value>
</data>
<data name="labelControl3.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 26</value>
</data>
<data name="labelControl3.Size" type="System.Drawing.Size, System.Drawing">
<value>458, 26</value>
</data>
<data name="labelControl3.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="labelControl3.Text" xml:space="preserve">
<value>NOTE: When Hotel Mode is active, you can no longer activate a channel from inside the EPG and the "Factory Reset" function becomes disabled.</value>
</data>
<data name="&gt;&gt;labelControl3.Name" xml:space="preserve">
<value>labelControl3</value>
</data>
<data name="&gt;&gt;labelControl3.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;labelControl3.Parent" xml:space="preserve">
<value>grpHotelMode</value>
</data>
<data name="&gt;&gt;labelControl3.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="labelControl2.Location" type="System.Drawing.Point, System.Drawing">
<value>41, 93</value>
</data>
<data name="labelControl2.Size" type="System.Drawing.Size, System.Drawing">
<value>315, 13</value>
</data>
<data name="labelControl2.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="labelControl2.Text" xml:space="preserve">
<value>The settings below are only effective when Hotel Mode is enabled</value>
</data>
<data name="&gt;&gt;labelControl2.Name" xml:space="preserve">
<value>labelControl2</value>
</data>
<data name="&gt;&gt;labelControl2.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;labelControl2.Parent" xml:space="preserve">
<value>grpHotelMode</value>
</data>
<data name="&gt;&gt;labelControl2.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="cbDtvUpdate.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="cbDtvUpdate.Location" type="System.Drawing.Point, System.Drawing">
<value>39, 112</value>
</data>
<data name="cbDtvUpdate.Properties.Caption" xml:space="preserve">
<value>Automatic D-TV channel update (recommended: OFF)</value>
</data>
<data name="cbDtvUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>431, 19</value>
</data>
<data name="cbDtvUpdate.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="&gt;&gt;cbDtvUpdate.Name" xml:space="preserve">
<value>cbDtvUpdate</value>
</data>
<data name="&gt;&gt;cbDtvUpdate.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;cbDtvUpdate.Parent" xml:space="preserve">
<value>grpHotelMode</value>
</data>
<data name="&gt;&gt;cbDtvUpdate.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="cbHotelMode.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="cbHotelMode.Location" type="System.Drawing.Point, System.Drawing">
<value>10, 58</value>
</data>
<data name="cbHotelMode.Properties.Caption" xml:space="preserve">
<value>Enable Hotel Mode (recommended: ON)</value>
</data>
<data name="cbHotelMode.Size" type="System.Drawing.Size, System.Drawing">
<value>456, 19</value>
</data>
<data name="cbHotelMode.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="&gt;&gt;cbHotelMode.Name" xml:space="preserve">
<value>cbHotelMode</value>
</data>
<data name="&gt;&gt;cbHotelMode.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;cbHotelMode.Parent" xml:space="preserve">
<value>grpHotelMode</value>
</data>
<data name="&gt;&gt;cbHotelMode.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="grpHotelMode.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="grpHotelMode.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 248</value>
</data>
<data name="grpHotelMode.Size" type="System.Drawing.Size, System.Drawing">
<value>480, 151</value>
</data>
<data name="grpHotelMode.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="grpHotelMode.Text" xml:space="preserve">
<value>Hotel Mode</value>
</data>
<data name="&gt;&gt;grpHotelMode.Name" xml:space="preserve">
<value>grpHotelMode</value>
</data>
<data name="&gt;&gt;grpHotelMode.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;grpHotelMode.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;grpHotelMode.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="cbAutoChannelUpdate.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="cbAutoChannelUpdate.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 35</value>
</data>
<data name="cbAutoChannelUpdate.Properties.Caption" xml:space="preserve">
<value>Automatic Channel Update (recommended: OFF)</value>
</data>
<data name="cbAutoChannelUpdate.Size" type="System.Drawing.Size, System.Drawing">
<value>456, 19</value>
</data>
<data name="cbAutoChannelUpdate.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;cbAutoChannelUpdate.Name" xml:space="preserve">
<value>cbAutoChannelUpdate</value>
</data>
<data name="&gt;&gt;cbAutoChannelUpdate.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;cbAutoChannelUpdate.Parent" xml:space="preserve">
<value>groupControl1</value>
</data>
<data name="&gt;&gt;cbAutoChannelUpdate.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="groupControl1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="groupControl1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 71</value>
</data>
<data name="groupControl1.Size" type="System.Drawing.Size, System.Drawing">
<value>480, 71</value>
</data>
<data name="groupControl1.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="groupControl1.Text" xml:space="preserve">
<value>SETUP Menu</value>
</data>
<data name="&gt;&gt;groupControl1.Name" xml:space="preserve">
<value>groupControl1</value>
</data>
<data name="&gt;&gt;groupControl1.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;groupControl1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;groupControl1.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="labelControl4.AutoSizeMode" type="DevExpress.XtraEditors.LabelAutoSizeMode, DevExpress.XtraEditors.v12.2">
<value>Vertical</value>
</data>
<data name="labelControl4.Location" type="System.Drawing.Point, System.Drawing">
<value>11, 29</value>
</data>
<data name="labelControl4.Size" type="System.Drawing.Size, System.Drawing">
<value>458, 26</value>
</data>
<data name="labelControl4.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="labelControl4.Text" xml:space="preserve">
<value>Your TV model's TLL file format is not fully supported. Therefore many features in this dialog are disabled.</value>
</data>
<data name="&gt;&gt;labelControl4.Name" xml:space="preserve">
<value>labelControl4</value>
</data>
<data name="&gt;&gt;labelControl4.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;labelControl4.Parent" xml:space="preserve">
<value>grpFirmwareNote</value>
</data>
<data name="&gt;&gt;labelControl4.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="grpFirmwareNote.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Top</value>
</data>
<data name="grpFirmwareNote.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="grpFirmwareNote.Size" type="System.Drawing.Size, System.Drawing">
<value>480, 71</value>
</data>
<data name="grpFirmwareNote.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="grpFirmwareNote.Text" xml:space="preserve">
<value>Information</value>
</data>
<data name="&gt;&gt;grpFirmwareNote.Name" xml:space="preserve">
<value>grpFirmwareNote</value>
</data>
<data name="&gt;&gt;grpFirmwareNote.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.GroupControl, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;grpFirmwareNote.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;grpFirmwareNote.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>480, 448</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterParent</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>TV Settings</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>TvSettingsForm</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
</root>

241
ChanSort.Ui/AboutForm.Designer.cs generated Normal file
View File

@@ -0,0 +1,241 @@
namespace ChanSort.Ui
{
partial class AboutForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(AboutForm));
this.labelControl1 = new DevExpress.XtraEditors.LabelControl();
this.hyperLinkEdit1 = new DevExpress.XtraEditors.HyperLinkEdit();
this.gcPlugins = new DevExpress.XtraGrid.GridControl();
this.gvPlugins = new DevExpress.XtraGrid.Views.Grid.GridView();
this.colPlugin = new DevExpress.XtraGrid.Columns.GridColumn();
this.colDisplayText = new DevExpress.XtraGrid.Columns.GridColumn();
this.colFileTypes = new DevExpress.XtraGrid.Columns.GridColumn();
this.hyperLinkEdit2 = new DevExpress.XtraEditors.HyperLinkEdit();
this.labelControl3 = new DevExpress.XtraEditors.LabelControl();
this.labelControl4 = new DevExpress.XtraEditors.LabelControl();
this.labelControl5 = new DevExpress.XtraEditors.LabelControl();
this.hyperLinkEdit3 = new DevExpress.XtraEditors.HyperLinkEdit();
this.txtCredits = new DevExpress.XtraEditors.MemoEdit();
this.xtraTabControl1 = new DevExpress.XtraTab.XtraTabControl();
this.xtraTabPage1 = new DevExpress.XtraTab.XtraTabPage();
this.xtraTabPage2 = new DevExpress.XtraTab.XtraTabPage();
this.picDonate = new DevExpress.XtraEditors.PictureEdit();
this.labelControl2 = new DevExpress.XtraEditors.LabelControl();
((System.ComponentModel.ISupportInitialize)(this.hyperLinkEdit1.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.gcPlugins)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.gvPlugins)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.hyperLinkEdit2.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.hyperLinkEdit3.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.txtCredits.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.xtraTabControl1)).BeginInit();
this.xtraTabControl1.SuspendLayout();
this.xtraTabPage1.SuspendLayout();
this.xtraTabPage2.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.picDonate.Properties)).BeginInit();
this.SuspendLayout();
//
// labelControl1
//
resources.ApplyResources(this.labelControl1, "labelControl1");
this.labelControl1.Name = "labelControl1";
//
// hyperLinkEdit1
//
resources.ApplyResources(this.hyperLinkEdit1, "hyperLinkEdit1");
this.hyperLinkEdit1.Name = "hyperLinkEdit1";
this.hyperLinkEdit1.Properties.Appearance.BackColor = ((System.Drawing.Color)(resources.GetObject("hyperLinkEdit1.Properties.Appearance.BackColor")));
this.hyperLinkEdit1.Properties.Appearance.Options.UseBackColor = true;
this.hyperLinkEdit1.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
//
// gcPlugins
//
resources.ApplyResources(this.gcPlugins, "gcPlugins");
this.gcPlugins.MainView = this.gvPlugins;
this.gcPlugins.Name = "gcPlugins";
this.gcPlugins.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
this.gvPlugins});
//
// gvPlugins
//
this.gvPlugins.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] {
this.colPlugin,
this.colDisplayText,
this.colFileTypes});
this.gvPlugins.GridControl = this.gcPlugins;
this.gvPlugins.Name = "gvPlugins";
this.gvPlugins.OptionsBehavior.ReadOnly = true;
this.gvPlugins.OptionsView.ShowGroupPanel = false;
this.gvPlugins.OptionsView.ShowIndicator = false;
this.gvPlugins.CustomUnboundColumnData += new DevExpress.XtraGrid.Views.Base.CustomColumnDataEventHandler(this.gvPlugins_CustomUnboundColumnData);
//
// colPlugin
//
resources.ApplyResources(this.colPlugin, "colPlugin");
this.colPlugin.FieldName = "PluginDll";
this.colPlugin.Name = "colPlugin";
this.colPlugin.UnboundType = DevExpress.Data.UnboundColumnType.String;
//
// colDisplayText
//
resources.ApplyResources(this.colDisplayText, "colDisplayText");
this.colDisplayText.FieldName = "PluginName";
this.colDisplayText.Name = "colDisplayText";
//
// colFileTypes
//
resources.ApplyResources(this.colFileTypes, "colFileTypes");
this.colFileTypes.FieldName = "FileFilter";
this.colFileTypes.Name = "colFileTypes";
//
// hyperLinkEdit2
//
resources.ApplyResources(this.hyperLinkEdit2, "hyperLinkEdit2");
this.hyperLinkEdit2.Name = "hyperLinkEdit2";
this.hyperLinkEdit2.Properties.Appearance.BackColor = ((System.Drawing.Color)(resources.GetObject("hyperLinkEdit2.Properties.Appearance.BackColor")));
this.hyperLinkEdit2.Properties.Appearance.Options.UseBackColor = true;
this.hyperLinkEdit2.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
//
// labelControl3
//
resources.ApplyResources(this.labelControl3, "labelControl3");
this.labelControl3.Name = "labelControl3";
//
// labelControl4
//
resources.ApplyResources(this.labelControl4, "labelControl4");
this.labelControl4.Name = "labelControl4";
//
// labelControl5
//
resources.ApplyResources(this.labelControl5, "labelControl5");
this.labelControl5.Name = "labelControl5";
//
// hyperLinkEdit3
//
resources.ApplyResources(this.hyperLinkEdit3, "hyperLinkEdit3");
this.hyperLinkEdit3.Name = "hyperLinkEdit3";
this.hyperLinkEdit3.Properties.Appearance.BackColor = ((System.Drawing.Color)(resources.GetObject("hyperLinkEdit3.Properties.Appearance.BackColor")));
this.hyperLinkEdit3.Properties.Appearance.Options.UseBackColor = true;
this.hyperLinkEdit3.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
//
// txtCredits
//
resources.ApplyResources(this.txtCredits, "txtCredits");
this.txtCredits.Name = "txtCredits";
this.txtCredits.Properties.ReadOnly = true;
//
// xtraTabControl1
//
resources.ApplyResources(this.xtraTabControl1, "xtraTabControl1");
this.xtraTabControl1.Name = "xtraTabControl1";
this.xtraTabControl1.SelectedTabPage = this.xtraTabPage1;
this.xtraTabControl1.TabPages.AddRange(new DevExpress.XtraTab.XtraTabPage[] {
this.xtraTabPage1,
this.xtraTabPage2});
//
// xtraTabPage1
//
this.xtraTabPage1.Controls.Add(this.txtCredits);
this.xtraTabPage1.Name = "xtraTabPage1";
resources.ApplyResources(this.xtraTabPage1, "xtraTabPage1");
//
// xtraTabPage2
//
this.xtraTabPage2.Controls.Add(this.gcPlugins);
this.xtraTabPage2.Name = "xtraTabPage2";
resources.ApplyResources(this.xtraTabPage2, "xtraTabPage2");
//
// picDonate
//
this.picDonate.Cursor = System.Windows.Forms.Cursors.Hand;
resources.ApplyResources(this.picDonate, "picDonate");
this.picDonate.Name = "picDonate";
this.picDonate.Properties.Appearance.BackColor = ((System.Drawing.Color)(resources.GetObject("picDonate.Properties.Appearance.BackColor")));
this.picDonate.Properties.Appearance.Options.UseBackColor = true;
this.picDonate.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
this.picDonate.Click += new System.EventHandler(this.picDonate_Click);
//
// labelControl2
//
resources.ApplyResources(this.labelControl2, "labelControl2");
this.labelControl2.Name = "labelControl2";
//
// AboutForm
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.labelControl2);
this.Controls.Add(this.picDonate);
this.Controls.Add(this.xtraTabControl1);
this.Controls.Add(this.hyperLinkEdit3);
this.Controls.Add(this.labelControl5);
this.Controls.Add(this.labelControl4);
this.Controls.Add(this.hyperLinkEdit2);
this.Controls.Add(this.labelControl3);
this.Controls.Add(this.hyperLinkEdit1);
this.Controls.Add(this.labelControl1);
this.Name = "AboutForm";
((System.ComponentModel.ISupportInitialize)(this.hyperLinkEdit1.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.gcPlugins)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.gvPlugins)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.hyperLinkEdit2.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.hyperLinkEdit3.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.txtCredits.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.xtraTabControl1)).EndInit();
this.xtraTabControl1.ResumeLayout(false);
this.xtraTabPage1.ResumeLayout(false);
this.xtraTabPage2.ResumeLayout(false);
((System.ComponentModel.ISupportInitialize)(this.picDonate.Properties)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private DevExpress.XtraEditors.LabelControl labelControl1;
private DevExpress.XtraEditors.HyperLinkEdit hyperLinkEdit1;
private DevExpress.XtraGrid.GridControl gcPlugins;
private DevExpress.XtraGrid.Views.Grid.GridView gvPlugins;
private DevExpress.XtraGrid.Columns.GridColumn colPlugin;
private DevExpress.XtraGrid.Columns.GridColumn colDisplayText;
private DevExpress.XtraGrid.Columns.GridColumn colFileTypes;
private DevExpress.XtraEditors.HyperLinkEdit hyperLinkEdit2;
private DevExpress.XtraEditors.LabelControl labelControl3;
private DevExpress.XtraEditors.LabelControl labelControl4;
private DevExpress.XtraEditors.LabelControl labelControl5;
private DevExpress.XtraEditors.HyperLinkEdit hyperLinkEdit3;
private DevExpress.XtraEditors.MemoEdit txtCredits;
private DevExpress.XtraTab.XtraTabControl xtraTabControl1;
private DevExpress.XtraTab.XtraTabPage xtraTabPage1;
private DevExpress.XtraTab.XtraTabPage xtraTabPage2;
private DevExpress.XtraEditors.PictureEdit picDonate;
private DevExpress.XtraEditors.LabelControl labelControl2;
}
}

48
ChanSort.Ui/AboutForm.cs Normal file
View File

@@ -0,0 +1,48 @@
using System.Collections.Generic;
using System.IO;
using ChanSort.Api;
using DevExpress.XtraEditors;
namespace ChanSort.Ui
{
public partial class AboutForm :XtraForm
{
public AboutForm(IList<ISerializerPlugin> plugins)
{
InitializeComponent();
this.picDonate.Image = Properties.Resources.Donate;
this.gcPlugins.DataSource = plugins;
this.txtCredits.Text = @"PDA-User:
Analysis of TLL file structure and extensive testing of ChanSort
HellG:
For writing TLLsort which was the basis for the first versions of ChanSort
edank, JLevi, Oleg:
For writing TLLview, TLLedit and edankTLL and making the source available
Many more on lg-forum.com:
For providing example TLL files, error feedback and other helpful information";
}
private void gvPlugins_CustomUnboundColumnData(object sender, DevExpress.XtraGrid.Views.Base.CustomColumnDataEventArgs e)
{
if (e.Column == this.colPlugin)
e.Value = (Path.GetFileName(e.Row.GetType().Assembly.Location) ?? "").Replace("ChanSort.Plugin.", "");
}
private void picDonate_Click(object sender, System.EventArgs e)
{
try
{
string fileName = Path.GetTempFileName() + ".html";
File.WriteAllText(fileName, Properties.Resources.paypal_button);
System.Diagnostics.Process.Start(fileName);
}
catch
{
}
}
}
}

View File

@@ -0,0 +1,164 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="labelControl1.Size" type="System.Drawing.Size, System.Drawing">
<value>80, 13</value>
</data>
<data name="labelControl1.Text" xml:space="preserve">
<value>Aktuelle Version:</value>
</data>
<data name="colDisplayText.Caption" xml:space="preserve">
<value>Beschreibung</value>
</data>
<data name="colFileTypes.Caption" xml:space="preserve">
<value>Dateitypen</value>
</data>
<data name="labelControl3.Size" type="System.Drawing.Size, System.Drawing">
<value>86, 13</value>
</data>
<data name="labelControl3.Text" xml:space="preserve">
<value>Online Diskussion:</value>
</data>
<data name="labelControl4.Size" type="System.Drawing.Size, System.Drawing">
<value>41, 13</value>
</data>
<data name="labelControl4.Text" xml:space="preserve">
<value>Kontakt:</value>
</data>
<data name="xtraTabPage1.Text" xml:space="preserve">
<value>Gruß und Dank</value>
</data>
<data name="xtraTabPage2.Text" xml:space="preserve">
<value>Erweiterungen</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="picDonate.EditValue" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="labelControl2.Size" type="System.Drawing.Size, System.Drawing">
<value>151, 13</value>
</data>
<data name="labelControl2.Text" xml:space="preserve">
<value>Wenn dir das Programm gefällt:</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Über ChanSort</value>
</data>
</root>

546
ChanSort.Ui/AboutForm.resx Normal file
View File

@@ -0,0 +1,546 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="labelControl1.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 15</value>
</data>
<data name="labelControl1.Size" type="System.Drawing.Size, System.Drawing">
<value>72, 13</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="labelControl1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="labelControl1.Text" xml:space="preserve">
<value>Latest version:</value>
</data>
<data name="&gt;&gt;labelControl1.Name" xml:space="preserve">
<value>labelControl1</value>
</data>
<data name="&gt;&gt;labelControl1.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;labelControl1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;labelControl1.ZOrder" xml:space="preserve">
<value>9</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="hyperLinkEdit1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="hyperLinkEdit1.EditValue" xml:space="preserve">
<value>http://beham.biz/ChanSort/</value>
</data>
<data name="hyperLinkEdit1.Location" type="System.Drawing.Point, System.Drawing">
<value>144, 13</value>
</data>
<data name="hyperLinkEdit1.Properties.Appearance.BackColor" type="System.Drawing.Color, System.Drawing">
<value>Transparent</value>
</data>
<data name="hyperLinkEdit1.Size" type="System.Drawing.Size, System.Drawing">
<value>436, 18</value>
</data>
<data name="hyperLinkEdit1.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="&gt;&gt;hyperLinkEdit1.Name" xml:space="preserve">
<value>hyperLinkEdit1</value>
</data>
<data name="&gt;&gt;hyperLinkEdit1.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.HyperLinkEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;hyperLinkEdit1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;hyperLinkEdit1.ZOrder" xml:space="preserve">
<value>8</value>
</data>
<data name="gcPlugins.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="gcPlugins.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="colPlugin.Caption" xml:space="preserve">
<value>Plugin</value>
</data>
<data name="colPlugin.Visible" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="colPlugin.VisibleIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="colPlugin.Width" type="System.Int32, mscorlib">
<value>70</value>
</data>
<data name="colDisplayText.Caption" xml:space="preserve">
<value>Description</value>
</data>
<data name="colDisplayText.Visible" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="colDisplayText.VisibleIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="colDisplayText.Width" type="System.Int32, mscorlib">
<value>246</value>
</data>
<data name="colFileTypes.Caption" xml:space="preserve">
<value>File types</value>
</data>
<data name="colFileTypes.Visible" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="colFileTypes.VisibleIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="colFileTypes.Width" type="System.Int32, mscorlib">
<value>249</value>
</data>
<data name="gcPlugins.Size" type="System.Drawing.Size, System.Drawing">
<value>562, 272</value>
</data>
<data name="gcPlugins.TabIndex" type="System.Int32, mscorlib">
<value>3</value>
</data>
<data name="&gt;&gt;gcPlugins.Name" xml:space="preserve">
<value>gcPlugins</value>
</data>
<data name="&gt;&gt;gcPlugins.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;gcPlugins.Parent" xml:space="preserve">
<value>xtraTabPage2</value>
</data>
<data name="&gt;&gt;gcPlugins.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="hyperLinkEdit2.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="hyperLinkEdit2.EditValue" xml:space="preserve">
<value>http://www.lg-forum.com/lg-led-plasma-lcd-fernseher/5098-channeleditor-45.html</value>
</data>
<data name="hyperLinkEdit2.Location" type="System.Drawing.Point, System.Drawing">
<value>144, 32</value>
</data>
<data name="hyperLinkEdit2.Properties.Appearance.BackColor" type="System.Drawing.Color, System.Drawing">
<value>Transparent</value>
</data>
<data name="hyperLinkEdit2.Size" type="System.Drawing.Size, System.Drawing">
<value>436, 18</value>
</data>
<data name="hyperLinkEdit2.TabIndex" type="System.Int32, mscorlib">
<value>5</value>
</data>
<data name="&gt;&gt;hyperLinkEdit2.Name" xml:space="preserve">
<value>hyperLinkEdit2</value>
</data>
<data name="&gt;&gt;hyperLinkEdit2.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.HyperLinkEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;hyperLinkEdit2.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;hyperLinkEdit2.ZOrder" xml:space="preserve">
<value>6</value>
</data>
<data name="labelControl3.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 34</value>
</data>
<data name="labelControl3.Size" type="System.Drawing.Size, System.Drawing">
<value>85, 13</value>
</data>
<data name="labelControl3.TabIndex" type="System.Int32, mscorlib">
<value>4</value>
</data>
<data name="labelControl3.Text" xml:space="preserve">
<value>Online discussion:</value>
</data>
<data name="&gt;&gt;labelControl3.Name" xml:space="preserve">
<value>labelControl3</value>
</data>
<data name="&gt;&gt;labelControl3.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;labelControl3.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;labelControl3.ZOrder" xml:space="preserve">
<value>7</value>
</data>
<data name="labelControl4.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 56</value>
</data>
<data name="labelControl4.Size" type="System.Drawing.Size, System.Drawing">
<value>42, 13</value>
</data>
<data name="labelControl4.TabIndex" type="System.Int32, mscorlib">
<value>6</value>
</data>
<data name="labelControl4.Text" xml:space="preserve">
<value>Contact:</value>
</data>
<data name="&gt;&gt;labelControl4.Name" xml:space="preserve">
<value>labelControl4</value>
</data>
<data name="&gt;&gt;labelControl4.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;labelControl4.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;labelControl4.ZOrder" xml:space="preserve">
<value>5</value>
</data>
<data name="labelControl5.Location" type="System.Drawing.Point, System.Drawing">
<value>147, 56</value>
</data>
<data name="labelControl5.Size" type="System.Drawing.Size, System.Drawing">
<value>175, 13</value>
</data>
<data name="labelControl5.TabIndex" type="System.Int32, mscorlib">
<value>7</value>
</data>
<data name="labelControl5.Text" xml:space="preserve">
<value>User "Pred" @ www.lg-forum.com |</value>
</data>
<data name="&gt;&gt;labelControl5.Name" xml:space="preserve">
<value>labelControl5</value>
</data>
<data name="&gt;&gt;labelControl5.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;labelControl5.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;labelControl5.ZOrder" xml:space="preserve">
<value>4</value>
</data>
<data name="hyperLinkEdit3.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left, Right</value>
</data>
<data name="hyperLinkEdit3.EditValue" xml:space="preserve">
<value>mailto:horst@beham.biz</value>
</data>
<data name="hyperLinkEdit3.Location" type="System.Drawing.Point, System.Drawing">
<value>328, 54</value>
</data>
<data name="hyperLinkEdit3.Properties.Appearance.BackColor" type="System.Drawing.Color, System.Drawing">
<value>Transparent</value>
</data>
<data name="hyperLinkEdit3.Size" type="System.Drawing.Size, System.Drawing">
<value>252, 18</value>
</data>
<data name="hyperLinkEdit3.TabIndex" type="System.Int32, mscorlib">
<value>8</value>
</data>
<data name="&gt;&gt;hyperLinkEdit3.Name" xml:space="preserve">
<value>hyperLinkEdit3</value>
</data>
<data name="&gt;&gt;hyperLinkEdit3.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.HyperLinkEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;hyperLinkEdit3.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;hyperLinkEdit3.ZOrder" xml:space="preserve">
<value>3</value>
</data>
<data name="txtCredits.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="txtCredits.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="txtCredits.Size" type="System.Drawing.Size, System.Drawing">
<value>562, 272</value>
</data>
<data name="txtCredits.TabIndex" type="System.Int32, mscorlib">
<value>10</value>
</data>
<data name="&gt;&gt;txtCredits.Name" xml:space="preserve">
<value>txtCredits</value>
</data>
<data name="&gt;&gt;txtCredits.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.MemoEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;txtCredits.Parent" xml:space="preserve">
<value>xtraTabPage1</value>
</data>
<data name="&gt;&gt;txtCredits.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="xtraTabControl1.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Bottom, Left, Right</value>
</data>
<data name="xtraTabControl1.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 134</value>
</data>
<data name="xtraTabPage1.Size" type="System.Drawing.Size, System.Drawing">
<value>562, 272</value>
</data>
<data name="xtraTabPage1.Text" xml:space="preserve">
<value>Credits</value>
</data>
<data name="&gt;&gt;xtraTabPage1.Name" xml:space="preserve">
<value>xtraTabPage1</value>
</data>
<data name="&gt;&gt;xtraTabPage1.Type" xml:space="preserve">
<value>DevExpress.XtraTab.XtraTabPage, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;xtraTabPage1.Parent" xml:space="preserve">
<value>xtraTabControl1</value>
</data>
<data name="&gt;&gt;xtraTabPage1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="xtraTabControl1.Size" type="System.Drawing.Size, System.Drawing">
<value>568, 300</value>
</data>
<data name="xtraTabControl1.TabIndex" type="System.Int32, mscorlib">
<value>11</value>
</data>
<data name="xtraTabPage2.Size" type="System.Drawing.Size, System.Drawing">
<value>562, 272</value>
</data>
<data name="xtraTabPage2.Text" xml:space="preserve">
<value>Plugins</value>
</data>
<data name="&gt;&gt;xtraTabPage2.Name" xml:space="preserve">
<value>xtraTabPage2</value>
</data>
<data name="&gt;&gt;xtraTabPage2.Type" xml:space="preserve">
<value>DevExpress.XtraTab.XtraTabPage, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;xtraTabPage2.Parent" xml:space="preserve">
<value>xtraTabControl1</value>
</data>
<data name="&gt;&gt;xtraTabPage2.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="&gt;&gt;xtraTabControl1.Name" xml:space="preserve">
<value>xtraTabControl1</value>
</data>
<data name="&gt;&gt;xtraTabControl1.Type" xml:space="preserve">
<value>DevExpress.XtraTab.XtraTabControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;xtraTabControl1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;xtraTabControl1.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="picDonate.Location" type="System.Drawing.Point, System.Drawing">
<value>214, 78</value>
</data>
<data name="picDonate.Properties.Appearance.BackColor" type="System.Drawing.Color, System.Drawing">
<value>Transparent</value>
</data>
<data name="picDonate.Size" type="System.Drawing.Size, System.Drawing">
<value>177, 58</value>
</data>
<data name="picDonate.TabIndex" type="System.Int32, mscorlib">
<value>12</value>
</data>
<data name="&gt;&gt;picDonate.Name" xml:space="preserve">
<value>picDonate</value>
</data>
<data name="&gt;&gt;picDonate.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.PictureEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;picDonate.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;picDonate.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="labelControl2.Location" type="System.Drawing.Point, System.Drawing">
<value>12, 88</value>
</data>
<data name="labelControl2.Size" type="System.Drawing.Size, System.Drawing">
<value>114, 13</value>
</data>
<data name="labelControl2.TabIndex" type="System.Int32, mscorlib">
<value>13</value>
</data>
<data name="labelControl2.Text" xml:space="preserve">
<value>If you like this program:</value>
</data>
<data name="&gt;&gt;labelControl2.Name" xml:space="preserve">
<value>labelControl2</value>
</data>
<data name="&gt;&gt;labelControl2.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;labelControl2.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;labelControl2.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>592, 446</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>CenterParent</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>About ChanSort</value>
</data>
<data name="&gt;&gt;gvPlugins.Name" xml:space="preserve">
<value>gvPlugins</value>
</data>
<data name="&gt;&gt;gvPlugins.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Views.Grid.GridView, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;colPlugin.Name" xml:space="preserve">
<value>colPlugin</value>
</data>
<data name="&gt;&gt;colPlugin.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;colDisplayText.Name" xml:space="preserve">
<value>colDisplayText</value>
</data>
<data name="&gt;&gt;colDisplayText.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;colFileTypes.Name" xml:space="preserve">
<value>colFileTypes</value>
</data>
<data name="&gt;&gt;colFileTypes.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>AboutForm</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
</root>

View File

@@ -0,0 +1,215 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
<Platform Condition=" '$(Platform)' == '' ">x86</Platform>
<ProductVersion>8.0.30703</ProductVersion>
<SchemaVersion>2.0</SchemaVersion>
<ProjectGuid>{5FAFDABC-A52F-498C-BD2F-AFFC4119797A}</ProjectGuid>
<OutputType>WinExe</OutputType>
<AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>ChanSort.Ui</RootNamespace>
<AssemblyName>ChanSort</AssemblyName>
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
<TargetFrameworkProfile>Client</TargetFrameworkProfile>
<FileAlignment>512</FileAlignment>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>..\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<PlatformTarget>x86</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Debug|AnyCPU'">
<DebugSymbols>true</DebugSymbols>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<DebugType>full</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == 'Release|AnyCPU'">
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<Optimize>true</Optimize>
<DebugType>pdbonly</DebugType>
<PlatformTarget>AnyCPU</PlatformTarget>
<ErrorReport>prompt</ErrorReport>
<CodeAnalysisIgnoreBuiltInRuleSets>false</CodeAnalysisIgnoreBuiltInRuleSets>
<CodeAnalysisIgnoreBuiltInRules>false</CodeAnalysisIgnoreBuiltInRules>
</PropertyGroup>
<PropertyGroup>
<ApplicationIcon>app.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<Reference Include="DevExpress.Data.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="DevExpress.Printing.v12.2.Core, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
</Reference>
<Reference Include="System" />
<Reference Include="System.Data" />
<Reference Include="System.Deployment" />
<Reference Include="System.Drawing" />
<Reference Include="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089, processorArchitecture=MSIL" />
<Reference Include="System.Xml" />
</ItemGroup>
<ItemGroup>
<Compile Include="InfoBox.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="InfoBox.Designer.cs">
<DependentUpon>InfoBox.cs</DependentUpon>
</Compile>
<Compile Include="MainForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="MainForm.Designer.cs">
<DependentUpon>MainForm.cs</DependentUpon>
</Compile>
<Compile Include="Program.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="Properties\Resources.Designer.cs">
<DependentUpon>Resources.resx</DependentUpon>
<AutoGen>True</AutoGen>
<DesignTime>True</DesignTime>
</Compile>
<Compile Include="Settings.cs" />
<Compile Include="WaitForm1.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="WaitForm1.Designer.cs">
<DependentUpon>WaitForm1.cs</DependentUpon>
</Compile>
<Compile Include="AboutForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="AboutForm.Designer.cs">
<DependentUpon>AboutForm.cs</DependentUpon>
</Compile>
<Compile Include="CharsetForm.cs">
<SubType>Form</SubType>
</Compile>
<Compile Include="CharsetForm.Designer.cs">
<DependentUpon>CharsetForm.cs</DependentUpon>
</Compile>
<EmbeddedResource Include="AboutForm.de.resx">
<DependentUpon>AboutForm.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="AboutForm.resx">
<DependentUpon>AboutForm.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="CharsetForm.de.resx">
<DependentUpon>CharsetForm.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="CharsetForm.resx">
<DependentUpon>CharsetForm.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="InfoBox.resx">
<DependentUpon>InfoBox.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="MainForm.de.resx">
<DependentUpon>MainForm.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="MainForm.resx">
<DependentUpon>MainForm.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Properties\Resources.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<EmbeddedResource Include="Properties\licenses.licx" />
<EmbeddedResource Include="Properties\Resources.de.resx">
<Generator>ResXFileCodeGenerator</Generator>
<LastGenOutput>Resources.de.Designer.cs</LastGenOutput>
<SubType>Designer</SubType>
</EmbeddedResource>
<Compile Include="Properties\Resources.de.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Resources.de.resx</DependentUpon>
<DesignTime>True</DesignTime>
</Compile>
<EmbeddedResource Include="WaitForm1.de.resx">
<DependentUpon>WaitForm1.cs</DependentUpon>
</EmbeddedResource>
<EmbeddedResource Include="WaitForm1.resx">
<DependentUpon>WaitForm1.cs</DependentUpon>
<SubType>Designer</SubType>
</EmbeddedResource>
<None Include="app.config" />
<None Include="Properties\DataSources\ChannelInfo.datasource" />
<None Include="Properties\DataSources\System.Text.EncodingInfo.datasource" />
<None Include="Properties\Settings.settings">
<Generator>SettingsSingleFileGenerator</Generator>
<LastGenOutput>Settings.Designer.cs</LastGenOutput>
</None>
<Compile Include="Properties\Settings.Designer.cs">
<AutoGen>True</AutoGen>
<DependentUpon>Settings.settings</DependentUpon>
<DesignTimeSharedInput>True</DesignTimeSharedInput>
</Compile>
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ChanSort.Api\ChanSort.Api.csproj">
<Project>{DCCFFA08-472B-4D17-BB90-8F513FC01392}</Project>
<Name>ChanSort.Api</Name>
</ProjectReference>
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="app.ico" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\Donate.bmp" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\btn_donateCC_LG.gif" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\paypal-button.txt" />
</ItemGroup>
<ItemGroup>
<None Include="Resources\btn_donateCC_LG_de.gif" />
</ItemGroup>
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets.
<Target Name="BeforeBuild">
</Target>
<Target Name="AfterBuild">
</Target>
-->
</Project>

171
ChanSort.Ui/CharsetForm.Designer.cs generated Normal file
View File

@@ -0,0 +1,171 @@
namespace ChanSort.Ui
{
partial class CharsetForm
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.components = new System.ComponentModel.Container();
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(CharsetForm));
this.gcCharset = new DevExpress.XtraGrid.GridControl();
this.bindingSource1 = new System.Windows.Forms.BindingSource(this.components);
this.gvCharset = new DevExpress.XtraGrid.Views.Grid.GridView();
this.colCodePage = new DevExpress.XtraGrid.Columns.GridColumn();
this.colName = new DevExpress.XtraGrid.Columns.GridColumn();
this.colDisplayName = new DevExpress.XtraGrid.Columns.GridColumn();
this.panelControl1 = new DevExpress.XtraEditors.PanelControl();
this.btnMyCountry = new DevExpress.XtraEditors.SimpleButton();
this.btnCancel = new DevExpress.XtraEditors.SimpleButton();
this.btnOk = new DevExpress.XtraEditors.SimpleButton();
((System.ComponentModel.ISupportInitialize)(this.gcCharset)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.gvCharset)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.panelControl1)).BeginInit();
this.panelControl1.SuspendLayout();
this.SuspendLayout();
//
// gcCharset
//
resources.ApplyResources(this.gcCharset, "gcCharset");
this.gcCharset.DataSource = this.bindingSource1;
this.gcCharset.EmbeddedNavigator.AccessibleDescription = resources.GetString("gcCharset.EmbeddedNavigator.AccessibleDescription");
this.gcCharset.EmbeddedNavigator.AccessibleName = resources.GetString("gcCharset.EmbeddedNavigator.AccessibleName");
this.gcCharset.EmbeddedNavigator.AllowHtmlTextInToolTip = ((DevExpress.Utils.DefaultBoolean)(resources.GetObject("gcCharset.EmbeddedNavigator.AllowHtmlTextInToolTip")));
this.gcCharset.EmbeddedNavigator.Anchor = ((System.Windows.Forms.AnchorStyles)(resources.GetObject("gcCharset.EmbeddedNavigator.Anchor")));
this.gcCharset.EmbeddedNavigator.BackgroundImage = ((System.Drawing.Image)(resources.GetObject("gcCharset.EmbeddedNavigator.BackgroundImage")));
this.gcCharset.EmbeddedNavigator.BackgroundImageLayout = ((System.Windows.Forms.ImageLayout)(resources.GetObject("gcCharset.EmbeddedNavigator.BackgroundImageLayout")));
this.gcCharset.EmbeddedNavigator.ImeMode = ((System.Windows.Forms.ImeMode)(resources.GetObject("gcCharset.EmbeddedNavigator.ImeMode")));
this.gcCharset.EmbeddedNavigator.TextLocation = ((DevExpress.XtraEditors.NavigatorButtonsTextLocation)(resources.GetObject("gcCharset.EmbeddedNavigator.TextLocation")));
this.gcCharset.EmbeddedNavigator.ToolTip = resources.GetString("gcCharset.EmbeddedNavigator.ToolTip");
this.gcCharset.EmbeddedNavigator.ToolTipIconType = ((DevExpress.Utils.ToolTipIconType)(resources.GetObject("gcCharset.EmbeddedNavigator.ToolTipIconType")));
this.gcCharset.EmbeddedNavigator.ToolTipTitle = resources.GetString("gcCharset.EmbeddedNavigator.ToolTipTitle");
this.gcCharset.MainView = this.gvCharset;
this.gcCharset.Name = "gcCharset";
this.gcCharset.ViewCollection.AddRange(new DevExpress.XtraGrid.Views.Base.BaseView[] {
this.gvCharset});
//
// bindingSource1
//
this.bindingSource1.DataSource = typeof(System.Text.EncodingInfo);
//
// gvCharset
//
resources.ApplyResources(this.gvCharset, "gvCharset");
this.gvCharset.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] {
this.colCodePage,
this.colName,
this.colDisplayName});
this.gvCharset.GridControl = this.gcCharset;
this.gvCharset.Name = "gvCharset";
this.gvCharset.OptionsBehavior.Editable = false;
this.gvCharset.OptionsView.ShowAutoFilterRow = true;
this.gvCharset.OptionsView.ShowGroupPanel = false;
this.gvCharset.OptionsView.ShowIndicator = false;
this.gvCharset.RowClick += new DevExpress.XtraGrid.Views.Grid.RowClickEventHandler(this.gvCharset_RowClick);
this.gvCharset.FocusedRowChanged += new DevExpress.XtraGrid.Views.Base.FocusedRowChangedEventHandler(this.gvCharset_FocusedRowChanged);
//
// colCodePage
//
resources.ApplyResources(this.colCodePage, "colCodePage");
this.colCodePage.FieldName = "CodePage";
this.colCodePage.Name = "colCodePage";
this.colCodePage.OptionsColumn.ReadOnly = true;
//
// colName
//
resources.ApplyResources(this.colName, "colName");
this.colName.FieldName = "Name";
this.colName.Name = "colName";
this.colName.OptionsColumn.ReadOnly = true;
//
// colDisplayName
//
resources.ApplyResources(this.colDisplayName, "colDisplayName");
this.colDisplayName.FieldName = "DisplayName";
this.colDisplayName.Name = "colDisplayName";
this.colDisplayName.OptionsColumn.ReadOnly = true;
this.colDisplayName.Summary.AddRange(new DevExpress.XtraGrid.GridSummaryItem[] {
new DevExpress.XtraGrid.GridColumnSummaryItem()});
//
// panelControl1
//
resources.ApplyResources(this.panelControl1, "panelControl1");
this.panelControl1.Controls.Add(this.btnMyCountry);
this.panelControl1.Controls.Add(this.btnCancel);
this.panelControl1.Controls.Add(this.btnOk);
this.panelControl1.Name = "panelControl1";
//
// btnMyCountry
//
resources.ApplyResources(this.btnMyCountry, "btnMyCountry");
this.btnMyCountry.Name = "btnMyCountry";
this.btnMyCountry.Click += new System.EventHandler(this.btnMyCountry_Click);
//
// btnCancel
//
resources.ApplyResources(this.btnCancel, "btnCancel");
this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
this.btnCancel.Name = "btnCancel";
//
// btnOk
//
resources.ApplyResources(this.btnOk, "btnOk");
this.btnOk.DialogResult = System.Windows.Forms.DialogResult.OK;
this.btnOk.Name = "btnOk";
//
// CharsetForm
//
this.AcceptButton = this.btnOk;
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.CancelButton = this.btnCancel;
this.Controls.Add(this.gcCharset);
this.Controls.Add(this.panelControl1);
this.Name = "CharsetForm";
this.Load += new System.EventHandler(this.CharsetForm_Load);
((System.ComponentModel.ISupportInitialize)(this.gcCharset)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.bindingSource1)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.gvCharset)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.panelControl1)).EndInit();
this.panelControl1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private DevExpress.XtraGrid.GridControl gcCharset;
private DevExpress.XtraGrid.Views.Grid.GridView gvCharset;
private DevExpress.XtraEditors.PanelControl panelControl1;
private DevExpress.XtraEditors.SimpleButton btnMyCountry;
private DevExpress.XtraEditors.SimpleButton btnCancel;
private DevExpress.XtraEditors.SimpleButton btnOk;
private System.Windows.Forms.BindingSource bindingSource1;
private DevExpress.XtraGrid.Columns.GridColumn colCodePage;
private DevExpress.XtraGrid.Columns.GridColumn colName;
private DevExpress.XtraGrid.Columns.GridColumn colDisplayName;
}
}

100
ChanSort.Ui/CharsetForm.cs Normal file
View File

@@ -0,0 +1,100 @@
using System;
using System.Text;
using DevExpress.XtraEditors;
using DevExpress.XtraGrid.Views.Base;
namespace ChanSort.Ui
{
public partial class CharsetForm : XtraForm
{
private readonly Encoding initialEncoding = Encoding.Default;
private Encoding currentEncoding;
public EventHandler<EncodingChangedEventArgs> EncodingChanged;
public CharsetForm(Encoding encoding)
{
this.initialEncoding = encoding;
InitializeComponent();
}
public Encoding Encoding
{
get { return this.currentEncoding; }
}
private void SelectEncoding(Encoding encoding)
{
var encodings = Encoding.GetEncodings();
for (int i = 0; i < encodings.Length; i++)
{
if (encodings[i].Name == encoding.WebName)
{
this.gvCharset.FocusedRowHandle = i;
this.gvCharset.MakeRowVisible(i);
}
}
}
private void RaiseEncodingChanged()
{
if (this.EncodingChanged != null)
this.EncodingChanged(this, new EncodingChangedEventArgs(this.currentEncoding));
}
private void CharsetForm_Load(object sender, EventArgs e)
{
var encodings = Encoding.GetEncodings();
this.gcCharset.DataSource = encodings;
}
protected override void OnShown(EventArgs e)
{
base.OnShown(e);
this.SelectEncoding(this.initialEncoding);
}
private void gvCharset_FocusedRowChanged(object sender, FocusedRowChangedEventArgs e)
{
var encodingInfo = (EncodingInfo) gvCharset.GetFocusedRow();
if (encodingInfo == null)
return;
this.currentEncoding = Encoding.GetEncoding(encodingInfo.Name);
this.RaiseEncodingChanged();
}
private void gvCharset_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)
{
if (e.Clicks == 2 && this.gvCharset.IsDataRow(e.RowHandle))
this.DialogResult = System.Windows.Forms.DialogResult.OK;
}
private void btnMyCountry_Click(object sender, EventArgs e)
{
this.SelectEncoding(Encoding.Default);
}
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
base.OnClosing(e);
if (this.DialogResult != System.Windows.Forms.DialogResult.OK)
{
// restore initial encoding
this.currentEncoding = this.initialEncoding;
this.RaiseEncodingChanged();
}
}
}
#region class EncodingChangedEventArgs
public class EncodingChangedEventArgs : EventArgs
{
public readonly Encoding Encoding;
public EncodingChangedEventArgs(Encoding encoding)
{
this.Encoding = encoding;
}
}
#endregion
}

View File

@@ -0,0 +1,132 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="colDisplayName.Caption" xml:space="preserve">
<value>Beschreibung</value>
</data>
<data name="btnMyCountry.Text" xml:space="preserve">
<value>Standard-Zeichensatz meines Landes</value>
</data>
<data name="btnCancel.Text" xml:space="preserve">
<value>Abbrechen</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Zeichensatz</value>
</data>
</root>

View File

@@ -0,0 +1,367 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="&gt;&gt;btnCancel.Parent" xml:space="preserve">
<value>panelControl1</value>
</data>
<data name="&gt;&gt;gcCharset.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="gcCharset.EmbeddedNavigator.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>Inherit</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="btnOk.Location" type="System.Drawing.Point, System.Drawing">
<value>272, 6</value>
</data>
<data name="&gt;&gt;colCodePage.Name" xml:space="preserve">
<value>colCodePage</value>
</data>
<data name="&gt;&gt;btnCancel.Name" xml:space="preserve">
<value>btnCancel</value>
</data>
<data name="&gt;&gt;btnOk.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="gcCharset.Size" type="System.Drawing.Size, System.Drawing">
<value>433, 446</value>
</data>
<data name="&gt;&gt;gvCharset.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Views.Grid.GridView, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>CharsetForm</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="gcCharset.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="btnCancel.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="colName.VisibleIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="btnMyCountry.Location" type="System.Drawing.Point, System.Drawing">
<value>5, 6</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="gcCharset.EmbeddedNavigator.BackgroundImage" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="gcCharset.EmbeddedNavigator.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="panelControl1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Bottom</value>
</data>
<data name="&gt;&gt;btnMyCountry.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<assembly alias="DevExpress.XtraEditors.v12.2" name="DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="gcCharset.EmbeddedNavigator.TextLocation" type="DevExpress.XtraEditors.NavigatorButtonsTextLocation, DevExpress.XtraEditors.v12.2">
<value>Center</value>
</data>
<assembly alias="DevExpress.Utils.v12.2" name="DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="gcCharset.EmbeddedNavigator.ToolTipIconType" type="DevExpress.Utils.ToolTipIconType, DevExpress.Utils.v12.2">
<value>None</value>
</data>
<data name="&gt;&gt;gvCharset.Name" xml:space="preserve">
<value>gvCharset</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>Manual</value>
</data>
<data name="btnCancel.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="&gt;&gt;btnMyCountry.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="gcCharset.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="gcCharset.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="colDisplayName.VisibleIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;gcCharset.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;gcCharset.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;btnCancel.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.SimpleButton, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;colName.Name" xml:space="preserve">
<value>colName</value>
</data>
<data name="gcCharset.EmbeddedNavigator.ToolTipTitle" xml:space="preserve">
<value />
</data>
<data name="panelControl1.Size" type="System.Drawing.Size, System.Drawing">
<value>433, 37</value>
</data>
<data name="panelControl1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 446</value>
</data>
<data name="btnOk.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Right</value>
</data>
<data name="&gt;&gt;colDisplayName.Name" xml:space="preserve">
<value>colDisplayName</value>
</data>
<data name="btnCancel.Text" xml:space="preserve">
<value>Cancel</value>
</data>
<data name="&gt;&gt;btnOk.Parent" xml:space="preserve">
<value>panelControl1</value>
</data>
<data name="&gt;&gt;btnMyCountry.Name" xml:space="preserve">
<value>btnMyCountry</value>
</data>
<data name="colDisplayName.Visible" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="colCodePage.VisibleIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;panelControl1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="&gt;&gt;btnMyCountry.Parent" xml:space="preserve">
<value>panelControl1</value>
</data>
<data name="&gt;&gt;gcCharset.Name" xml:space="preserve">
<value>gcCharset</value>
</data>
<data name="&gt;&gt;colCodePage.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="btnMyCountry.Text" xml:space="preserve">
<value>Default character set for my country</value>
</data>
<data name="colCodePage.Width" type="System.Int32, mscorlib">
<value>67</value>
</data>
<data name="colDisplayName.Width" type="System.Int32, mscorlib">
<value>222</value>
</data>
<data name="btnCancel.Location" type="System.Drawing.Point, System.Drawing">
<value>353, 6</value>
</data>
<data name="&gt;&gt;colName.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="btnCancel.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="&gt;&gt;bindingSource1.Name" xml:space="preserve">
<value>bindingSource1</value>
</data>
<data name="&gt;&gt;btnOk.ZOrder" xml:space="preserve">
<value>2</value>
</data>
<data name="&gt;&gt;btnCancel.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="btnOk.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="&gt;&gt;panelControl1.ZOrder" xml:space="preserve">
<value>1</value>
</data>
<data name="btnOk.Text" xml:space="preserve">
<value>Ok</value>
</data>
<data name="gcCharset.EmbeddedNavigator.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="gcCharset.EmbeddedNavigator.BackgroundImageLayout" type="System.Windows.Forms.ImageLayout, System.Windows.Forms">
<value>Tile</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Character set</value>
</data>
<data name="btnMyCountry.Size" type="System.Drawing.Size, System.Drawing">
<value>232, 23</value>
</data>
<data name="colCodePage.Visible" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="&gt;&gt;bindingSource1.Type" xml:space="preserve">
<value>System.Windows.Forms.BindingSource, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="btnMyCountry.TabIndex" type="System.Int32, mscorlib">
<value>2</value>
</data>
<data name="&gt;&gt;panelControl1.Name" xml:space="preserve">
<value>panelControl1</value>
</data>
<data name="gcCharset.EmbeddedNavigator.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left</value>
</data>
<data name="panelControl1.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="btnOk.Size" type="System.Drawing.Size, System.Drawing">
<value>75, 23</value>
</data>
<data name="&gt;&gt;btnOk.Name" xml:space="preserve">
<value>btnOk</value>
</data>
<data name="gcCharset.EmbeddedNavigator.ToolTip" xml:space="preserve">
<value />
</data>
<data name="&gt;&gt;colDisplayName.Type" xml:space="preserve">
<value>DevExpress.XtraGrid.Columns.GridColumn, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>433, 483</value>
</data>
<data name="colName.Width" type="System.Int32, mscorlib">
<value>142</value>
</data>
<data name="&gt;&gt;panelControl1.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.PanelControl, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="colName.Visible" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<assembly alias="DevExpress.Data.v12.2" name="DevExpress.Data.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="gcCharset.EmbeddedNavigator.AllowHtmlTextInToolTip" type="DevExpress.Utils.DefaultBoolean, DevExpress.Data.v12.2">
<value>Default</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>DevExpress.XtraEditors.XtraForm, DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
<metadata name="bindingSource1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
<value>17, 17</value>
</metadata>
</root>

91
ChanSort.Ui/InfoBox.Designer.cs generated Normal file
View File

@@ -0,0 +1,91 @@
namespace ChanSort.Ui
{
partial class InfoBox
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.txtMessage = new DevExpress.XtraEditors.MemoEdit();
this.panelControl1 = new DevExpress.XtraEditors.PanelControl();
this.simpleButton1 = new DevExpress.XtraEditors.SimpleButton();
((System.ComponentModel.ISupportInitialize)(this.txtMessage.Properties)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.panelControl1)).BeginInit();
this.panelControl1.SuspendLayout();
this.SuspendLayout();
//
// txtMessage
//
this.txtMessage.Dock = System.Windows.Forms.DockStyle.Fill;
this.txtMessage.Location = new System.Drawing.Point(0, 0);
this.txtMessage.Name = "txtMessage";
this.txtMessage.Properties.Appearance.Font = new System.Drawing.Font("Lucida Console", 8.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(0)));
this.txtMessage.Properties.Appearance.Options.UseFont = true;
this.txtMessage.Size = new System.Drawing.Size(953, 486);
this.txtMessage.TabIndex = 0;
//
// panelControl1
//
this.panelControl1.Controls.Add(this.simpleButton1);
this.panelControl1.Dock = System.Windows.Forms.DockStyle.Bottom;
this.panelControl1.Location = new System.Drawing.Point(0, 486);
this.panelControl1.Name = "panelControl1";
this.panelControl1.Size = new System.Drawing.Size(953, 45);
this.panelControl1.TabIndex = 1;
//
// simpleButton1
//
this.simpleButton1.Anchor = ((System.Windows.Forms.AnchorStyles)((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Right)));
this.simpleButton1.DialogResult = System.Windows.Forms.DialogResult.OK;
this.simpleButton1.Location = new System.Drawing.Point(866, 10);
this.simpleButton1.Name = "simpleButton1";
this.simpleButton1.Size = new System.Drawing.Size(75, 23);
this.simpleButton1.TabIndex = 0;
this.simpleButton1.Text = "Ok";
//
// InfoBox
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.ClientSize = new System.Drawing.Size(953, 531);
this.Controls.Add(this.txtMessage);
this.Controls.Add(this.panelControl1);
this.Name = "InfoBox";
this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
this.Text = "InfoBox";
((System.ComponentModel.ISupportInitialize)(this.txtMessage.Properties)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.panelControl1)).EndInit();
this.panelControl1.ResumeLayout(false);
this.ResumeLayout(false);
}
#endregion
private DevExpress.XtraEditors.MemoEdit txtMessage;
private DevExpress.XtraEditors.PanelControl panelControl1;
private DevExpress.XtraEditors.SimpleButton simpleButton1;
}
}

35
ChanSort.Ui/InfoBox.cs Normal file
View File

@@ -0,0 +1,35 @@
using System.Windows.Forms;
using DevExpress.XtraEditors;
namespace ChanSort.Ui
{
public partial class InfoBox : XtraForm
{
public InfoBox()
{
InitializeComponent();
this.ActiveControl = this.simpleButton1;
}
public static void Show(IWin32Window owner, string message, string caption)
{
var box = new InfoBox();
box.Text = caption;
box.txtMessage.Text = message;
box.txtMessage.Properties.ReadOnly = true;
box.txtMessage.SelectionStart = 0;
box.txtMessage.SelectionLength = 0;
box.ShowDialog(owner);
}
protected override bool ProcessDialogKey(Keys keyData)
{
if (keyData == Keys.Escape)
{
this.DialogResult = DialogResult.Cancel;
return true;
}
return base.ProcessDialogKey(keyData);
}
}
}

120
ChanSort.Ui/InfoBox.resx Normal file
View File

@@ -0,0 +1,120 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
</root>

1481
ChanSort.Ui/MainForm.Designer.cs generated Normal file

File diff suppressed because it is too large Load Diff

1712
ChanSort.Ui/MainForm.cs Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,693 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="gridOutput.EmbeddedNavigator.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="gridOutput.EmbeddedNavigator.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<assembly alias="DevExpress.Data.v12.2" name="DevExpress.Data.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="gridOutput.EmbeddedNavigator.AllowHtmlTextInToolTip" type="DevExpress.Utils.DefaultBoolean, DevExpress.Data.v12.2">
<value>Default</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="gridOutput.EmbeddedNavigator.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left</value>
</data>
<data name="gridOutput.EmbeddedNavigator.BackgroundImage" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="gridOutput.EmbeddedNavigator.BackgroundImageLayout" type="System.Windows.Forms.ImageLayout, System.Windows.Forms">
<value>Tile</value>
</data>
<data name="gridOutput.EmbeddedNavigator.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>Inherit</value>
</data>
<assembly alias="DevExpress.XtraEditors.v12.2" name="DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="gridOutput.EmbeddedNavigator.TextLocation" type="DevExpress.XtraEditors.NavigatorButtonsTextLocation, DevExpress.XtraEditors.v12.2">
<value>Center</value>
</data>
<data name="gridOutput.EmbeddedNavigator.ToolTip" xml:space="preserve">
<value />
</data>
<assembly alias="DevExpress.Utils.v12.2" name="DevExpress.Utils.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="gridOutput.EmbeddedNavigator.ToolTipIconType" type="DevExpress.Utils.ToolTipIconType, DevExpress.Utils.v12.2">
<value>None</value>
</data>
<data name="gridOutput.EmbeddedNavigator.ToolTipTitle" xml:space="preserve">
<value />
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="gviewOutput.Appearance.HeaderPanel.GradientMode" type="System.Drawing.Drawing2D.LinearGradientMode, System.Drawing">
<value>Horizontal</value>
</data>
<data name="gviewOutput.Appearance.HeaderPanel.Image" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="colOutSlot.Caption" xml:space="preserve">
<value>Neue Pr#</value>
</data>
<data name="colOutSlot.ToolTip" xml:space="preserve">
<value>Neuer Programmplatz</value>
</data>
<data name="colOutName.Caption" xml:space="preserve">
<value>Sendername</value>
</data>
<data name="colOutFav.Caption" xml:space="preserve">
<value>Favoriten</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit1.Mask.AutoComplete" type="DevExpress.XtraEditors.Mask.AutoCompleteType, DevExpress.XtraEditors.v12.2">
<value>Default</value>
</data>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="repositoryItemCheckedComboBoxEdit1.Mask.BeepOnError" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit1.Mask.IgnoreMaskBlank" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit1.Mask.PlaceHolder" type="System.Char, mscorlib" xml:space="preserve">
<value>_</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit1.Mask.SaveLiteral" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit1.Mask.ShowPlaceHolders" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit1.Mask.UseMaskAsDisplayFormat" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="lblHotkeyLeft.Size" type="System.Drawing.Size, System.Drawing">
<value>333, 17</value>
</data>
<data name="lblHotkeyLeft.Text" xml:space="preserve">
<value>F3: Filter | F4: Liste | -: nach oben | +: nach unten | Entf: entfernen</value>
</data>
<data name="comboEditMode.EditValue" xml:space="preserve">
<value>Dahinter einfügen</value>
</data>
<data name="miFile.Caption" xml:space="preserve">
<value>&amp;Datei</value>
</data>
<data name="miOpen.Caption" xml:space="preserve">
<value>TV Senderliste &amp;öffnen...</value>
</data>
<data name="miReload.Caption" xml:space="preserve">
<value>&amp;Erneut laden</value>
</data>
<data name="miRestoreOriginal.Caption" xml:space="preserve">
<value>Sicherheitskopie wiederherstellen</value>
</data>
<data name="miFileInformation.Caption" xml:space="preserve">
<value>Datei&amp;information...</value>
</data>
<data name="miSave.Caption" xml:space="preserve">
<value>&amp;Speichern</value>
</data>
<data name="miSaveAs.Caption" xml:space="preserve">
<value>Speichern &amp;unter...</value>
</data>
<data name="miOpenReferenceFile.Caption" xml:space="preserve">
<value>Referenzliste öffnen...</value>
</data>
<data name="miQuit.Caption" xml:space="preserve">
<value>&amp;Beenden</value>
</data>
<data name="miEdit.Caption" xml:space="preserve">
<value>&amp;Bearbeiten</value>
</data>
<data name="miAddChannel.Caption" xml:space="preserve">
<value>Sender &amp;übernehmen</value>
</data>
<data name="miRemove.Caption" xml:space="preserve">
<value>Sender &amp;entfernen</value>
</data>
<data name="miReplace.Caption" xml:space="preserve">
<value>Sender erset&amp;zen</value>
</data>
<data name="miSort.Caption" xml:space="preserve">
<value>Sender alphabetisch sortieren</value>
</data>
<data name="miRenum.Caption" xml:space="preserve">
<value>Sender neu &amp;nummerieren</value>
</data>
<data name="mnuFavSet.Caption" xml:space="preserve">
<value>&amp;Favoriten hinzufügen</value>
</data>
<data name="mnuFavUnset.Caption" xml:space="preserve">
<value>Favoriten entfernen</value>
</data>
<data name="miLockOn.Caption" xml:space="preserve">
<value>Sender s&amp;perren: ein</value>
</data>
<data name="miLockOff.Caption" xml:space="preserve">
<value>Sender sperren: aus</value>
</data>
<data name="miSkipOn.Caption" xml:space="preserve">
<value>Sender ü&amp;berspringen: ein</value>
</data>
<data name="miSkipOff.Caption" xml:space="preserve">
<value>Sender überspringen: aus</value>
</data>
<data name="miHideOn.Caption" xml:space="preserve">
<value>Sender &amp;verstecken: ein</value>
</data>
<data name="miHideOff.Caption" xml:space="preserve">
<value>Sender verstecken: aus</value>
</data>
<data name="barSubItem2.Caption" xml:space="preserve">
<value>TV-Gerät</value>
</data>
<data name="miTvCountrySetup.Caption" xml:space="preserve">
<value>Geräteeinstellungen...</value>
</data>
<data name="mnuOptions.Caption" xml:space="preserve">
<value>&amp;Einstellungen</value>
</data>
<data name="barSubItem1.Caption" xml:space="preserve">
<value>&amp;Sprache</value>
</data>
<data name="mnuCharset.Caption" xml:space="preserve">
<value>&amp;Zeichensatz</value>
</data>
<data name="mnuHelp.Caption" xml:space="preserve">
<value>&amp;Hilfe</value>
</data>
<data name="miAbout.Caption" xml:space="preserve">
<value>&amp;Über ChanSort...</value>
</data>
<assembly alias="DevExpress.XtraBars.v12.2" name="DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
<data name="barManager1.Categories" type="DevExpress.XtraBars.BarManagerCategory, DevExpress.XtraBars.v12.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxMi4yLCBWZXJzaW9uPTEy
LjIuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li
bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEZpbGUE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC
X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICKaPJ5gsBeU2NTSFe
Xxl+0wEL
</value>
</data>
<data name="barManager1.Categories1" type="DevExpress.XtraBars.BarManagerCategory, DevExpress.XtraBars.v12.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxMi4yLCBWZXJzaW9uPTEy
LjIuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li
bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEhlbHAE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC
X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICdEVVDegwMU2acNpw
KphCYAEL
</value>
</data>
<data name="barManager1.Categories2" type="DevExpress.XtraBars.BarManagerCategory, DevExpress.XtraBars.v12.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxMi4yLCBWZXJzaW9uPTEy
LjIuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li
bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAABEVkaXQE/P///wtTeXN0ZW0uR3VpZAsAAAACX2ECX2IC
X2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICZMTu18lZRU+IqmAu
ZMgcwAEL
</value>
</data>
<data name="barManager1.Categories3" type="DevExpress.XtraBars.BarManagerCategory, DevExpress.XtraBars.v12.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
AAEAAAD/////AQAAAAAAAAAMAgAAAF1EZXZFeHByZXNzLlh0cmFCYXJzLnYxMi4yLCBWZXJzaW9uPTEy
LjIuNi4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEFAQAA
ACZEZXZFeHByZXNzLlh0cmFCYXJzLkJhck1hbmFnZXJDYXRlZ29yeQMAAAAETmFtZQRHdWlkB1Zpc2li
bGUBAwALU3lzdGVtLkd1aWQBAgAAAAYDAAAAB09wdGlvbnME/P///wtTeXN0ZW0uR3VpZAsAAAACX2EC
X2ICX2MCX2QCX2UCX2YCX2cCX2gCX2kCX2oCX2sAAAAAAAAAAAAAAAgHBwICAgICAgICXJMOh9nzAkKc
WIeWYGkVXQEL
</value>
</data>
<data name="barDockControlTop.Appearance.GradientMode" type="System.Drawing.Drawing2D.LinearGradientMode, System.Drawing">
<value>Horizontal</value>
</data>
<data name="barDockControlTop.Appearance.Image" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="barDockControlBottom.Appearance.GradientMode" type="System.Drawing.Drawing2D.LinearGradientMode, System.Drawing">
<value>Horizontal</value>
</data>
<data name="barDockControlBottom.Appearance.Image" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="barDockControlLeft.Appearance.GradientMode" type="System.Drawing.Drawing2D.LinearGradientMode, System.Drawing">
<value>Horizontal</value>
</data>
<data name="barDockControlLeft.Appearance.Image" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="barDockControlRight.Appearance.GradientMode" type="System.Drawing.Drawing2D.LinearGradientMode, System.Drawing">
<value>Horizontal</value>
</data>
<data name="barDockControlRight.Appearance.Image" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="comboUnsortedAction.EditValue" xml:space="preserve">
<value>In bestehender Reihenfolge am Ende anhängen</value>
</data>
<data name="comboUnsortedAction.Properties.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="comboUnsortedAction.Properties.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="comboUnsortedAction.Properties.AutoHeight" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="comboUnsortedAction.Properties.Items" xml:space="preserve">
<value>In bestehender Reihenfolge am Ende anhängen</value>
</data>
<data name="comboUnsortedAction.Properties.Items1" xml:space="preserve">
<value>In alphabetischer Reihenfolge am Ende anhängen</value>
</data>
<data name="comboUnsortedAction.Properties.Items2" xml:space="preserve">
<value>Löschen</value>
</data>
<data name="comboUnsortedAction.Properties.NullValuePrompt" xml:space="preserve">
<value />
</data>
<data name="comboUnsortedAction.Properties.NullValuePromptShowForEmptyValue" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="comboUnsortedAction.Size" type="System.Drawing.Size, System.Drawing">
<value>262, 20</value>
</data>
<data name="labelControl3.Appearance.DisabledImage" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="labelControl3.Appearance.GradientMode" type="System.Drawing.Drawing2D.LinearGradientMode, System.Drawing">
<value>Horizontal</value>
</data>
<data name="labelControl3.Appearance.HoverImage" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="labelControl3.Appearance.Image" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="labelControl3.Appearance.PressedImage" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="labelControl3.Text" xml:space="preserve">
<value>Nicht explizit sortierte Sender:</value>
</data>
<data name="btnResetChannelData.Text" xml:space="preserve">
<value>Senderlisten vollständig löschen</value>
</data>
<data name="comboChannelList.Properties.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="comboChannelList.Properties.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="comboChannelList.Properties.AutoHeight" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="comboChannelList.Properties.NullValuePrompt" xml:space="preserve">
<value />
</data>
<data name="comboChannelList.Properties.NullValuePromptShowForEmptyValue" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="labelControl1.Size" type="System.Drawing.Size, System.Drawing">
<value>57, 13</value>
</data>
<data name="labelControl1.Text" xml:space="preserve">
<value>Senderliste:</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>ChanSort v2013-03-30 - Senderlisten Editor für LG und Samsung TV</value>
</data>
<data name="miMoveUp.Caption" xml:space="preserve">
<value>Nach oben</value>
</data>
<data name="miMoveDown.Caption" xml:space="preserve">
<value>Nach unten</value>
</data>
<data name="comboEditMode.Properties.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="comboEditMode.Properties.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="comboEditMode.Properties.AutoHeight" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="comboEditMode.Properties.Items" xml:space="preserve">
<value>Davor einfügen</value>
</data>
<data name="comboEditMode.Properties.Items1" xml:space="preserve">
<value>Dahinter einfügen</value>
</data>
<data name="comboEditMode.Properties.Items2" xml:space="preserve">
<value>Austauschen</value>
</data>
<data name="comboEditMode.Properties.NullValuePrompt" xml:space="preserve">
<value />
</data>
<data name="comboEditMode.Properties.NullValuePromptShowForEmptyValue" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="btnSyncFromLeft.ToolTip" xml:space="preserve">
<value>Nach aktuellem Sender in rechtem Fenster filtern</value>
</data>
<data name="labelControl2.Size" type="System.Drawing.Size, System.Drawing">
<value>35, 13</value>
</data>
<data name="labelControl2.Text" xml:space="preserve">
<value>Modus:</value>
</data>
<data name="btnClearLeftFilter.Appearance.GradientMode" type="System.Drawing.Drawing2D.LinearGradientMode, System.Drawing">
<value>Horizontal</value>
</data>
<data name="btnClearLeftFilter.Appearance.Image" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="btnClearLeftFilter.ToolTip" xml:space="preserve">
<value>Filter zurücksetzen</value>
</data>
<data name="btnRenum.ToolTip" xml:space="preserve">
<value>Markierte Sender neu nummerieren</value>
</data>
<data name="btnSort.ToolTip" xml:space="preserve">
<value>Markierte Sender alphabetisch sortieren</value>
</data>
<data name="btnDown.ToolTip" xml:space="preserve">
<value>Markierte Sender nach unten verschieben</value>
</data>
<data name="btnUp.ToolTip" xml:space="preserve">
<value>Markierte Sender nach oben verschieben</value>
</data>
<data name="btnRemove.ToolTip" xml:space="preserve">
<value>Markierte Sender entfernen</value>
</data>
<data name="txtSetSlot.Properties.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="txtSetSlot.Properties.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="txtSetSlot.Properties.AutoHeight" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="txtSetSlot.Properties.Mask.AutoComplete" type="DevExpress.XtraEditors.Mask.AutoCompleteType, DevExpress.XtraEditors.v12.2">
<value>Default</value>
</data>
<data name="txtSetSlot.Properties.Mask.BeepOnError" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="txtSetSlot.Properties.Mask.IgnoreMaskBlank" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="txtSetSlot.Properties.Mask.PlaceHolder" type="System.Char, mscorlib" xml:space="preserve">
<value>_</value>
</data>
<data name="txtSetSlot.Properties.Mask.SaveLiteral" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="txtSetSlot.Properties.Mask.ShowPlaceHolders" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="txtSetSlot.Properties.Mask.UseMaskAsDisplayFormat" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="txtSetSlot.Properties.NullValuePrompt" xml:space="preserve">
<value />
</data>
<data name="txtSetSlot.Properties.NullValuePromptShowForEmptyValue" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="labelControl11.Text" xml:space="preserve">
<value>Setze Pr#:</value>
</data>
<data name="labelControl11.ToolTip" xml:space="preserve">
<value>Programplatz für Einfügen und Festlegen</value>
</data>
<data name="grpOutputList.Text" xml:space="preserve">
<value>Sortierte Sender (.csv)</value>
</data>
<data name="gridInput.EmbeddedNavigator.AccessibleDescription" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="gridInput.EmbeddedNavigator.AccessibleName" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="gridInput.EmbeddedNavigator.AllowHtmlTextInToolTip" type="DevExpress.Utils.DefaultBoolean, DevExpress.Data.v12.2">
<value>Default</value>
</data>
<data name="gridInput.EmbeddedNavigator.Anchor" type="System.Windows.Forms.AnchorStyles, System.Windows.Forms">
<value>Top, Left</value>
</data>
<data name="gridInput.EmbeddedNavigator.BackgroundImage" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="gridInput.EmbeddedNavigator.BackgroundImageLayout" type="System.Windows.Forms.ImageLayout, System.Windows.Forms">
<value>Tile</value>
</data>
<data name="gridInput.EmbeddedNavigator.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
<value>Inherit</value>
</data>
<data name="gridInput.EmbeddedNavigator.TextLocation" type="DevExpress.XtraEditors.NavigatorButtonsTextLocation, DevExpress.XtraEditors.v12.2">
<value>Center</value>
</data>
<data name="gridInput.EmbeddedNavigator.ToolTip" xml:space="preserve">
<value />
</data>
<data name="gridInput.EmbeddedNavigator.ToolTipIconType" type="DevExpress.Utils.ToolTipIconType, DevExpress.Utils.v12.2">
<value>None</value>
</data>
<data name="gridInput.EmbeddedNavigator.ToolTipTitle" xml:space="preserve">
<value />
</data>
<data name="gviewInput.Appearance.HeaderPanel.GradientMode" type="System.Drawing.Drawing2D.LinearGradientMode, System.Drawing">
<value>Horizontal</value>
</data>
<data name="gviewInput.Appearance.HeaderPanel.Image" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="colSlotOld.Caption" xml:space="preserve">
<value>Alte Pr#</value>
</data>
<data name="colSlotOld.ToolTip" xml:space="preserve">
<value>Alter Programmplatz</value>
</data>
<data name="colSlotNew.Caption" xml:space="preserve">
<value>Neue Pr#</value>
</data>
<data name="colSlotNew.ToolTip" xml:space="preserve">
<value>Neuer Programmplatz</value>
</data>
<data name="colName.Caption" xml:space="preserve">
<value>Sendername</value>
</data>
<data name="colShortName.Caption" xml:space="preserve">
<value>Kurzname</value>
</data>
<data name="colFavorites.Caption" xml:space="preserve">
<value>Favoriten</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit2.Mask.AutoComplete" type="DevExpress.XtraEditors.Mask.AutoCompleteType, DevExpress.XtraEditors.v12.2">
<value>Default</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit2.Mask.BeepOnError" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit2.Mask.IgnoreMaskBlank" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit2.Mask.PlaceHolder" type="System.Char, mscorlib" xml:space="preserve">
<value>_</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit2.Mask.SaveLiteral" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit2.Mask.ShowPlaceHolders" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="repositoryItemCheckedComboBoxEdit2.Mask.UseMaskAsDisplayFormat" type="System.Boolean, mscorlib">
<value>False</value>
</data>
<data name="colLock.Caption" xml:space="preserve">
<value>Ge- sperrt</value>
</data>
<data name="colSkip.Caption" xml:space="preserve">
<value>Über- springen</value>
</data>
<data name="colHidden.Caption" xml:space="preserve">
<value>Ver- steckt</value>
</data>
<data name="colEncrypted.Caption" xml:space="preserve">
<value>Ver- schlüss</value>
</data>
<data name="colEncrypted.ToolTip" xml:space="preserve">
<value>Verschlüsselt</value>
</data>
<data name="colChannelOrTransponder.Caption" xml:space="preserve">
<value>Kanal/ Transp.</value>
</data>
<data name="colChannelOrTransponder.ToolTip" xml:space="preserve">
<value>Kanal- bzw. Transpondernummer</value>
</data>
<data name="colFreqInMhz.Caption" xml:space="preserve">
<value>Freqenz (MHz)</value>
</data>
<data name="colSatellite.Caption" xml:space="preserve">
<value>Satellit</value>
</data>
<data name="colSymbolRate.Caption" xml:space="preserve">
<value>Symbol- rate</value>
</data>
<data name="colPolarity.Caption" xml:space="preserve">
<value>Polarität</value>
</data>
<data name="colNetworkName.Caption" xml:space="preserve">
<value>Netzwerk Name</value>
</data>
<data name="colNetworkOperator.Caption" xml:space="preserve">
<value>Netzwerk Betreiber</value>
</data>
<data name="lblHotkeyRight.Size" type="System.Drawing.Size, System.Drawing">
<value>213, 17</value>
</data>
<data name="lblHotkeyRight.Text" xml:space="preserve">
<value>F5: Filter | F6: Liste | Eingabe: übernehmen</value>
</data>
<data name="btnCloneChannelList.Text" xml:space="preserve">
<value>&lt;&lt; Alle hinzufügen (aktuelle Senderliste kopieren)</value>
</data>
<data name="btnClearRightFilter.Appearance.GradientMode" type="System.Drawing.Drawing2D.LinearGradientMode, System.Drawing">
<value>Horizontal</value>
</data>
<data name="btnClearRightFilter.Appearance.Image" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="btnClearRightFilter.ToolTip" xml:space="preserve">
<value>Filter zurücksetzen</value>
</data>
<data name="btnSyncFromRight.ToolTip" xml:space="preserve">
<value>Nach aktuellem Sender in linkem Fenster filtern</value>
</data>
<data name="btnAdd.ToolTip" xml:space="preserve">
<value>Markierte Sender übernehmen</value>
</data>
<data name="grpInputList.Text" xml:space="preserve">
<value>Alle Sender</value>
</data>
</root>

2375
ChanSort.Ui/MainForm.resx Normal file

File diff suppressed because it is too large Load Diff

22
ChanSort.Ui/Program.cs Normal file
View File

@@ -0,0 +1,22 @@
using System;
using System.Windows.Forms;
namespace ChanSort.Ui
{
static class Program
{
internal static bool ChangeLanguage;
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
do
{
ChangeLanguage = false;
Application.Run(new MainForm());
} while (ChangeLanguage);
}
}
}

View File

@@ -0,0 +1,38 @@
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
[assembly: AssemblyTitle("ChanSortUI")]
[assembly: AssemblyDescription("TV Channel Sort Utility")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("ChanSort")]
[assembly: AssemblyCopyright("Copyright © 2012")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
[assembly: NeutralResourcesLanguage("en-US")]
// Setting ComVisible to false makes the types in this assembly not visible
// to COM components. If you need to access a type in this assembly from
// COM, set the ComVisible attribute to true on that type.
[assembly: ComVisible(false)]
// The following GUID is for the ID of the typelib if this project is exposed to COM
[assembly: Guid("207c2719-5641-4141-917e-e76b7c3b952a")]
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
This file is automatically generated by Visual Studio .Net. It is
used to store generic object data source configuration information.
Renaming the file extension or editing the content of this file may
cause the file to be unrecognizable by the program.
-->
<GenericObjectDataSource DisplayName="ChannelInfo" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
<TypeInfo>GUI.ChannelInfo, GUI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
</GenericObjectDataSource>

View File

@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
This file is automatically generated by Visual Studio .Net. It is
used to store generic object data source configuration information.
Renaming the file extension or editing the content of this file may
cause the file to be unrecognizable by the program.
-->
<GenericObjectDataSource DisplayName="EncodingInfo" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
<TypeInfo>System.Text.EncodingInfo, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</TypeInfo>
</GenericObjectDataSource>

View File

@@ -0,0 +1,337 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.586
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ChanSort.Ui.Properties {
using System;
/// <summary>
/// A strongly-typed resource class, for looking up localized strings, etc.
/// </summary>
// This class was auto-generated by the StronglyTypedResourceBuilder
// class via a tool like ResGen or Visual Studio.
// To add or remove a member, edit your .ResX file then rerun ResGen
// with the /str option, or rebuild your VS project.
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
internal class Resources {
private static global::System.Resources.ResourceManager resourceMan;
private static global::System.Globalization.CultureInfo resourceCulture;
[global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
internal Resources() {
}
/// <summary>
/// Returns the cached ResourceManager instance used by this class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Resources.ResourceManager ResourceManager {
get {
if (object.ReferenceEquals(resourceMan, null)) {
global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("ChanSort.Ui.Properties.Resources", typeof(Resources).Assembly);
resourceMan = temp;
}
return resourceMan;
}
}
/// <summary>
/// Overrides the current thread's CurrentUICulture property for all
/// resource lookups using this strongly typed resource class.
/// </summary>
[global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
internal static global::System.Globalization.CultureInfo Culture {
get {
return resourceCulture;
}
set {
resourceCulture = value;
}
}
internal static System.Drawing.Bitmap Donate {
get {
object obj = ResourceManager.GetObject("Donate", resourceCulture);
return ((System.Drawing.Bitmap)(obj));
}
}
/// <summary>
/// Looks up a localized string similar to Delete all channel data.
/// </summary>
internal static string MainForm_btnResetChannelData_Click_Caption {
get {
return ResourceManager.GetString("MainForm_btnResetChannelData_Click_Caption", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to WARNING: All analog, DVB-C/T and DVB-S channel and transponder data will be deleted.
///You will have to run a full channel scan after loading this file into your TV.
///Proceed?.
/// </summary>
internal static string MainForm_btnResetChannelData_Click_Message {
get {
return ResourceManager.GetString("MainForm_btnResetChannelData_Click_Message", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Supported Files|{0}|All Files (*.*)|*.
/// </summary>
internal static string MainForm_FileDialog_OpenFileFilter {
get {
return ResourceManager.GetString("MainForm_FileDialog_OpenFileFilter", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to {0}-Files|*{0}|All Files (*.*)|*.
/// </summary>
internal static string MainForm_FileDialog_SaveFileFilter {
get {
return ResourceManager.GetString("MainForm_FileDialog_SaveFileFilter", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The input file contains multiple records that use the same
///program number. It is possible that the TV will not accept
///the changes made by ChanSort.
///This is typically caused by running a manual transponder scan.
///It is recommended to use a clean input file for any modifications.
///To do that, turn Hotel Mode OFF, reset the TV to
///factory defaults, run a new blind channel scan and turn
///Hotel Mode back ON, then export a new clean TLL file.
///.
/// </summary>
internal static string MainForm_LoadFiles_DupeWarningMsg {
get {
return ResourceManager.GetString("MainForm_LoadFiles_DupeWarningMsg", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Error loading file.
/// </summary>
internal static string MainForm_LoadFiles_IOException {
get {
return ResourceManager.GetString("MainForm_LoadFiles_IOException", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Data validation.
/// </summary>
internal static string MainForm_LoadFiles_ValidationWarningCap {
get {
return ResourceManager.GetString("MainForm_LoadFiles_ValidationWarningCap", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to The verification of the file content showed some anomalies. Possible causes are:
///- The TV itself created a mess in the channel lists (which happens frequently).
///- The file format is partially unknown (e.g. unknown TV model or firmware).
///- The file has been edited with a broken program version.
///- ChanSort&apos;s validation rules are based on wrong assumptions.
///You can continue editing, but it is possibile that your TV will reject the changes..
/// </summary>
internal static string MainForm_LoadFiles_ValidationWarningMsg {
get {
return ResourceManager.GetString("MainForm_LoadFiles_ValidationWarningMsg", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to An error occured while loading the TV&apos;s data file:
///{0}.
/// </summary>
internal static string MainForm_LoadTll_Exception {
get {
return ResourceManager.GetString("MainForm_LoadTll_Exception", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to No plugin found to read/write {0} files..
/// </summary>
internal static string MainForm_LoadTll_SerializerNotFound {
get {
return ResourceManager.GetString("MainForm_LoadTll_SerializerNotFound", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Quell-TLL konnte nicht gefunden werden:
///&apos;{0}&apos;.
/// </summary>
internal static string MainForm_LoadTll_SourceTllNotFound {
get {
return ResourceManager.GetString("MainForm_LoadTll_SourceTllNotFound", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to You are about to restore the backup file. All changes will be lost!
///Do you want to continue?.
/// </summary>
internal static string MainForm_miRestoreOriginal_ItemClick_Confirm {
get {
return ResourceManager.GetString("MainForm_miRestoreOriginal_ItemClick_Confirm", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to No backup file found: {0}.
/// </summary>
internal static string MainForm_miRestoreOriginal_ItemClick_NoBackup {
get {
return ResourceManager.GetString("MainForm_miRestoreOriginal_ItemClick_NoBackup", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Unable to copy .bak file to {0}.
/// </summary>
internal static string MainForm_miRestoreOriginal_Message {
get {
return ResourceManager.GetString("MainForm_miRestoreOriginal_Message", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Data modified.
/// </summary>
internal static string MainForm_PromptSaveAndContinue_Caption {
get {
return ResourceManager.GetString("MainForm_PromptSaveAndContinue_Caption", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Do you want to save the changes?.
/// </summary>
internal static string MainForm_PromptSaveAndContinue_Message {
get {
return ResourceManager.GetString("MainForm_PromptSaveAndContinue_Message", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Restore order from channel scan.
/// </summary>
internal static string MainForm_RestoreScanOrder_Caption {
get {
return ResourceManager.GetString("MainForm_RestoreScanOrder_Caption", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to All custom storing will be lost.
///Are you sure you want to restore the order from the channel scan?.
/// </summary>
internal static string MainForm_RestoreScanOrder_Message {
get {
return ResourceManager.GetString("MainForm_RestoreScanOrder_Message", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to There was an error saving the file. Please make sure that
///- you have write permission on the file
///- the file is not open in another program
///
///The error message is:
///.
/// </summary>
internal static string MainForm_SaveFiles_ErrorMsg {
get {
return ResourceManager.GetString("MainForm_SaveFiles_ErrorMsg", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to File write error.
/// </summary>
internal static string MainForm_SaveFiles_ErrorTitle {
get {
return ResourceManager.GetString("MainForm_SaveFiles_ErrorTitle", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to An error occured while writing the TV data file:
///{0}.
/// </summary>
internal static string MainForm_SaveTllFile_Exception {
get {
return ResourceManager.GetString("MainForm_SaveTllFile_Exception", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Sorted TV data file was created successfully..
/// </summary>
internal static string MainForm_SaveTllFile_Success {
get {
return ResourceManager.GetString("MainForm_SaveTllFile_Success", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to ChanSort Reference List|*.csv|SamToolBox Reference List|*.chl|All Reference Lists|*.csv;*.chl.
/// </summary>
internal static string MainForm_ShowOpenReferenceFileDialog_Filter {
get {
return ResourceManager.GetString("MainForm_ShowOpenReferenceFileDialog_Filter", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to Open Reference List.
/// </summary>
internal static string MainForm_ShowOpenReferenceFileDialog_Title {
get {
return ResourceManager.GetString("MainForm_ShowOpenReferenceFileDialog_Title", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to An unexpected error occured:
///{0}.
/// </summary>
internal static string MainForm_TryExecute_Exception {
get {
return ResourceManager.GetString("MainForm_TryExecute_Exception", resourceCulture);
}
}
/// <summary>
/// Looks up a localized string similar to &lt;html&gt;
///&lt;body&gt;
///&lt;p style=&quot;font-family:Arial;font-size:12pt&quot;&gt;PayPal donation page is being opened...&lt;/p&gt;
///&lt;p&gt;&lt;/p&gt;
///&lt;p style=&quot;font-family:Arial;font-size:12pt&quot;&gt;PayPal Spendenseite wird ge&amp;ouml;ffnet...&lt;/p&gt;
///&lt;form action=&quot;https://www.paypal.com/cgi-bin/webscr&quot; method=&quot;post&quot;&gt;
///&lt;input type=&quot;hidden&quot; name=&quot;cmd&quot; value=&quot;_s-xclick&quot;&gt;
///&lt;input type=&quot;hidden&quot; name=&quot;encrypted&quot; value=&quot;-----BEGIN PKCS7-----MIIHVwYJKoZIhvcNAQcEoIIHSDCCB0QCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBW [rest of string was truncated]&quot;;.
/// </summary>
internal static string paypal_button {
get {
return ResourceManager.GetString("paypal_button", resourceCulture);
}
}
}
}

View File

View File

@@ -0,0 +1,230 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="MainForm_LoadTll_SourceTllNotFound" xml:space="preserve">
<value>Quell-TLL konnte nicht gefunden werden:
'{0}'</value>
</data>
<data name="MainForm_LoadTll_Exception" xml:space="preserve">
<value>Beim Auslesen der TLL-Datei trat ein Fehler auf:
{0}</value>
</data>
<data name="MainForm_FileDialog_OpenFileFilter" xml:space="preserve">
<value>Unterstützte Dateien|{0}|Alle Dateien (*.*)|*</value>
</data>
<data name="MainForm_FileDialog_SaveFileFilter" xml:space="preserve">
<value>{0}-Dateien|*{0}|Alle Dateien (*.*)|*</value>
</data>
<data name="MainForm_TryExecute_Exception" xml:space="preserve">
<value>Beim Ausführen der Aktion trat ein Programmfehler auf:
{0}</value>
</data>
<data name="MainForm_SaveTllFile_Exception" xml:space="preserve">
<value>Beim Schreiben der TLL-Datei trat ein Fehler auf:
{0}</value>
</data>
<data name="MainForm_SaveTllFile_Success" xml:space="preserve">
<value>Die sortierte TLL-Datei wurde erfolgreich erstellt.</value>
</data>
<data name="MainForm_PromptSaveAndContinue_Message" xml:space="preserve">
<value>Möchten Sie die Änderungen Speichern?</value>
</data>
<data name="MainForm_PromptSaveAndContinue_Caption" xml:space="preserve">
<value>Daten verändert</value>
</data>
<data name="MainForm_LoadTll_SerializerNotFound" xml:space="preserve">
<value>Es konnte kein Modul zum Lesen/Schreiben von {0}-Dateien gefunden werden.</value>
</data>
<data name="MainForm_LoadFiles_IOException" xml:space="preserve">
<value>Fehler beim Laden der Datei</value>
</data>
<data name="MainForm_LoadFiles_ValidationWarningCap" xml:space="preserve">
<value>Datenüberprüfung</value>
</data>
<data name="MainForm_LoadFiles_ValidationWarningMsg" xml:space="preserve">
<value>Die Überprüfung des Dateiinhalts fand einige Auffälligkeiten. Mögliche Ursachen sind:
- Der Fernseher hat seine Senderlisten versaut (was häufig vorkommt).
- Das Dateiformat ist teilweise unbekannt (unbekanntes Modell oder Firmware).
- Die Datei wurde mit einer defekten Programmversion bearbeitet.
- Eine von ChanSort's Prüfungen geht von einer falschen Annahme aus.
Sie können mit der Bearbeitung fortfahren, es ist aber möglich, dass Ihr Fernsehgerät die Änderungen nicht annimmt.</value>
</data>
<data name="MainForm_RestoreScanOrder_Message" xml:space="preserve">
<value>Die händische Sortierung wird überschrieben.
Wollen Sie wirklich die Reihenfolge des Sendersuchlaufs wiederherstellen?</value>
</data>
<data name="MainForm_RestoreScanOrder_Caption" xml:space="preserve">
<value>Reihenfolge des Sendersuchlaufs wiederherstellen</value>
</data>
<data name="MainForm_LoadFiles_DupeWarningMsg" xml:space="preserve">
<value>Die Eingabedatei enthält mehrere Einträge die der
gleichen Programmnummer zugeordnet sind. Es ist möglich,
dass das Fernsehgerät die von ChanSort durchgeführten
Änderungen nicht akzeptiert.
Eine typische Ursache für diese Situation ist ein
manueller Transponderscan.
Es wird empfohlen, für die Bearbeitung eine saubere
Ausgangsdatei zu verwenden. Dazu schalten Sie zunächst
den Hotel-Modus AUS, daraufhin können Sie die
Werkseinstellungen wiederherstellen und einen
Sender-Blindsuchlauf ausführen. Anschließend aktivieren
Sie bitte den den Hotel-Modus wieder und exportieren
die Senderliste erneut auf einen USB-Stick.
</value>
</data>
<data name="MainForm_btnResetChannelData_Click_Message" xml:space="preserve">
<value>ACHTUNG: Alle analogen, DVB-C/T und DVB-S Sender- und Transponderdaten werden gelöscht.
Nach dem Laden der Datei in den Fernseher ist ein vollständer Suchlauf notwendig.
Wollen Sie fortsetzen?</value>
</data>
<data name="MainForm_btnResetChannelData_Click_Caption" xml:space="preserve">
<value>Senderinformationen löschen</value>
</data>
<data name="MainForm_miRestoreOriginal_Message" xml:space="preserve">
<value>Die .bak Datei konnte nicht nach {0} kopiert werden</value>
</data>
<data name="MainForm_miRestoreOriginal_ItemClick_NoBackup" xml:space="preserve">
<value>Sicherheitskopie wurde nicht gefunden: {0}</value>
</data>
<data name="MainForm_miRestoreOriginal_ItemClick_Confirm" xml:space="preserve">
<value>Sie sind dabei die Sicherheitskopie wiederherzustellen. Sämtliche Änderungen gehen verloren!
Möchten Sie fortfahren?</value>
</data>
<data name="MainForm_ShowOpenReferenceFileDialog_Title" xml:space="preserve">
<value>Referenzliste öffnen</value>
</data>
<data name="MainForm_ShowOpenReferenceFileDialog_Filter" xml:space="preserve">
<value>ChanSort Referenzliste (*.csv)|*.csv|SamToolBox Referenzliste|*.chl|Alle Referenzlisten|*.csv;*.chl</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="Donate" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\btn_donateCC_LG_de.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<data name="MainForm_SaveFiles_ErrorTitle" xml:space="preserve">
<value>Schreibfehler</value>
</data>
<data name="MainForm_SaveFiles_ErrorMsg" xml:space="preserve">
<value>Beim Schreiben der Datei trat ein Fehler auf. Bitte stellen Sie sicher dass
- Sie Schreibrechte auf die Datei besitzen
- die Datei in keinem anderen Programm geöffnet ist
Die Fehlermeldung lautet:
</value>
</data>
</root>

View File

@@ -0,0 +1,229 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="MainForm_LoadTll_SourceTllNotFound" xml:space="preserve">
<value>Quell-TLL konnte nicht gefunden werden:
'{0}'</value>
</data>
<data name="MainForm_LoadTll_Exception" xml:space="preserve">
<value>An error occured while loading the TV's data file:
{0}</value>
</data>
<data name="MainForm_FileDialog_OpenFileFilter" xml:space="preserve">
<value>Supported Files|{0}|All Files (*.*)|*</value>
</data>
<data name="MainForm_FileDialog_SaveFileFilter" xml:space="preserve">
<value>{0}-Files|*{0}|All Files (*.*)|*</value>
</data>
<data name="MainForm_TryExecute_Exception" xml:space="preserve">
<value>An unexpected error occured:
{0}</value>
</data>
<data name="MainForm_SaveTllFile_Exception" xml:space="preserve">
<value>An error occured while writing the TV data file:
{0}</value>
</data>
<data name="MainForm_SaveTllFile_Success" xml:space="preserve">
<value>Sorted TV data file was created successfully.</value>
</data>
<data name="MainForm_PromptSaveAndContinue_Message" xml:space="preserve">
<value>Do you want to save the changes?</value>
</data>
<data name="MainForm_PromptSaveAndContinue_Caption" xml:space="preserve">
<value>Data modified</value>
</data>
<data name="MainForm_LoadTll_SerializerNotFound" xml:space="preserve">
<value>No plugin found to read/write {0} files.</value>
</data>
<data name="MainForm_LoadFiles_IOException" xml:space="preserve">
<value>Error loading file</value>
</data>
<data name="MainForm_LoadFiles_ValidationWarningMsg" xml:space="preserve">
<value>The verification of the file content showed some anomalies. Possible causes are:
- The TV itself created a mess in the channel lists (which happens frequently).
- The file format is partially unknown (e.g. unknown TV model or firmware).
- The file has been edited with a broken program version.
- ChanSort's validation rules are based on wrong assumptions.
You can continue editing, but it is possibile that your TV will reject the changes.</value>
</data>
<data name="MainForm_LoadFiles_ValidationWarningCap" xml:space="preserve">
<value>Data validation</value>
</data>
<data name="MainForm_RestoreScanOrder_Message" xml:space="preserve">
<value>All custom storing will be lost.
Are you sure you want to restore the order from the channel scan?</value>
</data>
<data name="MainForm_RestoreScanOrder_Caption" xml:space="preserve">
<value>Restore order from channel scan</value>
</data>
<data name="MainForm_LoadFiles_DupeWarningMsg" xml:space="preserve">
<value>The input file contains multiple records that use the same
program number. It is possible that the TV will not accept
the changes made by ChanSort.
This is typically caused by running a manual transponder scan.
It is recommended to use a clean input file for any modifications.
To do that, turn Hotel Mode OFF, reset the TV to
factory defaults, run a new blind channel scan and turn
Hotel Mode back ON, then export a new clean TLL file.
</value>
</data>
<data name="MainForm_btnResetChannelData_Click_Message" xml:space="preserve">
<value>WARNING: All analog, DVB-C/T and DVB-S channel and transponder data will be deleted.
You will have to run a full channel scan after loading this file into your TV.
Proceed?</value>
</data>
<data name="MainForm_btnResetChannelData_Click_Caption" xml:space="preserve">
<value>Delete all channel data</value>
</data>
<data name="MainForm_miRestoreOriginal_Message" xml:space="preserve">
<value>Unable to copy .bak file to {0}</value>
</data>
<data name="MainForm_miRestoreOriginal_ItemClick_NoBackup" xml:space="preserve">
<value>No backup file found: {0}</value>
</data>
<data name="MainForm_miRestoreOriginal_ItemClick_Confirm" xml:space="preserve">
<value>You are about to restore the backup file. All changes will be lost!
Do you want to continue?</value>
</data>
<data name="MainForm_ShowOpenReferenceFileDialog_Title" xml:space="preserve">
<value>Open Reference List</value>
</data>
<data name="MainForm_ShowOpenReferenceFileDialog_Filter" xml:space="preserve">
<value>ChanSort Reference List|*.csv|SamToolBox Reference List|*.chl|All Reference Lists|*.csv;*.chl</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="Donate" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\btn_donateCC_LG.gif;System.Drawing.Bitmap, System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="paypal_button" type="System.Resources.ResXFileRef, System.Windows.Forms">
<value>..\Resources\paypal-button.txt;System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089;Windows-1252</value>
</data>
<data name="MainForm_SaveFiles_ErrorMsg" xml:space="preserve">
<value>There was an error saving the file. Please make sure that
- you have write permission on the file
- the file is not open in another program
The error message is:
</value>
</data>
<data name="MainForm_SaveFiles_ErrorTitle" xml:space="preserve">
<value>File write error</value>
</data>
</root>

View File

@@ -0,0 +1,266 @@
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by a tool.
// Runtime Version:4.0.30319.586
//
// Changes to this file may cause incorrect behavior and will be lost if
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace ChanSort.Ui.Properties {
[global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "10.0.0.0")]
internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase {
private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
public static Settings Default {
get {
return defaultInstance;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string InputTLL {
get {
return ((string)(this["InputTLL"]));
}
set {
this["InputTLL"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("0")]
public int InputListRowHandle {
get {
return ((int)(this["InputListRowHandle"]));
}
set {
this["InputListRowHandle"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("0")]
public int OutputListRowHandle {
get {
return ((int)(this["OutputListRowHandle"]));
}
set {
this["OutputListRowHandle"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string OutputListLayout {
get {
return ((string)(this["OutputListLayout"]));
}
set {
this["OutputListLayout"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string InputFilterName {
get {
return ((string)(this["InputFilterName"]));
}
set {
this["InputFilterName"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string InputFilterOldSlot {
get {
return ((string)(this["InputFilterOldSlot"]));
}
set {
this["InputFilterOldSlot"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string InputFilterCrypt {
get {
return ((string)(this["InputFilterCrypt"]));
}
set {
this["InputFilterCrypt"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string InputFilterNewSlot {
get {
return ((string)(this["InputFilterNewSlot"]));
}
set {
this["InputFilterNewSlot"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string InputFilterChannel {
get {
return ((string)(this["InputFilterChannel"]));
}
set {
this["InputFilterChannel"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string InputFilterUid {
get {
return ((string)(this["InputFilterUid"]));
}
set {
this["InputFilterUid"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string OutputFilterName {
get {
return ((string)(this["OutputFilterName"]));
}
set {
this["OutputFilterName"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string Language {
get {
return ((string)(this["Language"]));
}
set {
this["Language"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string OutputFilterNewSlot {
get {
return ((string)(this["OutputFilterNewSlot"]));
}
set {
this["OutputFilterNewSlot"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string Encoding {
get {
return ((string)(this["Encoding"]));
}
set {
this["Encoding"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("False")]
public bool HideLeftList {
get {
return ((bool)(this["HideLeftList"]));
}
set {
this["HideLeftList"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("0, 0")]
public global::System.Drawing.Size WindowSize {
get {
return ((global::System.Drawing.Size)(this["WindowSize"]));
}
set {
this["WindowSize"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string InputGridLayoutAnalog {
get {
return ((string)(this["InputGridLayoutAnalog"]));
}
set {
this["InputGridLayoutAnalog"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string InputGridLayoutDvbCT {
get {
return ((string)(this["InputGridLayoutDvbCT"]));
}
set {
this["InputGridLayoutDvbCT"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("")]
public string InputGridLayoutDvbS {
get {
return ((string)(this["InputGridLayoutDvbS"]));
}
set {
this["InputGridLayoutDvbS"] = value;
}
}
[global::System.Configuration.UserScopedSettingAttribute()]
[global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
[global::System.Configuration.DefaultSettingValueAttribute("0")]
public int LeftPanelWidth {
get {
return ((int)(this["LeftPanelWidth"]));
}
set {
this["LeftPanelWidth"] = value;
}
}
}
}

View File

@@ -0,0 +1,66 @@
<?xml version='1.0' encoding='utf-8'?>
<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)" GeneratedClassNamespace="ChanSort.Ui.Properties" GeneratedClassName="Settings">
<Profiles />
<Settings>
<Setting Name="InputTLL" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="InputListRowHandle" Type="System.Int32" Scope="User">
<Value Profile="(Default)">0</Value>
</Setting>
<Setting Name="OutputListRowHandle" Type="System.Int32" Scope="User">
<Value Profile="(Default)">0</Value>
</Setting>
<Setting Name="OutputListLayout" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="InputFilterName" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="InputFilterOldSlot" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="InputFilterCrypt" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="InputFilterNewSlot" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="InputFilterChannel" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="InputFilterUid" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="OutputFilterName" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Language" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="OutputFilterNewSlot" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="Encoding" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="HideLeftList" Type="System.Boolean" Scope="User">
<Value Profile="(Default)">False</Value>
</Setting>
<Setting Name="WindowSize" Type="System.Drawing.Size" Scope="User">
<Value Profile="(Default)">0, 0</Value>
</Setting>
<Setting Name="InputGridLayoutAnalog" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="InputGridLayoutDvbCT" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="InputGridLayoutDvbS" Type="System.String" Scope="User">
<Value Profile="(Default)" />
</Setting>
<Setting Name="LeftPanelWidth" Type="System.Int32" Scope="User">
<Value Profile="(Default)">0</Value>
</Setting>
</Settings>
</SettingsFile>

View File

@@ -0,0 +1,7 @@
DevExpress.XtraGrid.GridControl, DevExpress.XtraGrid.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.CheckEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.ButtonEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.LabelControl, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraEditors.ComboBoxEdit, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraSplashScreen.SplashScreenManager, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a
DevExpress.XtraBars.BarManager, DevExpress.XtraBars.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -0,0 +1,19 @@
<html>
<body>
<p style="font-family:Arial;font-size:12pt">PayPal donation page is being opened...</p>
<p></p>
<p style="font-family:Arial;font-size:12pt">PayPal Spendenseite wird ge&ouml;ffnet...</p>
<form action="https://www.paypal.com/cgi-bin/webscr" method="post">
<input type="hidden" name="cmd" value="_s-xclick">
<input type="hidden" name="encrypted" value="-----BEGIN PKCS7-----MIIHVwYJKoZIhvcNAQcEoIIHSDCCB0QCAQExggEwMIIBLAIBADCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20CAQAwDQYJKoZIhvcNAQEBBQAEgYB29ud0WRAkISd+eaatpTPZIDm+OSKMJPalTPRx13VaUQ/z9K7ycjOF8JShlbTCo/vNJkNbaPZfWY1OD+q9t1QHPdwTSOciExPawGcqgiqqhLBLaKlLdmNikJA6fUuObg3Bk4jYR8m0TthCwK7Tb2A7GfBPHxSGh3GhriGv/SoTJjELMAkGBSsOAwIaBQAwgdQGCSqGSIb3DQEHATAUBggqhkiG9w0DBwQIH0I94374C/qAgbBmDh4y8T56kdAu+uuRQdqYH9OQxu/Fj7UT/ntZSLP2KjkqoMtjDhiJ3VJ3clFIxpOgGUVegTZzxZH9VJs8hep08n+34WRmpzm9V7erbvS5V2WNLvCAu/PHij717tS3dkH7QLuNhn3X1CHEz2i//00OynPjelOkvFrGrXCFvBhIKLYFCexMO4EIWq7zcRbkNHF61ttbhZvcav4fJBvTc/LcZgL4julfQfgdUVyVqekag6CCA4cwggODMIIC7KADAgECAgEAMA0GCSqGSIb3DQEBBQUAMIGOMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC1BheVBhbCBJbmMuMRMwEQYDVQQLFApsaXZlX2NlcnRzMREwDwYDVQQDFAhsaXZlX2FwaTEcMBoGCSqGSIb3DQEJARYNcmVAcGF5cGFsLmNvbTAeFw0wNDAyMTMxMDEzMTVaFw0zNTAyMTMxMDEzMTVaMIGOMQswCQYDVQQGEwJVUzELMAkGA1UECBMCQ0ExFjAUBgNVBAcTDU1vdW50YWluIFZpZXcxFDASBgNVBAoTC1BheVBhbCBJbmMuMRMwEQYDVQQLFApsaXZlX2NlcnRzMREwDwYDVQQDFAhsaXZlX2FwaTEcMBoGCSqGSIb3DQEJARYNcmVAcGF5cGFsLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwUdO3fxEzEtcnI7ZKZL412XvZPugoni7i7D7prCe0AtaHTc97CYgm7NsAtJyxNLixmhLV8pyIEaiHXWAh8fPKW+R017+EmXrr9EaquPmsVvTywAAE1PMNOKqo2kl4Gxiz9zZqIajOm1fZGWcGS0f5JQ2kBqNbvbg2/Za+GJ/qwUCAwEAAaOB7jCB6zAdBgNVHQ4EFgQUlp98u8ZvF71ZP1LXChvsENZklGswgbsGA1UdIwSBszCBsIAUlp98u8ZvF71ZP1LXChvsENZklGuhgZSkgZEwgY4xCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJDQTEWMBQGA1UEBxMNTW91bnRhaW4gVmlldzEUMBIGA1UEChMLUGF5UGFsIEluYy4xEzARBgNVBAsUCmxpdmVfY2VydHMxETAPBgNVBAMUCGxpdmVfYXBpMRwwGgYJKoZIhvcNAQkBFg1yZUBwYXlwYWwuY29tggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAgV86VpqAWuXvX6Oro4qJ1tYVIT5DgWpE692Ag422H7yRIr/9j/iKG4Thia/Oflx4TdL+IFJBAyPK9v6zZNZtBgPBynXb048hsP16l2vi0k5Q2JKiPDsEfBhGI+HnxLXEaUWAcVfCsQFvd2A1sxRr67ip5y2wwBelUecP3AjJ+YcxggGaMIIBlgIBATCBlDCBjjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAkNBMRYwFAYDVQQHEw1Nb3VudGFpbiBWaWV3MRQwEgYDVQQKEwtQYXlQYWwgSW5jLjETMBEGA1UECxQKbGl2ZV9jZXJ0czERMA8GA1UEAxQIbGl2ZV9hcGkxHDAaBgkqhkiG9w0BCQEWDXJlQHBheXBhbC5jb20CAQAwCQYFKw4DAhoFAKBdMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEwHAYJKoZIhvcNAQkFMQ8XDTEyMTIyODE5NTcyNVowIwYJKoZIhvcNAQkEMRYEFNxiS60sHIy0aM4C8sE2CPVtAGo4MA0GCSqGSIb3DQEBAQUABIGAiv/ZxTpzVVskQUfZQIrQ9td0k4vtAVcsvz7UMn2L9Veb0Io65t4amUU3BplRlnw7k+nALFZ9ILYxvzTJJj7HP6ZFBru9Be/+XObU/zm0dlcaTkzQP22ZgFLZZxK0KVuAz8agShap2fVoLG6JII0q7ggDYHfILUrd4H9i2FWWdMQ=-----END PKCS7-----
">
<input type="image" src="https://www.paypalobjects.com/de_DE/i/scr/pixel.gif" border="0" name="submit" alt="">
<img alt="" border="0" src="https://www.paypalobjects.com/de_DE/i/scr/pixel.gif" width="1" height="1">
</form>
<script type="text/javascript">
<!--//
document.forms[0].submit();
//-->
</script>
</body>
</html>

28
ChanSort.Ui/Settings.cs Normal file
View File

@@ -0,0 +1,28 @@
namespace ChanSort.Ui.Properties {
// This class allows you to handle specific events on the settings class:
// The SettingChanging event is raised before a setting's value is changed.
// The PropertyChanged event is raised after a setting's value is changed.
// The SettingsLoaded event is raised after the setting values are loaded.
// The SettingsSaving event is raised before the setting values are saved.
internal sealed partial class Settings {
public Settings() {
// // To add event handlers for saving and changing settings, uncomment the lines below:
//
// this.SettingChanging += this.SettingChangingEventHandler;
//
// this.SettingsSaving += this.SettingsSavingEventHandler;
//
}
private void SettingChangingEventHandler(object sender, System.Configuration.SettingChangingEventArgs e) {
// Add code to handle the SettingChangingEvent event here.
}
private void SettingsSavingEventHandler(object sender, System.ComponentModel.CancelEventArgs e) {
// Add code to handle the SettingsSaving event here.
}
}
}

80
ChanSort.Ui/WaitForm1.Designer.cs generated Normal file
View File

@@ -0,0 +1,80 @@
namespace ChanSort.Ui
{
partial class WaitForm1
{
/// <summary>
/// Required designer variable.
/// </summary>
private System.ComponentModel.IContainer components = null;
/// <summary>
/// Clean up any resources being used.
/// </summary>
/// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
protected override void Dispose(bool disposing)
{
if (disposing && (components != null))
{
components.Dispose();
}
base.Dispose(disposing);
}
#region Windows Form Designer generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(WaitForm1));
this.progressPanel1 = new DevExpress.XtraWaitForm.ProgressPanel();
this.tableLayoutPanel1 = new System.Windows.Forms.TableLayoutPanel();
this.tableLayoutPanel1.SuspendLayout();
this.SuspendLayout();
//
// progressPanel1
//
resources.ApplyResources(this.progressPanel1, "progressPanel1");
this.progressPanel1.Appearance.BackColor = ((System.Drawing.Color)(resources.GetObject("progressPanel1.Appearance.BackColor")));
this.progressPanel1.Appearance.GradientMode = ((System.Drawing.Drawing2D.LinearGradientMode)(resources.GetObject("progressPanel1.Appearance.GradientMode")));
this.progressPanel1.Appearance.Image = ((System.Drawing.Image)(resources.GetObject("progressPanel1.Appearance.Image")));
this.progressPanel1.Appearance.Options.UseBackColor = true;
this.progressPanel1.AppearanceCaption.Font = ((System.Drawing.Font)(resources.GetObject("resource.Font")));
this.progressPanel1.AppearanceCaption.GradientMode = ((System.Drawing.Drawing2D.LinearGradientMode)(resources.GetObject("resource.GradientMode")));
this.progressPanel1.AppearanceCaption.Image = ((System.Drawing.Image)(resources.GetObject("resource.Image")));
this.progressPanel1.AppearanceCaption.Options.UseFont = true;
this.progressPanel1.AppearanceDescription.Font = ((System.Drawing.Font)(resources.GetObject("resource.Font1")));
this.progressPanel1.AppearanceDescription.GradientMode = ((System.Drawing.Drawing2D.LinearGradientMode)(resources.GetObject("resource.GradientMode1")));
this.progressPanel1.AppearanceDescription.Image = ((System.Drawing.Image)(resources.GetObject("resource.Image1")));
this.progressPanel1.AppearanceDescription.Options.UseFont = true;
this.progressPanel1.ImageHorzOffset = 20;
this.progressPanel1.Name = "progressPanel1";
//
// tableLayoutPanel1
//
resources.ApplyResources(this.tableLayoutPanel1, "tableLayoutPanel1");
this.tableLayoutPanel1.BackColor = System.Drawing.Color.Transparent;
this.tableLayoutPanel1.Controls.Add(this.progressPanel1, 0, 0);
this.tableLayoutPanel1.Name = "tableLayoutPanel1";
//
// WaitForm1
//
resources.ApplyResources(this, "$this");
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
this.Controls.Add(this.tableLayoutPanel1);
this.DoubleBuffered = true;
this.Name = "WaitForm1";
this.tableLayoutPanel1.ResumeLayout(false);
this.ResumeLayout(false);
this.PerformLayout();
}
#endregion
private DevExpress.XtraWaitForm.ProgressPanel progressPanel1;
private System.Windows.Forms.TableLayoutPanel tableLayoutPanel1;
}
}

37
ChanSort.Ui/WaitForm1.cs Normal file
View File

@@ -0,0 +1,37 @@
using System;
using DevExpress.XtraWaitForm;
namespace ChanSort.Ui
{
public partial class WaitForm1 : WaitForm
{
public WaitForm1()
{
InitializeComponent();
this.progressPanel1.AutoHeight = true;
}
#region Overrides
public override void SetCaption(string caption)
{
base.SetCaption(caption);
this.progressPanel1.Caption = caption;
}
public override void SetDescription(string description)
{
base.SetDescription(description);
this.progressPanel1.Description = description;
}
public override void ProcessCommand(Enum cmd, object arg)
{
base.ProcessCommand(cmd, arg);
}
#endregion
public enum WaitFormCommand
{
}
}
}

View File

@@ -0,0 +1,126 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<data name="progressPanel1.Caption" xml:space="preserve">
<value>Bitte um Geduld</value>
</data>
<data name="progressPanel1.Description" xml:space="preserve">
<value>TV Senderliste wird gespeichert...</value>
</data>
</root>

256
ChanSort.Ui/WaitForm1.resx Normal file
View File

@@ -0,0 +1,256 @@
<?xml version="1.0" encoding="utf-8"?>
<root>
<!--
Microsoft ResX Schema
Version 2.0
The primary goals of this format is to allow a simple XML format
that is mostly human readable. The generation and parsing of the
various data types are done through the TypeConverter classes
associated with the data types.
Example:
... ado.net/XML headers & schema ...
<resheader name="resmimetype">text/microsoft-resx</resheader>
<resheader name="version">2.0</resheader>
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
<value>[base64 mime encoded serialized .NET Framework object]</value>
</data>
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
<comment>This is a comment</comment>
</data>
There are any number of "resheader" rows that contain simple
name/value pairs.
Each data row contains a name, and value. The row also contains a
type or mimetype. Type corresponds to a .NET class that support
text/value conversion through the TypeConverter architecture.
Classes that don't support this are serialized and stored with the
mimetype set.
The mimetype is used for serialized objects, and tells the
ResXResourceReader how to depersist the object. This is currently not
extensible. For a given mimetype the value must be set accordingly:
Note - application/x-microsoft.net.object.binary.base64 is the format
that the ResXResourceWriter will generate, however the reader can
read any of the formats listed below.
mimetype: application/x-microsoft.net.object.binary.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.soap.base64
value : The object must be serialized with
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
: and then encoded with base64 encoding.
mimetype: application/x-microsoft.net.object.bytearray.base64
value : The object must be serialized into a byte array
: using a System.ComponentModel.TypeConverter
: and then encoded with base64 encoding.
-->
<xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
<xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
<xsd:element name="root" msdata:IsDataSet="true">
<xsd:complexType>
<xsd:choice maxOccurs="unbounded">
<xsd:element name="metadata">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" />
</xsd:sequence>
<xsd:attribute name="name" use="required" type="xsd:string" />
<xsd:attribute name="type" type="xsd:string" />
<xsd:attribute name="mimetype" type="xsd:string" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="assembly">
<xsd:complexType>
<xsd:attribute name="alias" type="xsd:string" />
<xsd:attribute name="name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
<xsd:element name="data">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
<xsd:attribute ref="xml:space" />
</xsd:complexType>
</xsd:element>
<xsd:element name="resheader">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:choice>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<resheader name="resmimetype">
<value>text/microsoft-resx</value>
</resheader>
<resheader name="version">
<value>2.0</value>
</resheader>
<resheader name="reader">
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<resheader name="writer">
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</resheader>
<assembly alias="mscorlib" name="mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="tableLayoutPanel1.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="progressPanel1.Description" xml:space="preserve">
<value>Generating TV data file...</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="$this.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<assembly alias="System.Drawing" name="System.Drawing, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
<data name="$this.AutoScaleDimensions" type="System.Drawing.SizeF, System.Drawing">
<value>6, 13</value>
</data>
<data name="resource.Font" type="System.Drawing.Font, System.Drawing">
<value>Microsoft Sans Serif, 12pt</value>
</data>
<data name="$this.AutoSize" type="System.Boolean, mscorlib">
<value>True</value>
</data>
<data name="progressPanel1.Text" xml:space="preserve">
<value>progressPanel1</value>
</data>
<data name="tableLayoutPanel1.Padding" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 14, 0, 14</value>
</data>
<data name="&gt;&gt;$this.Type" xml:space="preserve">
<value>DevExpress.XtraWaitForm.WaitForm, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="&gt;&gt;$this.Name" xml:space="preserve">
<value>WaitForm1</value>
</data>
<data name="tableLayoutPanel1.TabIndex" type="System.Int32, mscorlib">
<value>1</value>
</data>
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<data name="progressPanel1.Appearance.Image" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="progressPanel1.Margin" type="System.Windows.Forms.Padding, System.Windows.Forms">
<value>0, 3, 0, 3</value>
</data>
<data name="resource.Image" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="$this.MinimumSize" type="System.Drawing.Size, System.Drawing">
<value>246, 0</value>
</data>
<data name="progressPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="tableLayoutPanel1.ColumnCount" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="progressPanel1.Appearance.BackColor" type="System.Drawing.Color, System.Drawing">
<value>Transparent</value>
</data>
<data name="tableLayoutPanel1.LayoutSettings" type="System.Windows.Forms.TableLayoutSettings, System.Windows.Forms">
<value>&lt;?xml version="1.0" encoding="utf-16"?&gt;&lt;TableLayoutSettings&gt;&lt;Controls&gt;&lt;Control Name="progressPanel1" Row="0" RowSpan="1" Column="0" ColumnSpan="1" /&gt;&lt;/Controls&gt;&lt;Columns Styles="Absolute,246" /&gt;&lt;Rows Styles="Percent,100" /&gt;&lt;/TableLayoutSettings&gt;</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Parent" xml:space="preserve">
<value>$this</value>
</data>
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
<value>246, 73</value>
</data>
<data name="tableLayoutPanel1.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
<value>Fill</value>
</data>
<data name="$this.StartPosition" type="System.Windows.Forms.FormStartPosition, System.Windows.Forms">
<value>Manual</value>
</data>
<data name="progressPanel1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 17</value>
</data>
<data name="tableLayoutPanel1.Location" type="System.Drawing.Point, System.Drawing">
<value>0, 0</value>
</data>
<data name="&gt;&gt;progressPanel1.Parent" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<data name="tableLayoutPanel1.AutoSizeMode" type="System.Windows.Forms.AutoSizeMode, System.Windows.Forms">
<value>GrowAndShrink</value>
</data>
<data name="&gt;&gt;progressPanel1.Name" xml:space="preserve">
<value>progressPanel1</value>
</data>
<data name="progressPanel1.TabIndex" type="System.Int32, mscorlib">
<value>0</value>
</data>
<data name="resource.Image1" type="System.Resources.ResXNullRef, System.Windows.Forms">
<value />
</data>
<data name="&gt;&gt;progressPanel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="tableLayoutPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>246, 73</value>
</data>
<data name="progressPanel1.Size" type="System.Drawing.Size, System.Drawing">
<value>246, 39</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.ZOrder" xml:space="preserve">
<value>0</value>
</data>
<data name="resource.GradientMode1" type="System.Drawing.Drawing2D.LinearGradientMode, System.Drawing">
<value>Horizontal</value>
</data>
<data name="&gt;&gt;progressPanel1.Type" xml:space="preserve">
<value>DevExpress.XtraWaitForm.ProgressPanel, DevExpress.XtraEditors.v12.2, Version=12.2.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a</value>
</data>
<data name="progressPanel1.Appearance.GradientMode" type="System.Drawing.Drawing2D.LinearGradientMode, System.Drawing">
<value>Horizontal</value>
</data>
<data name="resource.Font1" type="System.Drawing.Font, System.Drawing">
<value>Microsoft Sans Serif, 8.25pt</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Type" xml:space="preserve">
<value>System.Windows.Forms.TableLayoutPanel, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
</data>
<data name="tableLayoutPanel1.RowCount" type="System.Int32, mscorlib">
<value>1</value>
</data>
<data name="$this.Text" xml:space="preserve">
<value>Form1</value>
</data>
<data name="resource.GradientMode" type="System.Drawing.Drawing2D.LinearGradientMode, System.Drawing">
<value>Horizontal</value>
</data>
<data name="&gt;&gt;tableLayoutPanel1.Name" xml:space="preserve">
<value>tableLayoutPanel1</value>
</data>
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<value>True</value>
</metadata>
</root>

114
ChanSort.Ui/app.config Normal file
View File

@@ -0,0 +1,114 @@
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="userSettings" type="System.Configuration.UserSettingsGroup, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" >
<section name="ChanSort.Ui.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
<section name="GUI.Properties.Settings" type="System.Configuration.ClientSettingsSection, System, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" allowExeDefinition="MachineToLocalUser" requirePermission="false" />
</sectionGroup>
</configSections>
<startup><supportedRuntime version="v2.0.50727" sku="Client"/></startup><userSettings>
<ChanSort.Ui.Properties.Settings>
<setting name="InputTLL" serializeAs="String">
<value />
</setting>
<setting name="InputListRowHandle" serializeAs="String">
<value>0</value>
</setting>
<setting name="OutputListRowHandle" serializeAs="String">
<value>0</value>
</setting>
<setting name="OutputListLayout" serializeAs="String">
<value />
</setting>
<setting name="InputFilterName" serializeAs="String">
<value />
</setting>
<setting name="InputFilterOldSlot" serializeAs="String">
<value />
</setting>
<setting name="InputFilterCrypt" serializeAs="String">
<value />
</setting>
<setting name="InputFilterNewSlot" serializeAs="String">
<value />
</setting>
<setting name="InputFilterChannel" serializeAs="String">
<value />
</setting>
<setting name="InputFilterUid" serializeAs="String">
<value />
</setting>
<setting name="OutputFilterName" serializeAs="String">
<value />
</setting>
<setting name="Language" serializeAs="String">
<value />
</setting>
<setting name="OutputFilterNewSlot" serializeAs="String">
<value />
</setting>
<setting name="Encoding" serializeAs="String">
<value />
</setting>
<setting name="HideLeftList" serializeAs="String">
<value>False</value>
</setting>
<setting name="WindowSize" serializeAs="String">
<value>0, 0</value>
</setting>
<setting name="InputGridLayoutAnalog" serializeAs="String">
<value />
</setting>
<setting name="InputGridLayoutDvbCT" serializeAs="String">
<value />
</setting>
<setting name="InputGridLayoutDvbS" serializeAs="String">
<value />
</setting>
<setting name="LeftPanelWidth" serializeAs="String">
<value>0</value>
</setting>
</ChanSort.Ui.Properties.Settings>
<GUI.Properties.Settings>
<setting name="InputTLL" serializeAs="String">
<value />
</setting>
<setting name="OutputTLL" serializeAs="String">
<value />
</setting>
<setting name="InputListRowHandle" serializeAs="String">
<value>0</value>
</setting>
<setting name="OutputListRowHandle" serializeAs="String">
<value>0</value>
</setting>
<setting name="InputListLayout" serializeAs="String">
<value />
</setting>
<setting name="OutputListLayout" serializeAs="String">
<value />
</setting>
<setting name="InputFilterName" serializeAs="String">
<value />
</setting>
<setting name="InputFilterOldSlot" serializeAs="String">
<value />
</setting>
<setting name="InputFilterCrypt" serializeAs="String">
<value />
</setting>
<setting name="InputFilterNewSlot" serializeAs="String">
<value />
</setting>
<setting name="InputFilterChannel" serializeAs="String">
<value />
</setting>
<setting name="InputFilterUid" serializeAs="String">
<value />
</setting>
<setting name="OutputFilterName" serializeAs="String">
<value />
</setting>
</GUI.Properties.Settings>
</userSettings>
</configuration>

BIN
ChanSort.Ui/app.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 541 B

Some files were not shown because too many files have changed in this diff Show More