<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://groupkos.com/dev/index.php?action=history&amp;feed=atom&amp;title=Xenotools_VB6_Edition</id>
	<title>Xenotools VB6 Edition - Revision history</title>
	<link rel="self" type="application/atom+xml" href="http://groupkos.com/dev/index.php?action=history&amp;feed=atom&amp;title=Xenotools_VB6_Edition"/>
	<link rel="alternate" type="text/html" href="http://groupkos.com/dev/index.php?title=Xenotools_VB6_Edition&amp;action=history"/>
	<updated>2026-04-19T11:56:36Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.39.3</generator>
	<entry>
		<id>http://groupkos.com/dev/index.php?title=Xenotools_VB6_Edition&amp;diff=5063&amp;oldid=prev</id>
		<title>XenoEngineer: Replaced content with &quot;{{menuXenotoolsVB6}}&quot;</title>
		<link rel="alternate" type="text/html" href="http://groupkos.com/dev/index.php?title=Xenotools_VB6_Edition&amp;diff=5063&amp;oldid=prev"/>
		<updated>2025-04-21T20:46:40Z</updated>

		<summary type="html">&lt;p&gt;Replaced content with &amp;quot;{{menuXenotoolsVB6}}&amp;quot;&lt;/p&gt;
&lt;a href=&quot;http://groupkos.com/dev/index.php?title=Xenotools_VB6_Edition&amp;amp;diff=5063&amp;amp;oldid=5060&quot;&gt;Show changes&lt;/a&gt;</summary>
		<author><name>XenoEngineer</name></author>
	</entry>
	<entry>
		<id>http://groupkos.com/dev/index.php?title=Xenotools_VB6_Edition&amp;diff=5060&amp;oldid=prev</id>
		<title>XenoEngineer: Created page with &quot;{{menuXenotoolsVB6}}  &lt;pre style=&quot;background-color:cornsilk;&quot;&gt; &#039;&#039;  clsOptions  --user-options in serializable object-hierarchy &#039;&#039; &#039;&#039;  Load calls Deserialize &#039;&#039;  Save calls Serialize &#039;&#039; &#039;&#039;  load(optional skvFile as string=&quot;&quot; ) as boolean &#039;&#039;  deserialize(skvOptions as string=&quot;&quot; ) as boolean &#039;&#039; &#039;&#039;  save(optional file as string=&quot;&quot; ) as boolean &#039;&#039;  serialize() as string &#039;&#039; &lt;/pre&gt;  &lt;pre style=&quot;background-color: lightpink;&quot;&gt; Option Explicit  Public Event initialized(class as st...&quot;</title>
		<link rel="alternate" type="text/html" href="http://groupkos.com/dev/index.php?title=Xenotools_VB6_Edition&amp;diff=5060&amp;oldid=prev"/>
		<updated>2025-04-21T20:30:10Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;{{menuXenotoolsVB6}}  &amp;lt;pre style=&amp;quot;background-color:cornsilk;&amp;quot;&amp;gt; &amp;#039;&amp;#039;  clsOptions  --user-options in serializable object-hierarchy &amp;#039;&amp;#039; &amp;#039;&amp;#039;  Load calls Deserialize &amp;#039;&amp;#039;  Save calls Serialize &amp;#039;&amp;#039; &amp;#039;&amp;#039;  load(optional skvFile as string=&amp;quot;&amp;quot; ) as boolean &amp;#039;&amp;#039;  deserialize(skvOptions as string=&amp;quot;&amp;quot; ) as boolean &amp;#039;&amp;#039; &amp;#039;&amp;#039;  save(optional file as string=&amp;quot;&amp;quot; ) as boolean &amp;#039;&amp;#039;  serialize() as string &amp;#039;&amp;#039; &amp;lt;/pre&amp;gt;  &amp;lt;pre style=&amp;quot;background-color: lightpink;&amp;quot;&amp;gt; Option Explicit  Public Event initialized(class as st...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{menuXenotoolsVB6}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color:cornsilk;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;  clsOptions  --user-options in serializable object-hierarchy&lt;br /&gt;
&amp;#039;&amp;#039;&lt;br /&gt;
&amp;#039;&amp;#039;  Load calls Deserialize&lt;br /&gt;
&amp;#039;&amp;#039;  Save calls Serialize&lt;br /&gt;
&amp;#039;&amp;#039;&lt;br /&gt;
&amp;#039;&amp;#039;  load(optional skvFile as string=&amp;quot;&amp;quot; ) as boolean&lt;br /&gt;
&amp;#039;&amp;#039;  deserialize(skvOptions as string=&amp;quot;&amp;quot; ) as boolean&lt;br /&gt;
&amp;#039;&amp;#039;&lt;br /&gt;
&amp;#039;&amp;#039;  save(optional file as string=&amp;quot;&amp;quot; ) as boolean&lt;br /&gt;
&amp;#039;&amp;#039;  serialize() as string&lt;br /&gt;
&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color: lightpink;&amp;quot;&amp;gt;&lt;br /&gt;
Option Explicit&lt;br /&gt;
&lt;br /&gt;
Public Event initialized(class as string )&lt;br /&gt;
Public Event Loaded(file As String)&lt;br /&gt;
Public Event Saved(file As String)&lt;br /&gt;
Public Event Deserialized()&lt;br /&gt;
Public Event Serialized()&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color: lavenderpink;&amp;quot;&amp;gt;&lt;br /&gt;
Private Const CLASS_NAME = &amp;quot;Options&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Private Enum enumStati&lt;br /&gt;
    initialized = 1&lt;br /&gt;
    loaded&lt;br /&gt;
    saved&lt;br /&gt;
End Enum&lt;br /&gt;
&lt;br /&gt;
Private Type udtSKV&lt;br /&gt;
    className           As String&lt;br /&gt;
    parentNamePath      As String&lt;br /&gt;
    rootNamePath        As String&lt;br /&gt;
    &lt;br /&gt;
    SKV()               As String&lt;br /&gt;
    skvCount            As Long&lt;br /&gt;
    skvAllocInitial     As Long&lt;br /&gt;
    skvAllocAdditional  As Long&lt;br /&gt;
    skvFile             As String       &amp;#039;&amp;#039;  Storing a binary shadow of this class&amp;#039;s contents. Hard coded in Initialize.&lt;br /&gt;
    &lt;br /&gt;
    status              As enumStati&lt;br /&gt;
    file                As String   &lt;br /&gt;
End Type&lt;br /&gt;
&lt;br /&gt;
Private m As udtSKV&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre style=&amp;quot;background-color:aliceblue;&amp;quot;&amp;gt;&lt;br /&gt;
Private Sub Class_Initialize()    &lt;br /&gt;
    &amp;#039;&amp;#039;  Set all property initialization values&lt;br /&gt;
    m.skvFile = app.path + &amp;quot;\&amp;quot; + app.EXEName + &amp;quot;.options.skv&amp;quot;    &lt;br /&gt;
    m.className = CLASS_NAME    &lt;br /&gt;
End Sub&lt;br /&gt;
&lt;br /&gt;
Public Function initialize(parentNamePath As String, _&lt;br /&gt;
                           Optional cmndsDoc As String = &amp;quot;&amp;quot;) As Boolean&lt;br /&gt;
    Dim f As New clsFile&lt;br /&gt;
    &lt;br /&gt;
    With m&lt;br /&gt;
        .className = CLASS_NAME&lt;br /&gt;
        .parentNamePath = parentNamePath&lt;br /&gt;
        .rootNamePath = parentNamePath + SKV_DELIM_PATH + .className&lt;br /&gt;
        &lt;br /&gt;
        .skvFile = app.path + &amp;quot;\&amp;quot; + app.EXEName + &amp;quot;.options.skv&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        .skvFile .skvFile&lt;br /&gt;
    End With&lt;br /&gt;
    &lt;br /&gt;
    ReDim m.SKV(1 To 1024) As String&lt;br /&gt;
        &lt;br /&gt;
    &lt;br /&gt;
    Const delimKey = &amp;quot;.&amp;quot;&lt;br /&gt;
    Const delimElements = &amp;quot;=&amp;quot;&lt;br /&gt;
    Const delimPair = delimElements&lt;br /&gt;
    Const delimValues = &amp;quot;,&amp;quot;&lt;br /&gt;
    Const delimList = vbCrLf&lt;br /&gt;
    Const allocChunk = 2 ^ 10&lt;br /&gt;
    &lt;br /&gt;
    On Error GoTo trap&lt;br /&gt;
    &lt;br /&gt;
    Select Case False &amp;#039;drop-out from chain of truths&lt;br /&gt;
    &lt;br /&gt;
        Case Len(dataFolder) &amp;gt; 0&lt;br /&gt;
            errRaise &amp;quot;Empty &amp;#039;dataFolder&amp;#039; parameter passed to initialize&amp;quot;&lt;br /&gt;
            Exit Function&lt;br /&gt;
        &lt;br /&gt;
        Case f.FolderExists(dataFolder)&lt;br /&gt;
            &lt;br /&gt;
    End Select&lt;br /&gt;
    &lt;br /&gt;
    With m&lt;br /&gt;
        .dataFolder = app.path + &amp;quot;\data&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        .configFile = .dataFolder + &amp;quot;.cfg&amp;quot;&lt;br /&gt;
        .dataFolderOK = folderCheck(.agencyDataFolder)&lt;br /&gt;
        .processName = CLASS_NAME&lt;br /&gt;
        &lt;br /&gt;
        .msgLogAllocChunk = 2 ^ 10&lt;br /&gt;
        .msgLogDelimElements = &amp;quot;:&amp;quot;&lt;br /&gt;
        .msgLogDelimList = vbCrLf&lt;br /&gt;
        .msgLogDelimNamePath = &amp;quot;.&amp;quot;&lt;br /&gt;
        .msgLogFile = app.path + &amp;quot;\&amp;quot; + app.EXEName + &amp;quot;.log&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        .optionsFile = .optionsFile + &amp;quot;\&amp;quot; + app.EXEName + &amp;quot;.opt&amp;quot;&lt;br /&gt;
        &lt;br /&gt;
        &lt;br /&gt;
        .agencyTitle = app.title&lt;br /&gt;
        .agencyRoot = &amp;quot;root&amp;quot;&lt;br /&gt;
    End With&lt;br /&gt;
    &lt;br /&gt;
    With m&lt;br /&gt;
        .msgLogAllocChunk = allocChunk&lt;br /&gt;
        .msgLogDelimElements = &amp;quot;&amp;quot;&lt;br /&gt;
        .msgLogDelimNamePath = &amp;quot;.&amp;quot;&lt;br /&gt;
    End With&lt;br /&gt;
    &lt;br /&gt;
    With m&lt;br /&gt;
        .xNodeDelimKey = XNODE_ROOT_PATH_DELIM&lt;br /&gt;
    End With&lt;br /&gt;
    &lt;br /&gt;
    With m&lt;br /&gt;
&amp;#039;        .cmdArgKeyDelim = CMD_DELIM_ARG_PAIR&lt;br /&gt;
&amp;#039;        .cmdArgPairDelim = CMD_DELIM_ARG_PAIR&lt;br /&gt;
&amp;#039;        .cmdArgsDelim = CMD_DELIM_ARGS&lt;br /&gt;
&amp;#039;        .cmdsAllocChunk = CMDS_ALLOC_CHUNK&lt;br /&gt;
&amp;#039;        .cmdsDelim = CMDS_DELIM_LIST&lt;br /&gt;
    End With&lt;br /&gt;
    &lt;br /&gt;
    With m&lt;br /&gt;
        .selEndpointID = DEF_SELECT_ENDPOINTID&lt;br /&gt;
        .selEngineerID = DEF_SELECT_ENGINEERID&lt;br /&gt;
        .selPromptID = DEF_SELECT_PROMPTID&lt;br /&gt;
        .selQueryID = DEF_SELECT_QUERYID&lt;br /&gt;
        .selResponseID = DEF_SELECT_RESPONSEID&lt;br /&gt;
    End With&lt;br /&gt;
    &lt;br /&gt;
    With m&lt;br /&gt;
        .skvAllocChunk = SKV_ALLOC_CHUNK&lt;br /&gt;
        .skvDelimKey = SKV_DELIM_KEY&lt;br /&gt;
        .skvDelimList = SKV_DELIM_LIST&lt;br /&gt;
        .skvDelimPair = SKV_DELIM_PAIR&lt;br /&gt;
        .skvDelimValues = SKV_DELIM_VALUES&lt;br /&gt;
    End With&lt;br /&gt;
            &lt;br /&gt;
    With m&lt;br /&gt;
        &amp;#039;&amp;#039; Deserialized in alphabetic order --Serialized in the same alphabetic order &amp;#039;&amp;#039;&lt;br /&gt;
        .agencyConfigFile = config(i): i = i + 1&lt;br /&gt;
        .agencyMsgLogFile = config(i): i = i + 1&lt;br /&gt;
        .agencyTitle = config(i): i = i + 1&lt;br /&gt;
        .agencyRoot = config(i): i = i + 1&lt;br /&gt;
        &lt;br /&gt;
        .cmdArgPairDelim = config(i): i = i + 1&lt;br /&gt;
        .cmdArgsDelim = config(i): i = i + 1&lt;br /&gt;
        .cmdsAllocChunk = config(i): i = i + 1&lt;br /&gt;
        .cmdsDelim = config(i): i = i + 1&lt;br /&gt;
        &lt;br /&gt;
        .selFileConfig = config(i): i = i + 1&lt;br /&gt;
        .selEndpointID = config(i): i = i + 1&lt;br /&gt;
        .selEngineerID = config(i): i = i + 1&lt;br /&gt;
        .selPromptID = config(i): i = i + 1&lt;br /&gt;
        .selQueryID = config(i): i = i + 1&lt;br /&gt;
        .selResponseID = config(i): i = i + 1&lt;br /&gt;
        &lt;br /&gt;
        .skvAllocChunk = config(i): i = i + 1&lt;br /&gt;
        .skvDelimKey = config(i): i = i + 1&lt;br /&gt;
        .skvDelimList = config(i): i = i + 1&lt;br /&gt;
        .skvDelimPair = config(i): i = i + 1&lt;br /&gt;
        .skvDelimValues = config(i): i = i + 1&lt;br /&gt;
        &lt;br /&gt;
        .msgLogDelimElements = config(i): i = i + 1&lt;br /&gt;
        .msgLogDelimNamePath = config(i): i = i + 1&lt;br /&gt;
        .msgLogAllocChunk = config(i): i = i + 1&lt;br /&gt;
        .msgLogDelimList = config(i): i = i + 1&lt;br /&gt;
        &lt;br /&gt;
        .xNodeDelimKey = config(i): i = i + 1&lt;br /&gt;
        &lt;br /&gt;
        .status = initInitialized&lt;br /&gt;
    End With&lt;br /&gt;
    &lt;br /&gt;
    initialize = True&lt;br /&gt;
    &lt;br /&gt;
    Exit Function&lt;br /&gt;
trap:&lt;br /&gt;
    Select Case err.Number&lt;br /&gt;
        Case Else&lt;br /&gt;
            err.Raise errFormat&lt;br /&gt;
    End Select&lt;br /&gt;
End Function&lt;br /&gt;
&lt;br /&gt;
Private Sub Class_Terminate()&lt;br /&gt;
    &lt;br /&gt;
    On Error Resume Next&lt;br /&gt;
    &lt;br /&gt;
    With New clsFile&lt;br /&gt;
        &amp;#039;.save (m.processParentPath)&lt;br /&gt;
    End With&lt;br /&gt;
End Sub&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre &amp;gt;&lt;br /&gt;
Public Function folderCheck(FolderPath As String, createIfMissing As Boolean) As Boolean&lt;br /&gt;
    On Error GoTo trap&lt;br /&gt;
    &lt;br /&gt;
    If FolderExists(FolderPath) Then&lt;br /&gt;
        folderCheck = True&lt;br /&gt;
    Else&lt;br /&gt;
        If createIfMissing Then MkDir FolderPath&lt;br /&gt;
        If FolderExists(FolderPath) Then&lt;br /&gt;
            folderCheck = True&lt;br /&gt;
        End If&lt;br /&gt;
    End If&lt;br /&gt;
    &lt;br /&gt;
