⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ch14.htm

📁 CGI programming is the hottest stuff to look out for in this book
💻 HTM
📖 第 1 页 / 共 5 页
字号:
Skip that blank<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Do While Mid$(buf,
i, 1) = &quot; &quot;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' Skip
any additional whitespace<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i
= i + 1<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Loop<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n = n + 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
Bump array index<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Loop<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;argv(n) = Trim$(Mid$(buf, i, (l - i +
1))) ' Get last arg<BR>
&nbsp;&nbsp;&nbsp;&nbsp;GetArgs = n + 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
' Return arg count<BR>
<BR>
End Function<BR>
<BR>
'--------------------------------------------------------------------------
<BR>
'<BR>
'&nbsp;&nbsp;&nbsp;GetExtraHeaders() - Create the array of extra
header structs<BR>
'<BR>
' Enumerate the keys in the [Extra Headers] section of the profile
file,<BR>
' then get the value for each of the keys.<BR>
'--------------------------------------------------------------------------
<BR>
Private Sub GetExtraHeaders()<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Dim sList As String<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Dim i As Integer, j As Integer, l As Integer,
n As Integer<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;sList = GetProfile(&quot;Extra Headers&quot;,
&quot;&quot;) ' Get key list<BR>
&nbsp;&nbsp;&nbsp;&nbsp;l = Len(sList)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
Length incl. trailing null<BR>
&nbsp;&nbsp;&nbsp;&nbsp;i = 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
' Start at 1st character<BR>
&nbsp;&nbsp;&nbsp;&nbsp;n = 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
' Index in array<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Do While ((i &lt; l) And (n &lt; MAX_XHDR))&nbsp;&nbsp;&nbsp;'
Safety stop here<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j = InStr(i, sList,
Chr$(0))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' J -&gt;
next null<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CGI_ExtraHeaders(n).key
= Mid$(sList, i, j - i) ' Get Key, then value<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CGI_ExtraHeaders(n).value
= GetProfile(&quot;Extra Headers&quot;, CGI_ExtraHeaders(n).key)
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i = j + 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
Bump pointer<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n = n + 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
Bump array index<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Loop<BR>
&nbsp;&nbsp;&nbsp;&nbsp;CGI_NumExtraHeaders = n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
' Fill in global count<BR>
<BR>
End Sub<BR>
<BR>
'--------------------------------------------------------------------------
<BR>
'<BR>
'&nbsp;&nbsp;&nbsp;GetFormTuples() - Create the array of POST
form input key=value pairs<BR>
'<BR>
'--------------------------------------------------------------------------
<BR>
Private Sub GetFormTuples()<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Dim sList As String<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Dim i As Integer, j As Integer, k As Integer
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Dim l As Integer, m As Integer, n As Integer
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Dim s As Long<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Dim buf As String<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Dim extName As String<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Dim extFile As Integer<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Dim extlen As Long<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;n = 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
' Index in array<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;'<BR>
&nbsp;&nbsp;&nbsp;&nbsp;' Do the easy one first: [Form Literal]
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;'<BR>
&nbsp;&nbsp;&nbsp;&nbsp;sList = GetProfile(&quot;Form Literal&quot;,
&quot;&quot;)&nbsp;&nbsp;' Get key list<BR>
&nbsp;&nbsp;&nbsp;&nbsp;l = Len(sList)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
Length incl. trailing null<BR>
&nbsp;&nbsp;&nbsp;&nbsp;i = 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
' Start at 1st character<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Do While ((i &lt; l) And (n &lt; MAX_FORM_TUPLES))
' Safety stop here<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j = InStr(i, sList,
Chr$(0))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' J -&gt;
next null<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CGI_FormTuples(n).key
= Mid$(sList, i, j - i) ' Get Key, then value<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CGI_FormTuples(n).value
= GetProfile(&quot;Form Literal&quot;, CGI_FormTuples(n).key)
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i = j + 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
Bump pointer<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n = n + 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
Bump array index<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Loop<BR>
&nbsp;&nbsp;&nbsp;&nbsp;'<BR>
&nbsp;&nbsp;&nbsp;&nbsp;' Now do the external ones: [Form External]
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;'<BR>
&nbsp;&nbsp;&nbsp;&nbsp;sList = GetProfile(&quot;Form External&quot;,
&quot;&quot;) ' Get key list<BR>
&nbsp;&nbsp;&nbsp;&nbsp;l = Len(sList)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
Length incl. trailing null<BR>
&nbsp;&nbsp;&nbsp;&nbsp;i = 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
' Start at 1st character<BR>
&nbsp;&nbsp;&nbsp;&nbsp;extFile = FreeFile<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Do While ((i &lt; l) And (n &lt; MAX_FORM_TUPLES))
' Safety stop here<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j = InStr(i, sList,
Chr$(0))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' J -&gt;
next null<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CGI_FormTuples(n).key
= Mid$(sList, i, j - i) ' Get Key, then pathname<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf = GetProfile(&quot;Form
External&quot;, CGI_FormTuples(n).key)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k = InStr(buf,
&quot; &quot;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
' Split file &amp; length<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;extName = Mid$(buf,
1, k - 1)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
' Pathname<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k = k + 1<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;extlen = CLng(Mid$(buf,
k, Len(buf) - k + 1)) ' Length<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' Use feature
of GET to read content in one call<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Open extName For
Binary Access Read As #extFile<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CGI_FormTuples(n).value
= String$(extlen, &quot; &quot;) ' Breathe in...<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Get #extFile,
, CGI_FormTuples(n).value 'GULP!<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Close #extFile
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i = j + 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
Bump pointer<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n = n + 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
Bump array index<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Loop<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;CGI_NumFormTuples = n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
' Number of fields decoded<BR>
&nbsp;&nbsp;&nbsp;&nbsp;n = 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
' Reset counter<BR>
&nbsp;&nbsp;&nbsp;&nbsp;'<BR>
&nbsp;&nbsp;&nbsp;&nbsp;' Next, the [Form Huge] section. Will
this ever get executed?<BR>
&nbsp;&nbsp;&nbsp;&nbsp;'<BR>
&nbsp;&nbsp;&nbsp;&nbsp;sList = GetProfile(&quot;Form Huge&quot;,
&quot;&quot;)&nbsp;&nbsp;&nbsp;&nbsp; ' Get key list<BR>
&nbsp;&nbsp;&nbsp;&nbsp;l = Len(sList)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
Length incl. trailing null<BR>
&nbsp;&nbsp;&nbsp;&nbsp;i = 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
' Start at 1st character<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Do While ((i &lt; l) And (n &lt; MAX_FORM_TUPLES))
' Safety stop here<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j = InStr(i, sList,
Chr$(0))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' J -&gt;
next null<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CGI_HugeTuples(n).key
= Mid$(sList, i, j - i) ' Get Key<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf = GetProfile(&quot;Form
Huge&quot;, CGI_HugeTuples(n).key) ' &quot;offset length&quot;
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;k = InStr(buf,
&quot; &quot;)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
' Delimiter<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CGI_HugeTuples(n).offset
= CLng(Mid$(buf, 1, (k - 1)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CGI_HugeTuples(n).length
= CLng(Mid$(buf, k, (Len(buf) - k + 1)))<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i = j + 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
Bump pointer<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n = n + 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
Bump array index<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Loop<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;CGI_NumHugeTuples = n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
' Fill in global count<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;n = 0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
' Reset counter<BR>
&nbsp;&nbsp;&nbsp;&nbsp;'<BR>
&nbsp;&nbsp;&nbsp;&nbsp;' Finally, the [Form File] section.<BR>
&nbsp;&nbsp;&nbsp;&nbsp;'<BR>
&nbsp;&nbsp;&nbsp;&nbsp;sList = GetProfile(&quot;Form File&quot;,
&quot;&quot;)&nbsp;&nbsp;&nbsp;&nbsp; ' Get key list<BR>
&nbsp;&nbsp;&nbsp;&nbsp;l = Len(sList)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
Length incl. trailing null<BR>
&nbsp;&nbsp;&nbsp;&nbsp;i = 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
' Start at 1st character<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Do While ((i &lt; l) And (n &lt; MAX_FILE_TUPLES))
' Safety stop here<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;j = InStr(i, sList,
Chr$(0))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;' J -&gt;
next null<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CGI_FileTuples(n).key
= Mid$(sList, i, j - i) ' Get Key<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;buf = GetProfile(&quot;Form
File&quot;, CGI_FileTuples(n).key)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ParseFileValue
buf, CGI_FileTuples(n)&nbsp;&nbsp;' Complicated, use Sub<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;i = j + 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
Bump pointer<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;n = n + 1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;'
Bump array index<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Loop<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;CGI_NumFileTuples = n&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
' Fill in global count<BR>
<BR>
End Sub<BR>
<BR>
'--------------------------------------------------------------------------
<BR>
'<BR>
'&nbsp;&nbsp;&nbsp;GetProfile() - Get a value or enumerate keys
in CGI_Profile file<BR>
'<BR>
' Get a value given the section and key, or enumerate keys given
the<BR>
' section name and &quot;&quot; for the key. If enumerating, the
list of keys for<BR>
' the given section is returned as a null-separated string, with
a<BR>
' double null at the end.<BR>
'<BR>
' VB handles this with flair! I couldn't believe my eyes when
I tried this.<BR>
'--------------------------------------------------------------------------
<BR>
Private Function GetProfile(sSection As String, sKey As String)
As String<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Dim retLen As Long<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Dim buf As String * ENUM_BUF_SIZE<BR>
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;If sKey &lt;&gt; &quot;&quot; Then<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;retLen = GetPrivateProfileString(sSection,
sKey, &quot;&quot;, buf, ENUM_BUF_SIZE, CGI_ProfileFile)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Else<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;retLen = GetPrivateProfileString(sSection,
0&amp;, &quot;&quot;, buf, ENUM_BUF_SIZE, CGI_ProfileFile)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;End If<BR>
&nbsp;&nbsp;&nbsp;&nbsp;If retLen = 0 Then<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetProfile = &quot;&quot;
<BR>
&nbsp;&nbsp;&nbsp;&nbsp;Else<BR>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;GetProfile = Left$(buf,
retLen)<BR>
&nbsp;&nbsp;&nbsp;&nbsp;End If<BR>
<BR>
End Function<BR>
<BR>
'----------------------------------------------------------------------
<BR>
'<BR>
' Get the value of a &quot;small&quot; form field given the key
<BR>
'<BR>
' Signals an error if field does not exist<BR>
'<BR>
'----------------------------------------------------------------------
<BR>
Function GetSmallField(key As String) As String<BR>
&nbsp;&nbsp;&nbsp;&nbsp;D

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -