mirror of
https://github.com/reactos/reactos.git
synced 2024-12-27 09:34:43 +00:00
9dab4509fa
svn path=/trunk/; revision=13064
175 lines
4.3 KiB
C#
175 lines
4.3 KiB
C#
using System;
|
|
using System.IO;
|
|
|
|
namespace HtmlHelp.ChmDecoding
|
|
{
|
|
/// <summary>
|
|
/// The class <c>UrlTableEntry</c> stores data for an URL-Table entry
|
|
/// </summary>
|
|
internal sealed class UrlTableEntry
|
|
{
|
|
/// <summary>
|
|
/// Internal member storing the offset of this entry
|
|
/// </summary>
|
|
private int _entryOffset = 0;
|
|
/// <summary>
|
|
/// Internal member storing a unique id
|
|
/// </summary>
|
|
private uint _uniqueID = 0;
|
|
/// <summary>
|
|
/// Internal member storing the topics index
|
|
/// </summary>
|
|
private int _topicsIndex = 0;
|
|
/// <summary>
|
|
/// Internal member storing the offset in the urlstr table
|
|
/// </summary>
|
|
private int _urlStrOffset = 0;
|
|
/// <summary>
|
|
/// Internal member storing the associated chmfile object
|
|
/// </summary>
|
|
private CHMFile _associatedFile = null;
|
|
|
|
/// <summary>
|
|
/// Constructor of the class
|
|
/// </summary>
|
|
/// <param name="uniqueID">unique id</param>
|
|
/// <param name="entryOffset">offset of the entry</param>
|
|
/// <param name="topicIndex">topic index</param>
|
|
/// <param name="urlstrOffset">urlstr offset for filename</param>
|
|
public UrlTableEntry(uint uniqueID, int entryOffset, int topicIndex, int urlstrOffset) : this(uniqueID, entryOffset, topicIndex, urlstrOffset, null)
|
|
{
|
|
}
|
|
|
|
/// <summary>
|
|
/// Constructor of the class
|
|
/// </summary>
|
|
/// <param name="uniqueID">unique id</param>
|
|
/// <param name="entryOffset">offset of the entry</param>
|
|
/// <param name="topicIndex">topic index</param>
|
|
/// <param name="urlstrOffset">urlstr offset for filename</param>
|
|
/// <param name="associatedFile">associated chm file</param>
|
|
internal UrlTableEntry(uint uniqueID, int entryOffset, int topicIndex, int urlstrOffset, CHMFile associatedFile)
|
|
{
|
|
_uniqueID = uniqueID;
|
|
_entryOffset = entryOffset;
|
|
_topicsIndex = topicIndex;
|
|
_urlStrOffset = urlstrOffset;
|
|
_associatedFile = associatedFile;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Standard constructor
|
|
/// </summary>
|
|
internal UrlTableEntry()
|
|
{
|
|
}
|
|
|
|
#region Data dumping
|
|
/// <summary>
|
|
/// Dump the class data to a binary writer
|
|
/// </summary>
|
|
/// <param name="writer">writer to write the data</param>
|
|
internal void Dump(ref BinaryWriter writer)
|
|
{
|
|
writer.Write( _urlStrOffset );
|
|
writer.Write( _entryOffset );
|
|
writer.Write( _topicsIndex );
|
|
writer.Write( _urlStrOffset );
|
|
}
|
|
|
|
/// <summary>
|
|
/// Reads the object data from a dump store
|
|
/// </summary>
|
|
/// <param name="reader">reader to read the data</param>
|
|
internal void ReadDump(ref BinaryReader reader)
|
|
{
|
|
_urlStrOffset = reader.ReadInt32();
|
|
_entryOffset = reader.ReadInt32();
|
|
_topicsIndex = reader.ReadInt32();
|
|
_urlStrOffset = reader.ReadInt32();
|
|
}
|
|
|
|
/// <summary>
|
|
/// Sets the associated CHMFile instance
|
|
/// </summary>
|
|
/// <param name="associatedFile">instance to set</param>
|
|
internal void SetCHMFile(CHMFile associatedFile)
|
|
{
|
|
_associatedFile = associatedFile;
|
|
}
|
|
#endregion
|
|
|
|
/// <summary>
|
|
/// Gets the unique id of the entry
|
|
/// </summary>
|
|
internal uint UniqueID
|
|
{
|
|
get {return _uniqueID; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the offset of the entry
|
|
/// </summary>
|
|
internal int EntryOffset
|
|
{
|
|
get {return _entryOffset; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the topics index
|
|
/// </summary>
|
|
internal int TopicIndex
|
|
{
|
|
get {return _topicsIndex; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the urlstr offset
|
|
/// </summary>
|
|
internal int UrlstrOffset
|
|
{
|
|
get { return _urlStrOffset; }
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the url of the entry
|
|
/// </summary>
|
|
public string URL
|
|
{
|
|
get
|
|
{
|
|
if(_associatedFile == null)
|
|
return String.Empty;
|
|
|
|
if(_associatedFile.UrlstrFile == null)
|
|
return String.Empty;
|
|
|
|
string sTemp = (string)_associatedFile.UrlstrFile.GetURLatOffset( _urlStrOffset );
|
|
|
|
if( sTemp == null)
|
|
return String.Empty;
|
|
|
|
return sTemp;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Gets the associated topic for this url entry
|
|
/// </summary>
|
|
internal TopicEntry Topic
|
|
{
|
|
get
|
|
{
|
|
if(_associatedFile == null)
|
|
return null;
|
|
|
|
if(_associatedFile.TopicsFile == null)
|
|
return null;
|
|
|
|
TopicEntry tentry = _associatedFile.TopicsFile[ _topicsIndex*16 ];
|
|
|
|
return tentry;
|
|
}
|
|
}
|
|
}
|
|
}
|