trap:&lt;br /&gt;
End Function&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; Cmds &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Public Property Get cmdArgPairDelim() As String:    cmdArgPairDelim = m.cmdArgPairDelim: End Property&lt;br /&gt;
Public Property Let cmdArgPairDelim(value As String):    m.cmdArgPairDelim = value: End Property&lt;br /&gt;
&lt;br /&gt;
Public Property Get cmdArgsDelim() As String:    cmdArgsDelim = m.cmdArgsDelim: End Property&lt;br /&gt;
Public Property Let cmdArgsDelim(value As String):    m.cmdArgsDelim = value: End Property&lt;br /&gt;
&lt;br /&gt;
Public Property Get cmdsAllocChunk() As Long:    cmdsAllocChunk = m.cmdsAllocChunk: End Property&lt;br /&gt;
Public Property Let cmdsAllocChunk(value As Long):    m.cmdsAllocChunk = value: End Property&lt;br /&gt;
&lt;br /&gt;
Public Property Get cmdsDelimList() As String:    cmdsDelimList = m.cmdsDelim: End Property&lt;br /&gt;
Public Property Let cmdsDelimList(value As String): m.cmdsDelim = value: End Property&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; SKV &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Public Property Get skvAllocChunk() As Long:    skvAllocChunk = m.skvAllocChunk: End Property&lt;br /&gt;
Public Property Let skvAllocChunk(value As Long):    m.skvAllocChunk = value: End Property&lt;br /&gt;
&lt;br /&gt;
Public Property Get skvAllocInit() As Long:    skvAllocInit = m.skvAllocInit: End Property&lt;br /&gt;
Public Property Let skvAllocInit(value As Long):    m.skvAllocInit = value: End Property&lt;br /&gt;
    &lt;br /&gt;
Public Property Get skvDelimKey() As String:    key = m.skvDelimKey: End Property&lt;br /&gt;
Public Property Let skvDelimKey(value As String):    m.skvDelimKey = value: End Property&lt;br /&gt;
&lt;br /&gt;
Public Property Get skvDelimList() As String:    skvDelimList = m.skvDelimList: End Property&lt;br /&gt;
Public Property Let skvDelimList(value As String):    m.skvDelimList = value: End Property&lt;br /&gt;
&lt;br /&gt;
Public Property Get skvDelimPair() As String:    skvDelimPair = m.skvDelimPair: End Property&lt;br /&gt;
Public Property Let skvDelimPair(value As String):    m.skvDelimPair = value: End Property&lt;br /&gt;
&lt;br /&gt;
Public Property Get skvDelimValues() As String:    skvDelimValues = m.skvDelimValues: End Property&lt;br /&gt;
Public Property Let skvDelimValues(value As String):    m.skvDelimValues = value: End Property&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;  NamePath msg log  &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Public Property Get msgLogAllocChunk() As Long:    msgLogAllocChunk = m.msgLogAllocChunk: End Property&lt;br /&gt;
Public Property Let msgLogAllocChunk(value As Long):    m.msgLogAllocChunk = value: End Property&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;  elements = epoch, ParentPath, message&lt;br /&gt;
Public Property Get msgLogDelimElements() As String:    msgLogDelimElements = m.msgLogDelimElements: End Property&lt;br /&gt;
Public Property Let msgLogDelimElements(value As String):    m.msgLogDelimElements = value: End Property&lt;br /&gt;
&lt;br /&gt;
Public Property Get msgLogDelimList() As String:    msgLogDelimList = m.msgLogDelimList: End Property&lt;br /&gt;
Public Property Let msgLogDelimList(value As String):    m.msgLogDelimList = value: End Property&lt;br /&gt;
&lt;br /&gt;
Public Property Get msgLogDelimNamePath() As String:    msgLogDelimNamePath = m.msgLogDelimNamePath: End Property&lt;br /&gt;
Public Property Let msgLogDelimNamePath(value As String):    m.msgLogDelimNamePath = value: End Property&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039; Shadow i/o &amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Public Function load() As Boolean&lt;br /&gt;
    On Error GoTo trap&lt;br /&gt;
    &amp;#039;&amp;#039;&lt;br /&gt;
    With New clsFile&lt;br /&gt;
        deserialize .load(s.agencyConfigFile)&lt;br /&gt;
    End With&lt;br /&gt;
    &lt;br /&gt;
    RaiseEvent Loaded(Me)&lt;br /&gt;
    &lt;br /&gt;
    load = True&lt;br /&gt;
    Exit Function&lt;br /&gt;
