summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/DataTypes.pas71
-rw-r--r--src/HelpFileHeader.pas115
-rw-r--r--src/IPFFileFormatUnit.pas439
-rw-r--r--src/docview.lpi85
-rw-r--r--src/docview.lpr4
5 files changed, 481 insertions, 233 deletions
diff --git a/src/DataTypes.pas b/src/DataTypes.pas
deleted file mode 100644
index d5d97503..00000000
--- a/src/DataTypes.pas
+++ /dev/null
@@ -1,71 +0,0 @@
-Unit DataTypes;
-
-{$mode objfpc}{$H+}
-{$ASMMODE intel}
-
-// NewView - a new OS/2 Help Viewer
-// Copyright 2001 Aaron Lawrence (aaronl at consultant dot com)
-// This software is released under the Gnu Public License - see readme.txt
-
-Interface
-
-// Just defines various types useful in manipulating help files.
-
-type
- int32 = longword;
- int16 = word;
- int8 = byte;
- pInt16 = ^int16;
- pInt32 = ^int32;
- pInt8 = ^byte;
- ULong = Cardinal;
-
- PCharArray = packed array[ 0..0 ] of PCHar;
- Int32Array = packed array[ 0..0 ] of Int32;
- Int16Array = packed array[ 0..0 ] of Int16;
- Int8Array = packed array[ 0..0 ] of Int8;
-
- PCharArrayPointer = ^PCharArray;
- Int32ArrayPointer = ^Int32Array;
- Int16ArrayPointer = ^Int16Array;
- Int8ArrayPointer = ^Int8Array;
-
- TBooleanArray = array[ 0..0 ] of boolean;
- BooleanArrayPointer = ^TBooleanArray;
-
- TProgressCallback = procedure(n, outof: integer; AMessage: string) of object;
-
-
-procedure FillInt32Array( pArray: Int32ArrayPointer;
- Size: longint;
- Value: Int32 );
-
-Implementation
-
-// This is a nice fast implementation of filling an
-// array of dwords (Int32/longword)
-procedure FillInt32Array( pArray: Int32ArrayPointer;
- Size: longint;
- Value: Int32 );
-var
- i: integer;
-begin
- assert( Size > 0 );
- if Size < 1 then
- Exit;
- for i := 0 to Size-1 do
- begin
- pArray^[i] := Value;
- end;
-
- //Asm
- // Mov EAX, Value
- // Mov EDI, pArray
- // Mov ECX, Size
- // CLD // direction = up
- // REP STOSD // store double word, until ECX = 0
- //End;
-end;
-
-Initialization
-End.
diff --git a/src/HelpFileHeader.pas b/src/HelpFileHeader.pas
deleted file mode 100644
index 799547d2..00000000
--- a/src/HelpFileHeader.pas
+++ /dev/null
@@ -1,115 +0,0 @@
-Unit HelpFileHeader;
-
-{$mode objfpc}{$H+}
-
-// NewView - a new OS/2 Help Viewer
-// Copyright 2001 Aaron Lawrence (aaronl at consultant dot com)
-// This software is released under the Gnu Public License - see readme.txt
-
-Interface
-
-// Definition of IPF file header and other structures
-
-uses
- DataTypes;
-
-Type
- THelpFileHeader = packed record
- ID: int16; // ID magic word (5348h = "HS")
- unknown1: byte; // unknown purpose, could be third letter of ID
- flags: byte; // probably a flag word...
- // bit 0: set if INF style file
- // bit 4: set if HLP style file
- // patching this byte allows reading HLP files
- // using the VIEW command, while help files
- // seem to work with INF settings here as well.
- hdrsize: word; // total size of header
- unknown2: word; // unknown purpose
- ntoc: int16; // number of entries in the tocarray
- tocstart: int32; // file offset of the start of the toc
- toclen: int32; // number of bytes in file occupied by the toc
- tocoffsetsstart: int32; // file offset of the start of array of toc offsets
- nres: int16; // number of panels with ressource numbers
- resstart: int32; // 32 bit file offset of ressource number table
- nname: int16; // number of panels with textual name
- namestart: int32; // 32 bit file offset to panel name table
- nindex: int16; // number of index entries
- indexstart: int32; // 32 bit file offset to index table
- indexlen: int32; // size of index table
- unknown3: array[0..9] of byte; // unknown purpose
- searchstart: int32; // 32 bit file offset of full text search table
- searchlen: int32; // size of full text search table
- nslots: int16; // number of "slots"
- slotsstart: int32; // file offset of the slots array
- dictlen: int32; // number of bytes occupied by the "dictionary"
- ndict: int16; // number of entries in the dictionary
- dictstart: int32; // file offset of the start of the dictionary
- imgstart: int32; // file offset of image data
- unknown4: byte; // unknown purpose
- nlsstart: int32; // 32 bit file offset of NLS table
- nlslen: int32; // size of NLS table
- extstart: int32; // 32 bit file offset of extended data block
- reserved: array[0..11] of byte; // for future use. set to zero.
- title: array[ 0..47 ] of char; // ASCII title of database
- end;
- pTHelpFileHeader = ^THelpFileHeader;
-
-Type
- TTOCEntryStart = packed record
- length: int8; // length of the entry including this byte
- flags: int8; // flag byte, description folows (MSB first)
- // bit7 haschildren; // following nodes are a higher level
- // bit6 hidden; // this entry doesn't appear in VIEW.EXE's
- // presentation of the toc
- // bit5 extended; // extended entry format
- // bit4 stuff; // ??
- // int4 level; // nesting level
- numSlots: int8; // number of "slots" occupied by the text for this toc entry
- Slots : record end;
- end;
- pTTOCEntryStart = ^TTOCEntryStart;
-
- TExtendedTOCEntry = packed record
- w1: byte;
- // bit 3: Window controls are specified
- // bit 2: Viewport
- // bit 1: Size is specified.
- // bit 0: Position is specified.
- w2: byte;
- // bit 3:
- // bit 2: Group is specified.
- // bit 1
- // bit 0: Clear (all windows before display)
- end;
- pExtendedTOCEntry = ^TExtendedTOCEntry;
-
- TTOCEntryOffsetArray = packed array[ 0..0 ] of int32;
- pTTOCEntryOffsetArray = ^TTOCEntryOffsetArray;
-
-const
- TOCEntryExtended = $20; { extended entry format }
- TOCEntryHidden = $40; { this entry doesn't appear in VIEW.EXE's presentation of the toc }
- TOCEntryHasChildren = $80; { following nodes are a higher level }
- TOCEntryLevelMask = $0f;
-
-
-type
- THelpXYPair = packed record
- Flags: int8;
- X: int16;
- Y: int16;
- end;
- pHelpXYPair = ^ THelpXYPair;
-
- TSlotHeader = packed record
- stuff: int8; // always 0??
- localdictpos: int32; // file offset of the local dictionary
- nlocaldict: int8; // number of entries in the local dict
- ntext: int16; // number of bytes in the text
- end;
- pSlotHeader = ^TSlotHeader;
-
-Implementation
-
-Initialization
-End.
diff --git a/src/IPFFileFormatUnit.pas b/src/IPFFileFormatUnit.pas
new file mode 100644
index 00000000..ca88d64b
--- /dev/null
+++ b/src/IPFFileFormatUnit.pas
@@ -0,0 +1,439 @@
+Unit IPFFileFormatUnit;
+
+{$mode objfpc}{$H+}
+
+// NewView - a new OS/2 Help Viewer
+// Copyright 2003 Aaron Lawrence (aaronl at consultant dot com)
+// This software is released under the Gnu Public License - see readme.txt
+
+Interface
+
+// Definition of IPF file header and other structures
+
+uses
+ SysUtils;
+
+type
+ uint32 = longword;
+ uint16 = word;
+ uint8 = byte;
+ pUInt16 = ^ uint16;
+ pUInt32 = ^ uint32;
+ pUInt8 = ^ uint8;
+
+ PCharArray = packed array[ 0..0 ] of PCHar;
+ UInt32Array = packed array[ 0..0 ] of UInt32;
+ UInt16Array = packed array[ 0..0 ] of UInt16;
+ UInt8Array = packed array[ 0..0 ] of UInt8;
+
+ PCharArrayPointer = ^ PCharArray;
+ UInt32ArrayPointer = ^ UInt32Array;
+ UInt16ArrayPointer = ^ UInt16Array;
+ UInt8ArrayPointer = ^ UInt8Array;
+
+ TBooleanArray = array[ 0..0 ] of boolean;
+ BooleanArrayPointer = ^TBooleanArray;
+
+ EHelpFileException = class( Exception )
+ end;
+
+ EWindowsHelpFormatException = class( Exception )
+ end;
+
+var
+ ErrorCorruptHelpFile: string;
+
+const
+ INF_HEADER_ID = $5348;
+
+Type
+ THelpFileHeader = packed record
+ ID: uint16; // ID magic word (5348h = "HS")
+ unknown1: uint8; // unknown purpose, could be third letter of ID
+ flags: uint8; // probably a flag word...
+ // bit 0: set if INF style file
+ // bit 4: set if HLP style file
+ // patching this byte allows reading HLP files
+ // using the VIEW command, while help files
+ // seem to work with INF settings here as well.
+ hdrsize: uint16; // total size of header
+ unknown2: uint16; // unknown purpose
+
+ ntoc: uint16; // number of entries in the tocarray
+ tocstart: uint32; // file offset of the start of the toc
+ toclen: uint32; // number of bytes in file occupied by the toc
+ tocoffsetsstart: uint32; // file offset of the start of array of toc offsets
+ nres: uint16; // number of panels with ressource numbers
+ resstart: uint32; // 32 bit file offset of ressource number table
+ nname: uint16; // number of panels with textual name
+ namestart: uint32; // 32 bit file offset to panel name table
+ nindex: uint16; // number of index entries
+ indexstart: uint32; // 32 bit file offset to index table
+ indexlen: uint32; // size of index table
+ unknown3: array[ 0..9 ] of uint8; // unknown purpose
+ searchstart: uint32; // 31 bit file offset of full text search table
+ // Note: top bit indicates 32 bit search record!
+ searchlen: uint32; // size of full text search table
+ nslots: uint16; // number of "slots"
+ slotsstart: uint32; // file offset of the slots array
+ dictlen: uint32; // number of bytes occupied by the "dictionary"
+ ndict: uint16; // number of entries in the dictionary
+ dictstart: uint32; // file offset of the start of the dictionary
+ imgstart: uint32; // file offset of image data
+ unknown4: uint8; // unknown purpose
+ nlsstart: uint32; // 32 bit file offset of NLS table
+ nlslen: uint32; // size of NLS table
+ extstart: uint32; // 32 bit file offset of extended data block
+ reserved: array[ 0..2 ] of uint32; // for future use. set to zero.
+ title: array[ 0..47 ] of char; // ASCII title of database
+ end;
+ TPHelpFileHeader = ^THelpFileHeader;
+
+ TExtendedHelpFileHeader = packed record
+ NumFontEntry: uint16; // FONT TABLE: Number entries
+ FontTableOffset: uint32; // FONT TABLE: Offset in file
+ NumDataBase: uint16; // DATA BASE: Number of files
+ DataBaseOffset: uint32; // DATA BASE: Offset in file
+ DataBaseSize: uint32; // DATA BASE: Size in bytes
+ EntryInGNameTable: uint16; // GLOBAL NAMES: Number entries
+ HelpPanelGNameTblOffset: uint32; // GLOBAL NAMES: Offset in file
+ StringsOffset: uint32; // STRINGS : Offset in file
+ StringsSize: uint16; // STRINGS : Total bytes of all strings
+ ChildPagesOffset: uint32; // CHILDPAGES : Offset in file
+ ChildPagesSize: uint32; // CHILDPAGES : Total bytes of all strings
+ NumGIndexEntry: uint32; // Total number of Global Index items
+ CtrlOffset: uint32; // CTRL BUTTONS : offset in file
+ CtrlSize: uint32; // CTRL BUTTONS : size in bytes
+ Reserved: array[0..3] of uint32; // For future use. Set to zero
+ end;
+ TPExtendedHelpFileHeader = ^TExtendedHelpFileHeader;
+
+Type
+ TTOCEntryStart = packed record
+ length: uint8; // length of the entry including this byte
+ flags: uint8; // flag byte, description folows (MSB first)
+ // bit8 haschildren; // following nodes are a higher level
+ // bit7 hidden; // this entry doesn't appear in VIEW.EXE's
+ // presentation of the toc
+ // bit6 extended; // extended entry format
+ // bit5 stuff; // ??
+ // int4 level; // nesting level
+ numSlots: uint8; // number of "slots" occupied by the text for
+ // this toc entry
+ end;
+ pTTOCEntryStart = ^TTOCEntryStart;
+
+ TExtendedTOCEntry = packed record
+ w1: uint8;
+ // bit 3: Window controls are specified
+ // bit 2: Viewport
+ // bit 1: Size is specified.
+ // bit 0: Position is specified.
+ w2: uint8;
+ // bit 3:
+ // bit 2: Group is specified.
+ // bit 1
+ // bit 0: Clear (all windows before display)
+ end;
+ pExtendedTOCEntry = ^TExtendedTOCEntry;
+
+ TTOCEntryOffsetArray = packed array[ 0..0 ] of uint32;
+ pTTOCEntryOffsetArray = ^TTOCEntryOffsetArray;
+
+const
+ TOCEntryExtended = $20; { extended entry format }
+ TOCEntryHidden = $40; { this entry doesn't appear in VIEW.EXE's presentation of the toc }
+ TOCEntryHasChildren = $80; { following nodes are a higher level }
+ TOCEntryLevelMask = $0f;
+
+type
+ THelpXYPair = packed record
+ Flags: uint8;
+ X: uint16;
+ Y: uint16;
+ end;
+ pHelpXYPair = ^THelpXYPair;
+
+ TSlotHeader = packed record
+ stuff: uint8; // always 0??
+ localdictpos: uint32; // file offset of the local dictionary
+ nlocaldict: uint8; // number of entries in the local dict
+ ntext: uint16; // number of bytes in the text
+ end;
+ pSlotHeader = ^TSlotHeader;
+
+ THelpFontSpec = packed record
+ FaceName: array[ 0..32 ] of char;
+ Height: uint16;
+ Width: uint16;
+ Codepage: uint16;
+ end;
+ pTHelpFontSpec = ^THelpFontSpec;
+
+// List of IPF escape codes.
+
+const
+ // Basic byte codes
+ IPF_END_PARA = $fa;
+ IPF_CENTER = $fb;
+ IPF_INVERT_SPACING = $fc;
+ IPF_LINEBREAK = $fd;
+ IPF_SPACE = $fe;
+ IPF_ESC = $ff; // followed by one of the ecXXX codes below
+
+ // FF XX
+ ecSetLeftMargin = $02;
+ ecHighlight1 = $04; // hp1,2,3,5,6,7
+ ecLinkStart = $05;
+ ecFootnoteLinkStart = $07;
+ ecLinkEnd = $08;
+ ecStartCharGraphics = $0b;
+ ecEndCharGraphics = $0c;
+ ecHighlight2 = $0d; // hp4,8,9
+ ecImage = $0e;
+ ecLinkedImage = $0f;
+ ecProgramLink = $10;
+ ecSetLeftMarginNewLine = $11;
+ ecSetLeftMarginFit = $12;
+ ecForegroundColor = $13;
+ ecBackgroundColor = $14;
+ ecFontChange = $19;
+ ecStartLines = $1a;
+ ecEndLines = $1b;
+ ecSetLeftMarginHere = $1c;
+ ecStartLinkByResourceID = $1d;
+ ecExternalLink = $1f;
+
+ // Subescape codes of
+ HPART_DEFINE = 0;
+ HPART_PT_HDREF = 1;
+ HPART_PT_FNREF = 2;
+ HPART_PT_SPREF = 3;
+ HPART_HDREF = 4;
+ HPART_FNREF = 5;
+ HPART_SPREF = 6;
+ HPART_LAUNCH = 7;
+ HPART_PT_LAUNCH = 8;
+ HPART_INFORM = 9;
+ HPART_PT_INFORM = 10;
+ // ?? 11 ??
+ HPART_EXTERN_PT_HDREF = 12;
+ HPART_EXTERN_PT_SPREF = 13;
+ HPART_EXTERN_HDREF = 14;
+ HPART_EXTERN_SPREF = 15;
+ HPART_GLOBAL_HDREF = 16;
+ HPART_GLOBAL_PT_HDREF = 17;
+
+// -----------------------------------------------------------
+// Operations on Int32 arrays, used for searching
+// These could be optimised heavily if needed.
+procedure AllocUInt32Array( Var pArray: UInt32ArrayPointer;
+ Size: longint );
+procedure FreeUInt32Array( Var pArray: UInt32ArrayPointer;
+ Size: longint );
+
+procedure FillUInt32Array( pArray: UInt32ArrayPointer;
+ Size: longint;
+ Value: UInt32 );
+
+procedure AddUInt32Array( pSource: UInt32ArrayPointer;
+ pDest: UInt32ArrayPointer;
+ Size: longint );
+
+// Dest = Dest + source * Multiplier
+procedure AddMultConstUInt32Array( pSource: UInt32ArrayPointer;
+ Multiplier: longint;
+ pDest: UInt32ArrayPointer;
+ Size: longint );
+
+procedure AndUInt32Array( pSource: UInt32ArrayPointer;
+ pDest: UInt32ArrayPointer;
+ Size: longint );
+
+// If both source and dest > 0 then
+// add source to dest
+procedure AndAddUInt32Array( pSource: UInt32ArrayPointer;
+ pDest: UInt32ArrayPointer;
+ Size: longint );
+
+// if Source > 0 then dest is set to 0
+procedure AndNotUInt32Array( pSource: UInt32ArrayPointer;
+ pDest: UInt32ArrayPointer;
+ Size: longint );
+
+// dest = dest or source;
+// if source > 0 then set dest to > 0
+procedure OrUInt32Array( pSource: UInt32ArrayPointer;
+ pDest: UInt32ArrayPointer;
+ Size: longint );
+
+// if source = 0 then dest set to >0
+procedure NotOrUInt32Array( pSource: UInt32ArrayPointer;
+ pDest: UInt32ArrayPointer;
+ Size: longint );
+
+procedure CopyUInt32Array( pSource: UInt32ArrayPointer;
+ pDest: UInt32ArrayPointer;
+ Size: longint );
+
+procedure ClearUInt32Array( pArray: UInt32ArrayPointer;
+ Size: longint );
+procedure SetUInt32Array( pArray: UInt32ArrayPointer;
+ Size: longint );
+
+// returns the result of ORing every array element.
+// Can be useful for debugging e.g. seeing at a glance
+// if any element is non-zero
+function OrAllUInt32Array( pArray: UInt32ArrayPointer;
+ Size: longint ): longint;
+
+
+Implementation
+
+uses
+ nvUtilities;
+
+// Operations on int32 arrays
+// -----------------------------------------------------------
+
+procedure AllocUInt32Array( Var pArray: UInt32ArrayPointer;
+ Size: longint );
+begin
+ GetMem( pArray,
+ Size
+ * sizeof( UInt32 ) );
+end;
+
+procedure FreeUInt32Array( Var pArray: UInt32ArrayPointer;
+ Size: longint );
+begin
+ FreeMem( pArray,
+ Size
+ * sizeof( UInt32 ) );
+end;
+
+// This is a nice fast implementation of filling an
+// array of dwords (Int32/longword)
+procedure FillUInt32Array( pArray: UInt32ArrayPointer;
+ Size: longint;
+ Value: UInt32 );
+var
+ i: integer;
+begin
+ assert( Size > 0 );
+ if Size < 1 then
+ Exit;
+ for i := 0 to Size-1 do
+ begin
+ pArray^[i] := Value;
+ end;
+end;
+
+procedure ClearUInt32Array( pArray: UInt32ArrayPointer;
+ Size: longint );
+begin
+ FillUInt32Array( pArray, Size, 0 );
+end;
+
+procedure SetUInt32Array( pArray: UInt32ArrayPointer;
+ Size: longint );
+begin
+ FillUInt32Array( pArray, Size, $ffffffff );
+end;
+
+procedure AddUInt32Array( pSource: UInt32ArrayPointer;
+ pDest: UInt32ArrayPointer;
+ Size: longint );
+var
+ i: longint;
+begin
+ for i := 0 to Size - 1 do
+ inc( pDest^[ i ], pSource^[ i ] );
+end;
+
+procedure AddMultConstUInt32Array( pSource: UInt32ArrayPointer;
+ Multiplier: longint;
+ pDest: UInt32ArrayPointer;
+ Size: longint );
+var
+ i: longint;
+begin
+ for i := 0 to Size - 1 do
+ inc( pDest^[ i ], pSource^[ i ] * Multiplier );
+end;
+
+procedure OrUInt32Array( pSource: UInt32ArrayPointer;
+ pDest: UInt32ArrayPointer;
+ Size: longint );
+var
+ i: longint;
+begin
+ for i := 0 to Size - 1 do
+ pDest^[ i ] := pDest^[ i ] or pSource^[ i ];
+end;
+
+procedure CopyUInt32Array( pSource: UInt32ArrayPointer;
+ pDest: UInt32ArrayPointer;
+ Size: longint );
+begin
+ MemCopy( pSource, pDest, Size * sizeof( uint32 ) );
+end;
+
+procedure NotOrUInt32Array( pSource: UInt32ArrayPointer;
+ pDest: UInt32ArrayPointer;
+ Size: longint );
+var
+ i: longint;
+begin
+ for i := 0 to Size - 1 do
+ if pSource^[ i ] = 0 then
+ pDest^[ i ] := 1;
+end;
+
+procedure AndUInt32Array( pSource: UInt32ArrayPointer;
+ pDest: UInt32ArrayPointer;
+ Size: longint );
+var
+ i: longint;
+begin
+ for i := 0 to Size - 1 do
+ pDest^[ i ] := pDest^[ i ] and pSource^[ i ];
+end;
+
+procedure AndAddUInt32Array( pSource: UInt32ArrayPointer;
+ pDest: UInt32ArrayPointer;
+ Size: longint );
+var
+ i: longint;
+begin
+ for i := 0 to Size - 1 do
+ if ( pSource^[ i ] > 0 )
+ and ( pDest^[ i ] > 0 ) then
+ inc( pDest^[ i ], pSource^[ i ] )
+ else
+ pDest^[ i ] := 0;
+end;
+
+procedure AndNotUInt32Array( pSource: UInt32ArrayPointer;
+ pDest: UInt32ArrayPointer;
+ Size: longint );
+var
+ i: longint;
+begin
+ for i := 0 to Size - 1 do
+ if pSource^[ i ] > 0 then
+ pDest^[ i ] := 0;
+end;
+
+function OrAllUInt32Array( pArray: UInt32ArrayPointer;
+ Size: longint ): longint;
+var
+ i: longint;
+begin
+ Result := 0;
+ for i := 0 to Size - 1 do
+ Result := Result or pArray^[ i ];
+end;
+
+
+end.
diff --git a/src/docview.lpi b/src/docview.lpi
index 91cc0e95..dda50276 100644
--- a/src/docview.lpi
+++ b/src/docview.lpi
@@ -32,7 +32,7 @@
<PackageName Value="fpgui_toolkit"/>
</Item1>
</RequiredPackages>
- <Units Count="23">
+ <Units Count="22">
<Unit0>
<Filename Value="docview.lpr"/>
<IsPartOfProject Value="True"/>
@@ -44,109 +44,104 @@
<UnitName Value="frm_main"/>
</Unit1>
<Unit2>
- <Filename Value="DataTypes.pas"/>
+ <Filename Value="HelpWindow.pas"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="DataTypes"/>
+ <UnitName Value="HelpWindow"/>
</Unit2>
<Unit3>
- <Filename Value="HelpFileHeader.pas"/>
+ <Filename Value="IPFEscapeCodes.pas"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="HelpFileHeader"/>
+ <UnitName Value="IPFEscapeCodes"/>
</Unit3>
<Unit4>
- <Filename Value="HelpWindow.pas"/>
+ <Filename Value="HelpTopic.pas"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="HelpWindow"/>
+ <UnitName Value="HelpTopic"/>
</Unit4>
<Unit5>
- <Filename Value="IPFEscapeCodes.pas"/>
+ <Filename Value="HelpFile.pas"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="IPFEscapeCodes"/>
+ <UnitName Value="HelpFile"/>
</Unit5>
<Unit6>
- <Filename Value="HelpTopic.pas"/>
+ <Filename Value="CompareWordUnit.pas"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="HelpTopic"/>
+ <UnitName Value="CompareWordUnit"/>
</Unit6>
<Unit7>
- <Filename Value="HelpFile.pas"/>
+ <Filename Value="SearchTable.pas"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="HelpFile"/>
+ <UnitName Value="SearchTable"/>
</Unit7>
<Unit8>
- <Filename Value="CompareWordUnit.pas"/>
+ <Filename Value="TextSearchQuery.pas"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="CompareWordUnit"/>
+ <UnitName Value="TextSearchQuery"/>
</Unit8>
<Unit9>
- <Filename Value="SearchTable.pas"/>
+ <Filename Value="nvUtilities.pas"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="SearchTable"/>
+ <UnitName Value="nvUtilities"/>
</Unit9>
<Unit10>
- <Filename Value="TextSearchQuery.pas"/>
+ <Filename Value="nvNullObjects.pas"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="TextSearchQuery"/>
+ <UnitName Value="nvNullObjects"/>
</Unit10>
<Unit11>
- <Filename Value="nvUtilities.pas"/>
+ <Filename Value="../../../../../opt/git/dunit2/3rdparty/epiktimer/epiktimer.pas"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="nvUtilities"/>
+ <UnitName Value="EpikTimer"/>
</Unit11>
<Unit12>
- <Filename Value="nvNullObjects.pas"/>
+ <Filename Value="../docs/inf04.txt"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="nvNullObjects"/>
</Unit12>
<Unit13>
- <Filename Value="../../../../../opt/git/dunit2/3rdparty/epiktimer/epiktimer.pas"/>
+ <Filename Value="SearchUnit.pas"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="EpikTimer"/>
+ <UnitName Value="SearchUnit"/>
</Unit13>
<Unit14>
- <Filename Value="../docs/inf04.txt"/>
+ <Filename Value="../components/richtext/RichTextStyleUnit.pas"/>
<IsPartOfProject Value="True"/>
+ <UnitName Value="RichTextStyleUnit"/>
</Unit14>
<Unit15>
- <Filename Value="SearchUnit.pas"/>
+ <Filename Value="../components/richtext/CanvasFontManager.pas"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="SearchUnit"/>
+ <UnitName Value="CanvasFontManager"/>
</Unit15>
<Unit16>
- <Filename Value="../components/richtext/RichTextStyleUnit.pas"/>
+ <Filename Value="../components/richtext/ACLStringUtility.pas"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="RichTextStyleUnit"/>
+ <UnitName Value="ACLStringUtility"/>
</Unit16>
<Unit17>
- <Filename Value="../components/richtext/CanvasFontManager.pas"/>
+ <Filename Value="../components/richtext/RichTextDocumentUnit.pas"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="CanvasFontManager"/>
+ <UnitName Value="RichTextDocumentUnit"/>
</Unit17>
<Unit18>
- <Filename Value="../components/richtext/ACLStringUtility.pas"/>
+ <Filename Value="../components/richtext/RichTextView.pas"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="ACLStringUtility"/>
+ <UnitName Value="RichTextView"/>
</Unit18>
<Unit19>
- <Filename Value="../components/richtext/RichTextDocumentUnit.pas"/>
+ <Filename Value="../components/richtext/RichTextLayoutUnit.pas"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="RichTextDocumentUnit"/>
+ <UnitName Value="RichTextLayoutUnit"/>
</Unit19>
<Unit20>
- <Filename Value="../components/richtext/RichTextView.pas"/>
+ <Filename Value="../components/richtext/RichTextDisplayUnit.pas"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="RichTextView"/>
+ <UnitName Value="RichTextDisplayUnit"/>
</Unit20>
<Unit21>
- <Filename Value="../components/richtext/RichTextLayoutUnit.pas"/>
+ <Filename Value="IPFFileFormatUnit.pas"/>
<IsPartOfProject Value="True"/>
- <UnitName Value="RichTextLayoutUnit"/>
+ <UnitName Value="IPFFileFormatUnit"/>
</Unit21>
- <Unit22>
- <Filename Value="../components/richtext/RichTextDisplayUnit.pas"/>
- <IsPartOfProject Value="True"/>
- <UnitName Value="RichTextDisplayUnit"/>
- </Unit22>
</Units>
</ProjectOptions>
<CompilerOptions>
diff --git a/src/docview.lpr b/src/docview.lpr
index 34e0c34e..17349061 100644
--- a/src/docview.lpr
+++ b/src/docview.lpr
@@ -8,9 +8,9 @@ uses
{$ENDIF}{$ENDIF}
Classes,
{$IFDEF Timing}EpikTimer,{$ENDIF}
- fpg_main, frm_main, DataTypes, HelpFileHeader, HelpWindow, IPFEscapeCodes,
+ fpg_main, frm_main, HelpWindow, IPFEscapeCodes,
HelpTopic, CompareWordUnit, SearchTable, TextSearchQuery, nvUtilities,
- nvNullObjects, HelpFile, SearchUnit, fpg_cmdlineparams, customstyle,
+ nvNullObjects, HelpFile, SearchUnit, fpg_cmdlineparams, customstyle, IPFFileFormatUnit,
RichTextStyleUnit, CanvasFontManager, ACLStringUtility, RichTextDocumentUnit,
RichTextView, RichTextLayoutUnit, RichTextDisplayUnit;