Class: Cabriolet::Models::WinHelpHeader
- Inherits:
-
Object
- Object
- Cabriolet::Models::WinHelpHeader
- Defined in:
- lib/cabriolet/models/winhelp_header.rb
Overview
Windows Help (WinHelp) file header model
Represents the metadata of a Windows Help file (WinHelp 3.x or 4.x). WinHelp files contain an internal file system with |SYSTEM, |TOPIC, and other internal files.
Instance Attribute Summary collapse
-
#directory_offset ⇒ Object
:winhelp3 or :winhelp4 # Magic number (0x35F3 or 0x3F5F0000).
-
#file_size ⇒ Object
:winhelp3 or :winhelp4 # Magic number (0x35F3 or 0x3F5F0000).
-
#filename ⇒ Object
:winhelp3 or :winhelp4 # Magic number (0x35F3 or 0x3F5F0000).
-
#free_list_offset ⇒ Object
:winhelp3 or :winhelp4 # Magic number (0x35F3 or 0x3F5F0000).
-
#internal_files ⇒ Object
Internal files in the help file Array of hashes: { filename:, file_size:, starting_block: }.
-
#magic ⇒ Object
:winhelp3 or :winhelp4 # Magic number (0x35F3 or 0x3F5F0000).
-
#system_data ⇒ Object
Parsed |SYSTEM file data (if extracted).
-
#version ⇒ Object
:winhelp3 or :winhelp4 # Magic number (0x35F3 or 0x3F5F0000).
Instance Method Summary collapse
-
#find_file(name) ⇒ Hash?
Find internal file by name.
-
#has_system_file? ⇒ Boolean
Check if |SYSTEM file exists.
-
#has_topic_file? ⇒ Boolean
Check if |TOPIC file exists.
-
#initialize(version: :winhelp3, magic: 0, directory_offset: 0, free_list_offset: 0, file_size: 0, filename: nil) ⇒ WinHelpHeader
constructor
Initialize WinHelp header.
-
#internal_filenames ⇒ Array<String>
Get list of internal filenames.
-
#magic_hex ⇒ String
Get magic number as hex string.
-
#valid? ⇒ Boolean
Check if header is valid.
-
#version_string ⇒ String
Get version string.
-
#winhelp3? ⇒ Boolean
Check if this is WinHelp 3.x format.
-
#winhelp4? ⇒ Boolean
Check if this is WinHelp 4.x format.
Constructor Details
#initialize(version: :winhelp3, magic: 0, directory_offset: 0, free_list_offset: 0, file_size: 0, filename: nil) ⇒ WinHelpHeader
Initialize WinHelp header
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/cabriolet/models/winhelp_header.rb', line 28 def initialize( version: :winhelp3, magic: 0, directory_offset: 0, free_list_offset: 0, file_size: 0, filename: nil ) @version = version @magic = magic @directory_offset = directory_offset @free_list_offset = free_list_offset @file_size = file_size @filename = filename @internal_files = [] @system_data = nil end |
Instance Attribute Details
#directory_offset ⇒ Object
:winhelp3 or :winhelp4 # Magic number (0x35F3 or 0x3F5F0000)
11 12 13 |
# File 'lib/cabriolet/models/winhelp_header.rb', line 11 def directory_offset @directory_offset end |
#file_size ⇒ Object
:winhelp3 or :winhelp4 # Magic number (0x35F3 or 0x3F5F0000)
11 12 13 |
# File 'lib/cabriolet/models/winhelp_header.rb', line 11 def file_size @file_size end |
#filename ⇒ Object
:winhelp3 or :winhelp4 # Magic number (0x35F3 or 0x3F5F0000)
11 12 13 |
# File 'lib/cabriolet/models/winhelp_header.rb', line 11 def filename @filename end |
#free_list_offset ⇒ Object
:winhelp3 or :winhelp4 # Magic number (0x35F3 or 0x3F5F0000)
11 12 13 |
# File 'lib/cabriolet/models/winhelp_header.rb', line 11 def free_list_offset @free_list_offset end |
#internal_files ⇒ Object
Internal files in the help file Array of hashes: { filename:, file_size:, starting_block: }
15 16 17 |
# File 'lib/cabriolet/models/winhelp_header.rb', line 15 def internal_files @internal_files end |
#magic ⇒ Object
:winhelp3 or :winhelp4 # Magic number (0x35F3 or 0x3F5F0000)
11 12 13 |
# File 'lib/cabriolet/models/winhelp_header.rb', line 11 def magic @magic end |
#system_data ⇒ Object
Parsed |SYSTEM file data (if extracted)
18 19 20 |
# File 'lib/cabriolet/models/winhelp_header.rb', line 18 def system_data @system_data end |
#version ⇒ Object
:winhelp3 or :winhelp4 # Magic number (0x35F3 or 0x3F5F0000)
11 12 13 |
# File 'lib/cabriolet/models/winhelp_header.rb', line 11 def version @version end |
Instance Method Details
#find_file(name) ⇒ Hash?
Find internal file by name
86 87 88 |
# File 'lib/cabriolet/models/winhelp_header.rb', line 86 def find_file(name) @internal_files.find { |f| f[:filename] == name } end |
#has_system_file? ⇒ Boolean
Check if |SYSTEM file exists
93 94 95 |
# File 'lib/cabriolet/models/winhelp_header.rb', line 93 def has_system_file? !find_file("|SYSTEM").nil? end |
#has_topic_file? ⇒ Boolean
Check if |TOPIC file exists
100 101 102 |
# File 'lib/cabriolet/models/winhelp_header.rb', line 100 def has_topic_file? !find_file("|TOPIC").nil? end |
#internal_filenames ⇒ Array<String>
Get list of internal filenames
78 79 80 |
# File 'lib/cabriolet/models/winhelp_header.rb', line 78 def internal_filenames @internal_files.map { |f| f[:filename] } end |
#magic_hex ⇒ String
Get magic number as hex string
121 122 123 124 |
# File 'lib/cabriolet/models/winhelp_header.rb', line 121 def magic_hex magic_int = @magic.respond_to?(:to_i) ? @magic.to_i : @magic.to_int "0x#{magic_int.to_s(16).upcase}" end |
#valid? ⇒ Boolean
Check if header is valid
50 51 52 53 54 55 56 57 58 59 |
# File 'lib/cabriolet/models/winhelp_header.rb', line 50 def valid? case @version when :winhelp3 @magic == 0x35F3 when :winhelp4 (@magic & 0xFFFF) == 0x3F5F else false end end |
#version_string ⇒ String
Get version string
107 108 109 110 111 112 113 114 115 116 |
# File 'lib/cabriolet/models/winhelp_header.rb', line 107 def version_string case @version when :winhelp3 "Windows Help 3.x (16-bit)" when :winhelp4 "Windows Help 4.x (32-bit)" else "Unknown" end end |
#winhelp3? ⇒ Boolean
Check if this is WinHelp 3.x format
64 65 66 |
# File 'lib/cabriolet/models/winhelp_header.rb', line 64 def winhelp3? @version == :winhelp3 end |
#winhelp4? ⇒ Boolean
Check if this is WinHelp 4.x format
71 72 73 |
# File 'lib/cabriolet/models/winhelp_header.rb', line 71 def winhelp4? @version == :winhelp4 end |