trap:&lt;br /&gt;
    Select Case err.Number&lt;br /&gt;
        Case 1&lt;br /&gt;
        Case Else&lt;br /&gt;
            MsgBox formatErr&lt;br /&gt;
    End Select&lt;br /&gt;
&lt;br /&gt;
End Function&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Public Function save() As Boolean&lt;br /&gt;
    On Error GoTo trap&lt;br /&gt;
    &lt;br /&gt;
    With New clsFile&lt;br /&gt;
        save = .save(serialize())&lt;br /&gt;
    End With&lt;br /&gt;
    save = True&lt;br /&gt;
    Exit Function&lt;br /&gt;
trap:&lt;br /&gt;
    errRaise &amp;quot;save&amp;quot;&lt;br /&gt;
End Function&lt;br /&gt;
&lt;br /&gt;
==serialize==&lt;br /&gt;
&amp;lt;pre style=&amp;quot;margin-left:3em; font:normal 14px terminal;&amp;quot;&amp;gt;&lt;br /&gt;
Public Function serialize(rootPrefix As String) As String&lt;br /&gt;
&lt;br /&gt;
    Dim config(1 To 25) As String&lt;br /&gt;
    &lt;br /&gt;
    With m        &lt;br /&gt;
        config(1) = &amp;quot;agencyDataFolder&amp;quot; + SKV_DELIM_PAIR + .processName&lt;br /&gt;
        config(2) = &amp;quot;agencyConfigFile&amp;quot; + SKV_DELIM_PAIR + .skvAlloc&lt;br /&gt;
        config(3) = &amp;quot;agencyOptionsFile&amp;quot; + SKV_DELIM_PAIR + .skvFile&lt;br /&gt;
        config(4) = &amp;quot;agencyModuleName&amp;quot; + SKV_DELIM_PAIR + .agencyModuleName&lt;br /&gt;
                &lt;br /&gt;
        config(4) = &amp;quot;agencyTitle&amp;quot; + SKV_DELIM_PAIR + .agencyTitle&lt;br /&gt;
        config(5) = &amp;quot;agencyParentPath&amp;quot; + SKV_DELIM_PAIR + .agencyParentPath&lt;br /&gt;
        &lt;br /&gt;
        config(6) = &amp;quot;cmdArgPairDelim&amp;quot; + SKV_DELIM_PAIR + .cmdArgPairDelim&lt;br /&gt;
        config(7) = &amp;quot;cmdArgsDelim&amp;quot; + SKV_DELIM_PAIR + .cmdArgsDelim&lt;br /&gt;
        config(8) = &amp;quot;cmdsAllocChunk&amp;quot; + SKV_DELIM_PAIR + .cmdsAllocChunk&lt;br /&gt;
        config(9) = &amp;quot;cmdsDelim&amp;quot; + SKV_DELIM_PAIR + .cmdsDelim&lt;br /&gt;
                            &lt;br /&gt;
        config(10) = &amp;quot;selEndpointID&amp;quot; + SKV_DELIM_PAIR + .selEndpointID&lt;br /&gt;
        config(11) = &amp;quot;selEngineerID&amp;quot; + SKV_DELIM_PAIR + .selEngineerID&lt;br /&gt;
        config(12) = &amp;quot;selPromptID&amp;quot; + SKV_DELIM_PAIR + .selPromptID&lt;br /&gt;
        config(13) = &amp;quot;selQueryID&amp;quot; + SKV_DELIM_PAIR + .selQueryID&lt;br /&gt;
        config(14) = &amp;quot;selResponseID&amp;quot; + SKV_DELIM_PAIR + .selResponseID&lt;br /&gt;
        config(15) = &amp;quot;selConfigFile&amp;quot; + SKV_DELIM_PAIR + .selConfigFile&lt;br /&gt;
        &lt;br /&gt;
        config(16) = &amp;quot;skvAllocChunk&amp;quot; + SKV_DELIM_PAIR + .skvAllocChunk&lt;br /&gt;
        config(17) = &amp;quot;skvDelimKey&amp;quot; + SKV_DELIM_PAIR + .skvDelimKey&lt;br /&gt;
        config(18) = &amp;quot;skvDelimList&amp;quot; + SKV_DELIM_PAIR + .skvDelimList&lt;br /&gt;
        config(19) = &amp;quot;skvDelimPair&amp;quot; + SKV_DELIM_PAIR + .skvDelimPair&lt;br /&gt;
        config(20) = &amp;quot;skvDelimValues&amp;quot; + SKV_DELIM_PAIR + .skvDelimValues&lt;br /&gt;
        &lt;br /&gt;
        config(21) = &amp;quot;msgsAllocChunk&amp;quot; + SKV_DELIM_PAIR + .msgLogAllocChunk&lt;br /&gt;
        config(22) = &amp;quot;msgDelimElements&amp;quot; + SKV_DELIM_PAIR + .msgLogDelimElements&lt;br /&gt;
        config(23) = &amp;quot;msgsDelimList&amp;quot; + SKV_DELIM_PAIR + .msgLogDelimList&lt;br /&gt;
        config(24) = &amp;quot;msgDelimNamePath&amp;quot; + SKV_DELIM_PAIR + .msgLogDelimNamePath&lt;br /&gt;
        &lt;br /&gt;
        config(25) = &amp;quot;xNodeDelimKey&amp;quot; + SKV_DELIM_PAIR + .xNodeDelimKey&lt;br /&gt;
    End With&lt;br /&gt;
    &lt;br /&gt;
    serialize = Join(config, SKV_DELIM_LIST)&lt;br /&gt;
