<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="VB6Parse Library Reference - getallsettings - Environment">
<title>getallsettings - Environment - VB6Parse Library Reference</title>
<link rel="stylesheet" href="../../../assets/css/style.css">
<link rel="stylesheet" href="../../../assets/css/docs-style.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/styles/github-dark.min.css">
<script src="../../../assets/js/theme-switcher.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/highlight.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.9.0/languages/vbnet.min.js"></script>
<script>hljs.highlightAll();</script>
</head>
<body>
<header class="docs-header">
<div class="container">
<h1><a href="../../../index.html">VB6Parse</a> / <a href="../../../library/index.html">Library</a> / <a href="../../../library/functions/environment/index.html">Environment</a> / getallsettings</h1>
<p class="tagline">VB6 Library Reference</p>
</div>
</header>
<nav class="docs-nav">
<div class="container">
<a href="../../../index.html">Home</a>
<a href="../../../library/index.html">Library Reference</a>
<a href="../../../documentation.html">Documentation</a>
<a href="https://docs.rs/vb6parse" target="_blank">API Docs</a>
<a href="https://github.com/scriptandcompile/vb6parse" target="_blank">GitHub</a>
<button id="theme-toggle" class="theme-toggle" aria-label="Toggle theme">
<span class="theme-icon">🌙</span>
</button>
</div>
</nav>
<main class="container">
<article class="library-item">
<p>GetAllSettings Function
Returns a list of key settings and their respective values (originally created with <code>SaveSetting</code>) from an application's entry in the Windows registry.</p>
<h1 id="syntax">Syntax</h1>
<pre><code class="language-vbnet">GetAllSettings(appname, section)</code></pre>
<h1 id="parameters">Parameters</h1>
<ul>
<li><code>appname</code> - Required. String expression containing the name of the application or project whose key settings are requested.</li>
<li><code>section</code> - Required. String expression containing the name of the section whose key settings are requested.</li>
</ul>
<h1 id="return-value">Return Value</h1>
<p>Returns a <code>Variant</code> containing a two-dimensional array of strings. The first dimension contains the key names, and the second dimension contains the corresponding values.</p>
<h1 id="remarks">Remarks</h1>
<ul>
<li><code>GetAllSettings</code> returns an uninitialized <code>Variant</code> if either <code>appname</code> or <code>section</code> does not exist.</li>
<li>The returned array is zero-based with two columns: column 0 contains key names, column 1 contains values.</li>
<li>Works with the Windows registry (<code>HKEY_CURRENT_USER\Software\VB and VBA Program Settings\appname\section</code>).</li>
<li>On Windows, settings are stored in: <code>HKEY_CURRENT_USER\Software\VB and VBA Program Settings\appname\section</code>.</li>
<li>Use <code>SaveSetting</code> to write values that <code>GetAllSettings</code> can retrieve.</li>
<li>Use <code>GetSetting</code> to retrieve individual settings.</li>
<li>Use <code>DeleteSetting</code> to remove settings from the registry.</li>
<li><code>GetAllSettings</code> is Windows-specific and relies on the registry.</li>
</ul>
<h1 id="typical-uses">Typical Uses</h1>
<ul>
<li>Loading application configuration settings</li>
<li>Retrieving user preferences</li>
<li>Reading saved window positions and sizes</li>
<li>Loading multiple related settings at once</li>
<li>Migrating settings between versions</li>
<li>Exporting application configuration</li>
</ul>
<h1 id="basic-usage-examples">Basic Usage Examples</h1>
<pre><code class="language-vbnet">' Retrieve all settings for a section
Dim allSettings As Variant
Dim i As Long
allSettings = GetAllSettings("MyApp", "Preferences")
If IsEmpty(allSettings) Then
Debug.Print "No settings found"
Else
For i = LBound(allSettings, 1) To UBound(allSettings, 1)
Debug.Print allSettings(i, 0) & " = " & allSettings(i, 1)
Next i
End If
' Check if settings exist
Dim settings As Variant
settings = GetAllSettings("MyApp", "WindowPosition")
If Not IsEmpty(settings) Then
' Settings exist, process them
MsgBox "Found " & (UBound(settings, 1) + 1) & " settings"
End If
' Load and apply settings
Dim appSettings As Variant
appSettings = GetAllSettings("MyApp", "Options")
If Not IsEmpty(appSettings) Then
Dim j As Long
For j = 0 To UBound(appSettings, 1)
Select Case appSettings(j, 0)
Case "Theme"
ApplyTheme appSettings(j, 1)
Case "Language"
SetLanguage appSettings(j, 1)
End Select
Next j
End If</code></pre>
<h1 id="common-patterns">Common Patterns</h1>
<h2 id="1-load-all-application-settings">1. Load All Application Settings</h2>
<pre><code class="language-vbnet">Sub LoadApplicationSettings()
Dim settings As Variant
Dim i As Long
settings = GetAllSettings("MyApp", "General")
If IsEmpty(settings) Then
' No settings found, use defaults
SetDefaultSettings
Else
For i = LBound(settings, 1) To UBound(settings, 1)
ProcessSetting settings(i, 0), settings(i, 1)
Next i
End If
End Sub
Sub ProcessSetting(keyName As String, value As String)
Select Case keyName
Case "AutoSave"
chkAutoSave.Value = IIf(value = "True", 1, 0)
Case "SaveInterval"
txtInterval.Text = value
Case "BackupEnabled"
chkBackup.Value = IIf(value = "True", 1, 0)
End Select
End Sub</code></pre>
<h2 id="2-restore-window-position">2. Restore Window Position</h2>
<pre><code class="language-vbnet">Sub RestoreWindowPosition(formName As Form)
Dim settings As Variant
Dim i As Long
settings = GetAllSettings(App.Title, "WindowPos")
If Not IsEmpty(settings) Then
For i = LBound(settings, 1) To UBound(settings, 1)
Select Case settings(i, 0)
Case "Left"
formName.Left = CLng(settings(i, 1))
Case "Top"
formName.Top = CLng(settings(i, 1))
Case "Width"
formName.Width = CLng(settings(i, 1))
Case "Height"
formName.Height = CLng(settings(i, 1))
Case "WindowState"
formName.WindowState = CInt(settings(i, 1))
End Select
Next i
End If
End Sub</code></pre>
<h2 id="3-load-user-preferences">3. Load User Preferences</h2>
<pre><code class="language-vbnet">Function LoadUserPreferences() As Collection
Dim settings As Variant
Dim prefs As New Collection
Dim i As Long
settings = GetAllSettings(App.Title, "UserPreferences")
If Not IsEmpty(settings) Then
For i = LBound(settings, 1) To UBound(settings, 1)
prefs.Add settings(i, 1), settings(i, 0)
Next i
End If
Set LoadUserPreferences = prefs
End Function
' Usage
Sub ApplyUserPreferences()
Dim prefs As Collection
Set prefs = LoadUserPreferences()
If prefs.Count > 0 Then
On Error Resume Next
txtFontSize.Text = prefs("FontSize")
cboTheme.Text = prefs("Theme")
chkShowToolbar.Value = IIf(prefs("ShowToolbar") = "True", 1, 0)
On Error GoTo 0
End If
End Sub</code></pre>
<h2 id="4-export-settings-to-file">4. Export Settings to File</h2>
<pre><code class="language-vbnet">Sub ExportSettingsToFile(filename As String)
Dim settings As Variant
Dim fileNum As Integer
Dim i As Long
settings = GetAllSettings(App.Title, "Settings")
If IsEmpty(settings) Then
MsgBox "No settings to export"
Exit Sub
End If
fileNum = FreeFile
Open filename For Output As #fileNum
Print #fileNum, "[Settings]"
For i = LBound(settings, 1) To UBound(settings, 1)
Print #fileNum, settings(i, 0) & "=" & settings(i, 1)
Next i
Close #fileNum
MsgBox "Settings exported successfully"
End Sub</code></pre>
<h2 id="5-display-settings-in-listbox">5. Display Settings in <code>ListBox</code></h2>
<pre><code class="language-vbnet">Sub PopulateSettingsList(lst As ListBox)
Dim settings As Variant
Dim i As Long
lst.Clear
settings = GetAllSettings(App.Title, "Configuration")
If IsEmpty(settings) Then
lst.AddItem "(No settings found)"
Else
For i = LBound(settings, 1) To UBound(settings, 1)
lst.AddItem settings(i, 0) & " = " & settings(i, 1)
Next i
End If
End Sub</code></pre>
<h2 id="6-validate-settings">6. Validate Settings</h2>
<pre><code class="language-vbnet">Function ValidateSettings(appName As String, section As String) As Boolean
Dim settings As Variant
Dim i As Long
Dim isValid As Boolean
settings = GetAllSettings(appName, section)
If IsEmpty(settings) Then
ValidateSettings = False
Exit Function
End If
isValid = True
For i = LBound(settings, 1) To UBound(settings, 1)
' Validate each setting
If Not IsValidSetting(settings(i, 0), settings(i, 1)) Then
Debug.Print "Invalid setting: " & settings(i, 0)
isValid = False
End If
Next i
ValidateSettings = isValid
End Function
Function IsValidSetting(keyName As String, value As String) As Boolean
' Implement validation logic
IsValidSetting = True
Select Case keyName
Case "Port"
IsValidSetting = IsNumeric(value) And CLng(value) > 0 And CLng(value) < 65536
Case "Timeout"
IsValidSetting = IsNumeric(value) And CLng(value) > 0
Case "Enabled"
IsValidSetting = (value = "True" Or value = "False")
End Select
End Function</code></pre>
<h2 id="7-compare-settings-between-sections">7. Compare Settings Between Sections</h2>
<pre><code class="language-vbnet">Sub CompareSettings(section1 As String, section2 As String)
Dim settings1 As Variant
Dim settings2 As Variant
Dim i As Long
settings1 = GetAllSettings(App.Title, section1)
settings2 = GetAllSettings(App.Title, section2)
Debug.Print "Comparing " & section1 & " vs " & section2
Debug.Print String(50, "=")
If IsEmpty(settings1) Then
Debug.Print section1 & " has no settings"
ElseIf IsEmpty(settings2) Then
Debug.Print section2 & " has no settings"
Else
For i = LBound(settings1, 1) To UBound(settings1, 1)
Debug.Print section1 & "." & settings1(i, 0) & " = " & settings1(i, 1)
Next i
Debug.Print ""
For i = LBound(settings2, 1) To UBound(settings2, 1)
Debug.Print section2 & "." & settings2(i, 0) & " = " & settings2(i, 1)
Next i
End If
End Sub</code></pre>
<h2 id="8-migrate-settings-to-new-version">8. Migrate Settings to New Version</h2>
<pre><code class="language-vbnet">Sub MigrateSettings(oldSection As String, newSection As String)
Dim settings As Variant
Dim i As Long
' Get all settings from old section
settings = GetAllSettings(App.Title, oldSection)
If IsEmpty(settings) Then
Debug.Print "No settings to migrate"
Exit Sub
End If
' Save to new section
For i = LBound(settings, 1) To UBound(settings, 1)
SaveSetting App.Title, newSection, settings(i, 0), settings(i, 1)
Next i
Debug.Print "Migrated " & (UBound(settings, 1) + 1) & " settings"
End Sub</code></pre>
<h2 id="9-create-settings-dictionary">9. Create Settings Dictionary</h2>
<pre><code class="language-vbnet">Function GetSettingsDictionary() As Object
Dim settings As Variant
Dim dict As Object
Dim i As Long
Set dict = CreateObject("Scripting.Dictionary")
settings = GetAllSettings(App.Title, "Config")
If Not IsEmpty(settings) Then
For i = LBound(settings, 1) To UBound(settings, 1)
dict.Add settings(i, 0), settings(i, 1)
Next i
End If
Set GetSettingsDictionary = dict
End Function
' Usage
Sub UseSettingsDictionary()
Dim settings As Object
Set settings = GetSettingsDictionary()
If settings.Exists("ServerURL") Then
Debug.Print "Server: " & settings("ServerURL")
End If
End Sub</code></pre>
<h2 id="10-bulk-settings-editor">10. Bulk Settings Editor</h2>
<pre><code class="language-vbnet">Sub EditAllSettings(appName As String, section As String)
Dim settings As Variant
Dim i As Long
Dim newValue As String
settings = GetAllSettings(appName, section)
If IsEmpty(settings) Then
MsgBox "No settings found"
Exit Sub
End If
For i = LBound(settings, 1) To UBound(settings, 1)
newValue = InputBox("Enter new value for: " & settings(i, 0), _
"Edit Setting", settings(i, 1))
If newValue <> "" Then
SaveSetting appName, section, settings(i, 0), newValue
End If
Next i
End Sub</code></pre>
<h1 id="advanced-usage">Advanced Usage</h1>
<h2 id="1-settings-manager-class">1. Settings Manager Class</h2>
<pre><code class="language-vbnet">' Class: SettingsManager
Private m_AppName As String
Private m_Section As String
Private m_Settings As Variant
Public Sub Initialize(appName As String, section As String)
m_AppName = appName
m_Section = section
RefreshSettings
End Sub
Public Sub RefreshSettings()
m_Settings = GetAllSettings(m_AppName, m_Section)
End Sub
Public Function GetValue(keyName As String, _
Optional defaultValue As String = "") As String
Dim i As Long
If IsEmpty(m_Settings) Then
GetValue = defaultValue
Exit Function
End If
For i = LBound(m_Settings, 1) To UBound(m_Settings, 1)
If m_Settings(i, 0) = keyName Then
GetValue = m_Settings(i, 1)
Exit Function
End If
Next i
GetValue = defaultValue
End Function
Public Function SettingExists(keyName As String) As Boolean
Dim i As Long
If IsEmpty(m_Settings) Then
SettingExists = False
Exit Function
End If
For i = LBound(m_Settings, 1) To UBound(m_Settings, 1)
If m_Settings(i, 0) = keyName Then
SettingExists = True
Exit Function
End If
Next i
SettingExists = False
End Function
Public Property Get SettingCount() As Long
If IsEmpty(m_Settings) Then
SettingCount = 0
Else
SettingCount = UBound(m_Settings, 1) + 1
End If
End Property</code></pre>
<h2 id="2-settings-backup-and-restore">2. Settings Backup and Restore</h2>
<pre><code class="language-vbnet">Type SettingsBackup
AppName As String
Section As String
Settings As Variant
BackupDate As Date
End Type
Function BackupSettings(appName As String, section As String) As SettingsBackup
Dim backup As SettingsBackup
backup.AppName = appName
backup.Section = section
backup.Settings = GetAllSettings(appName, section)
backup.BackupDate = Now
BackupSettings = backup
End Function
Sub RestoreSettings(backup As SettingsBackup)
Dim i As Long
If IsEmpty(backup.Settings) Then
MsgBox "No settings to restore"
Exit Sub
End If
' Clear existing settings first
DeleteSetting backup.AppName, backup.Section
' Restore backed up settings
For i = LBound(backup.Settings, 1) To UBound(backup.Settings, 1)
SaveSetting backup.AppName, backup.Section, _
backup.Settings(i, 0), backup.Settings(i, 1)
Next i
MsgBox "Settings restored from " & Format(backup.BackupDate, "yyyy-mm-dd hh:nn:ss")
End Sub</code></pre>
<h2 id="3-settings-encryptiondecryption">3. Settings Encryption/Decryption</h2>
<pre><code class="language-vbnet">Function GetEncryptedSettings(appName As String, section As String, _
password As String) As Variant
Dim settings As Variant
Dim decrypted() As String
Dim i As Long
settings = GetAllSettings(appName, section)
If IsEmpty(settings) Then
GetEncryptedSettings = Empty
Exit Function
End If
ReDim decrypted(LBound(settings, 1) To UBound(settings, 1), 0 To 1)
For i = LBound(settings, 1) To UBound(settings, 1)
decrypted(i, 0) = settings(i, 0)
decrypted(i, 1) = DecryptString(settings(i, 1), password)
Next i
GetEncryptedSettings = decrypted
End Function
Function DecryptString(encrypted As String, password As String) As String
' Simple XOR encryption for demonstration
Dim i As Long
Dim result As String
Dim keyChar As Integer
result = ""
For i = 1 To Len(encrypted)
keyChar = Asc(Mid(password, ((i - 1) Mod Len(password)) + 1, 1))
result = result & Chr(Asc(Mid(encrypted, i, 1)) Xor keyChar)
Next i
DecryptString = result
End Function</code></pre>
<h2 id="4-multi-section-settings-loader">4. Multi-Section Settings Loader</h2>
<pre><code class="language-vbnet">Function LoadMultipleSections(appName As String, _
sections() As String) As Collection
Dim allSettings As New Collection
Dim i As Long
Dim sectionSettings As Variant
For i = LBound(sections) To UBound(sections)
sectionSettings = GetAllSettings(appName, sections(i))
If Not IsEmpty(sectionSettings) Then
allSettings.Add sectionSettings, sections(i)
End If
Next i
Set LoadMultipleSections = allSettings
End Function
' Usage
Sub LoadAllAppSettings()
Dim sections() As String
Dim allSettings As Collection
Dim section As Variant
sections = Split("General,Display,Network,Security", ",")
Set allSettings = LoadMultipleSections(App.Title, sections)
For Each section In allSettings
Debug.Print "Section has " & (UBound(section, 1) + 1) & " settings"
Next
End Sub</code></pre>
<h2 id="5-settings-change-detection">5. Settings Change Detection</h2>
<pre><code class="language-vbnet">Type SettingsSnapshot
Settings As Variant
Timestamp As Date
End Type
Private m_LastSnapshot As SettingsSnapshot
Function TakeSnapshot(appName As String, section As String) As SettingsSnapshot
Dim snapshot As SettingsSnapshot
snapshot.Settings = GetAllSettings(appName, section)
snapshot.Timestamp = Now
TakeSnapshot = snapshot
End Function
Function DetectChanges(appName As String, section As String) As Boolean
Dim currentSettings As Variant
Dim i As Long
Dim changed As Boolean
currentSettings = GetAllSettings(appName, section)
' Check if both are empty
If IsEmpty(m_LastSnapshot.Settings) And IsEmpty(currentSettings) Then
DetectChanges = False
Exit Function
End If
' Check if one is empty
If IsEmpty(m_LastSnapshot.Settings) Or IsEmpty(currentSettings) Then
DetectChanges = True
Exit Function
End If
' Check if different sizes
If UBound(m_LastSnapshot.Settings, 1) <> UBound(currentSettings, 1) Then
DetectChanges = True
Exit Function
End If
' Compare values
changed = False
For i = LBound(currentSettings, 1) To UBound(currentSettings, 1)
If currentSettings(i, 0) <> m_LastSnapshot.Settings(i, 0) Or _
currentSettings(i, 1) <> m_LastSnapshot.Settings(i, 1) Then
changed = True
Exit For
End If
Next i
DetectChanges = changed
End Function</code></pre>
<h2 id="6-settings-validation-framework">6. Settings Validation Framework</h2>
<pre><code class="language-vbnet">Type ValidationRule
KeyName As String
DataType As String ' "String", "Integer", "Boolean", "Date"
MinValue As Variant
MaxValue As Variant
Required As Boolean
End Type
Function ValidateAllSettings(appName As String, section As String, _
rules() As ValidationRule) As Collection
Dim settings As Variant
Dim errors As New Collection
Dim i As Long, j As Long
Dim found As Boolean
Dim settingValue As String
settings = GetAllSettings(appName, section)
' Check each rule
For i = LBound(rules) To UBound(rules)
found = False
If Not IsEmpty(settings) Then
For j = LBound(settings, 1) To UBound(settings, 1)
If settings(j, 0) = rules(i).KeyName Then
found = True
settingValue = settings(j, 1)
' Validate data type and range
If Not ValidateValue(settingValue, rules(i)) Then
errors.Add "Invalid value for " & rules(i).KeyName
End If
Exit For
End If
Next j
End If
If Not found And rules(i).Required Then
errors.Add "Missing required setting: " & rules(i).KeyName
End If
Next i
Set ValidateAllSettings = errors
End Function
Function ValidateValue(value As String, rule As ValidationRule) As Boolean
Select Case rule.DataType
Case "Integer"
If Not IsNumeric(value) Then
ValidateValue = False
Else
Dim intVal As Long
intVal = CLng(value)
ValidateValue = (intVal >= rule.MinValue And intVal <= rule.MaxValue)
End If
Case "Boolean"
ValidateValue = (value = "True" Or value = "False")
Case Else
ValidateValue = True
End Select
End Function</code></pre>
<h1 id="error-handling">Error Handling</h1>
<pre><code class="language-vbnet">Function SafeGetAllSettings(appName As String, section As String) As Variant
On Error GoTo ErrorHandler
Dim settings As Variant
settings = GetAllSettings(appName, section)
SafeGetAllSettings = settings
Exit Function
ErrorHandler:
Debug.Print "Error retrieving settings: " & Err.Description
SafeGetAllSettings = Empty
End Function</code></pre>
<p>Common issues:
- <strong>Empty return value</strong>: Section or application does not exist in registry
- <strong>Registry access denied</strong>: Insufficient permissions to read registry
- <strong>Invalid section name</strong>: Special characters or invalid path</p>
<h1 id="performance-considerations">Performance Considerations</h1>
<ul>
<li><code>GetAllSettings</code> reads from the Windows registry, which is relatively fast</li>
<li>For frequently accessed settings, consider caching the results</li>
<li>Reading all settings at once is more efficient than multiple <code>GetSetting</code> calls</li>
<li>Registry access can be affected by antivirus software</li>
<li>Consider using INI files or XML for cross-platform compatibility</li>
</ul>
<h1 id="best-practices">Best Practices</h1>
<ol>
<li><strong>Always check for Empty</strong> before using the returned array</li>
<li><strong>Use meaningful section names</strong> to organize settings logically</li>
<li><strong>Cache settings</strong> in memory if accessed frequently</li>
<li><strong>Validate settings</strong> after retrieval</li>
<li><strong>Provide defaults</strong> when settings don't exist</li>
<li><strong>Document registry structure</strong> for your application</li>
<li><strong>Consider cleanup</strong> - use <code>DeleteSetting</code> when settings are no longer needed</li>
</ol>
<h1 id="comparison-with-other-functions">Comparison with Other Functions</h1>
<h2 id="getallsettings-vs-getsetting"><code>GetAllSettings</code> vs <code>GetSetting</code></h2>
<pre><code class="language-vbnet">' GetAllSettings - Retrieve all settings at once
Dim allSettings As Variant
allSettings = GetAllSettings("MyApp", "Config")
' GetSetting - Retrieve one setting at a time
Dim value As String
value = GetSetting("MyApp", "Config", "Theme", "Default")</code></pre>
<h2 id="getallsettings-vs-file-based-storage"><code>GetAllSettings</code> vs File-Based Storage</h2>
<pre><code class="language-vbnet">' GetAllSettings - Windows registry
settings = GetAllSettings(App.Title, "Settings")
' File-based - INI file or XML (more portable)
' Requires custom parsing code</code></pre>
<h1 id="limitations">Limitations</h1>
<ul>
<li>Windows-specific (uses Windows registry)</li>
<li>Limited to <code>HKEY_CURRENT_USER</code> hive</li>
<li><code>String</code> values only (need to parse numbers, dates, etc.)</li>
<li>Registry size limits (though rarely hit in practice)</li>
<li>No built-in encryption or security</li>
<li>Requires appropriate registry permissions</li>
<li>Not suitable for large amounts of data</li>
<li>Two-dimensional array only (fixed structure)</li>
</ul>
<h1 id="registry-location">Registry Location</h1>
<p>Settings are stored at:</p>
<pre><code class="language-text">HKEY_CURRENT_USER\Software\VB and VBA Program Settings\appname\section</code></pre>
<h1 id="related-functions">Related Functions</h1>
<ul>
<li><code>GetSetting</code> - Returns a single key setting from the registry</li>
<li><code>SaveSetting</code> - Saves or creates an application entry in the registry</li>
<li><code>DeleteSetting</code> - Deletes a section or key setting from the registry</li>
<li><code>Environ</code> - Returns the string associated with an operating system environment variable</li>
<li><code>Command</code> - Returns the command-line arguments</li>
</ul>
</article>
<div style="margin-top: 3rem; padding-top: 2rem; border-top: 1px solid var(--border-color);">
<p>
<a href="index.html">← Back to Environment</a> |
<a href="../index.html">View all functions</a>
</p>
</div>
</main>
<footer>
<div class="container">
<p>© 2024-2026 VB6Parse Contributors. Licensed under the MIT License.</p>
</div>
</footer>
</body>
</html>