End Function&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==deserialize==&lt;br /&gt;
&amp;lt;pre style=&amp;quot;margin-left:3em; font:normal 14px terminal;&amp;quot;&amp;gt;&lt;br /&gt;
Public Function deserializeSKV(skvConfiguration As String) As Boolean&lt;br /&gt;
    Dim config(1 To 25)&lt;br /&gt;
    &lt;br /&gt;
    config = Split(skvConfiguration, SKV_DELIM_LIST)&lt;br /&gt;
    &lt;br /&gt;
    With m&lt;br /&gt;
        m.SKV = Split(skvConfiguration, SKV_DELIM_LIST)&lt;br /&gt;
        &lt;br /&gt;
    End With&lt;br /&gt;
&lt;br /&gt;
    deserializeSKV = True&lt;br /&gt;
    Exit Function&lt;br /&gt;
trap:&lt;br /&gt;
    errRaise &amp;quot;deserializeSKV&amp;quot;&lt;br /&gt;
End Function&lt;br /&gt;
&lt;br /&gt;
Public Function append(SKV As String, _&lt;br /&gt;
                       value As String _&lt;br /&gt;
                       ) As Long&lt;br /&gt;
    &amp;#039;&amp;#039;  Return index of appended SKV element&lt;br /&gt;
    On Error GoTo trap&lt;br /&gt;
    &lt;br /&gt;
    With m&lt;br /&gt;
        &lt;br /&gt;
    End With&lt;br /&gt;
trap:&lt;br /&gt;
    Select Case err.Number&lt;br /&gt;
        Case 9 &amp;#039;array failed to&lt;br /&gt;
            &amp;#039;&amp;#039;  Allocate more array storage&lt;br /&gt;
            If .skvCount &amp;gt; UBound(.SKV) Then&lt;br /&gt;
                err.clear&lt;br /&gt;
                On Error Resume Next&lt;br /&gt;
                ReDim Preserve m.SKV(1 To .skvCount + .skvAlloc)&lt;br /&gt;
                If Not err Then Resume&lt;br /&gt;
            End If&lt;br /&gt;
        Case Else&lt;br /&gt;
            MSGL&lt;br /&gt;
            errRaise &amp;quot;Non-trapped error appending SKV=value Options element&amp;quot;&lt;br /&gt;
    End Select&lt;br /&gt;
End Function&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>XenoEngineer</name></author>
	</entry>
</feed>