<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <title>SPS Blog</title>
    <link>http://www.sweetpotatosoftware.com/SPSBlog/</link>
    <description>Microsoft Programming Technologies</description>
    <language>en-us</language>
    <copyright>Craig Boyd</copyright>
    <lastBuildDate>Fri, 19 Dec 2008 09:43:59 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 2.3.9074.18820</generator>
    <managingEditor>craig@sweetpotatosoftware.com</managingEditor>
    <webMaster>craig@sweetpotatosoftware.com</webMaster>
    <item>
      <trackback:ping>http://www.sweetpotatosoftware.com/SPSBlog/Trackback.aspx?guid=5ac8d202-98b4-4ee8-998d-692e4b597bec</trackback:ping>
      <pingback:server>http://www.sweetpotatosoftware.com/SPSBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,5ac8d202-98b4-4ee8-998d-692e4b597bec.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.sweetpotatosoftware.com/SPSBlog/CommentView,guid,5ac8d202-98b4-4ee8-998d-692e4b597bec.aspx</wfw:comment>
      <wfw:commentRss>http://www.sweetpotatosoftware.com/SPSBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=5ac8d202-98b4-4ee8-998d-692e4b597bec</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <b>JSON Class Update<br /></b>Since my <a href="http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,5f96efd7-f350-4bc8-86c5-caffd9e833eb.aspx">initial
post</a> regarding this class, work has continued improving it. A number of fixes
and enhancement can be found in the latest version...<br /><br /><ul><li><b>Fixes to parse method</b> - There was a problem with brace matching for "{}" and
"[]" when nested in certain ways.</li><li><b>Fixes to UseUTCDatetime functionality</b> - rules are now as follows:</li><ul><li>
UseUTCDateTime = .F. &amp;&amp; Datetimes will stringify including Local offset from
UTC</li><li>
UseUTCDateTime = .T. &amp;&amp; Datetimes will stringify as UTC equivalent for Local</li><li>
Parse() &amp;&amp; will always return Local equivalent</li></ul><li><b>Fixes to GetTimezoneOffset method</b> - now respects Standard/Daylight boundaries
of datetimes</li><li><b>Fixed Stringify</b> - cursors are serialized to valid JSON now<br /></li><li><b>Added KeyForCursor property</b> - this allows a JSON key to be specified for identifying
cursors (defaulted to "VFPData")</li><li><b>Enhanced Stringify and Parse methods</b> - they now handle the VFP Collection class
with aplomb</li><li><b>Added KeyForItems property</b> - when serializing Collections, the key for the
contained JSON object's array property can be defined (defaulted to "items")</li><li><b>Renamed DateSerializationType property</b> - it is now ParseDateType</li><li><b>Enhanced Parse</b> - JSON class will now (optionally) respect Class and ClassLibrary
properties if they exist in a JSON object being deserialized (see ParseRespectClass
property). This means that if you Stringify() a VFP Form and then Parse() the JSON
(with ParseRespectClass = .T.) you will get a Form object back rather than an Empty
object with the same properties as the Form.</li></ul>
I would consider the JSON class production-ready at this point. This doesn't mean
that bugs won't be found in the future, but it has been hammered on enough that I
wouldn't hesitate to use it in a production application.<br /><br /><b>Visual FoxPro Now Listed<br /></b>I got in touch with <a href="http://www.crockford.com/">Douglas Crockford</a> and
was able to get Visual FoxPro listed on <a href="http://www.json.org/">JSON.org</a> with
a link to my initial post. I appreciate Douglas Crockford taking the time out of his
busy schedule to list Visual FoxPro on the JSON site.<br /><br /><b>Special Thank You<br /></b>Nearly all of the fixes and enhancements provided in this version of the JSON
class were made possible by the help and prodding I received from Frank Dietrich of
Berlin. He is an extremely bright fellow. Implementing the Timezone and Daylight vs.
Standard stuff drove us both to the brink. I sincerely doubt I could have done it
without his help.<br /><br /><a href="http://www.sweetpotatosoftware.com/files/json.zip">Download the JSON class
library (approx. 59 KB)</a><br /><br /><span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"><font size="2" face="Verdana">The
download contains the JSON class in both VCX and PRG format. They are the same. Use
whichever one you prefe</font></span>r.<br /><img width="0" height="0" src="http://www.sweetpotatosoftware.com/SPSBlog/aggbug.ashx?id=5ac8d202-98b4-4ee8-998d-692e4b597bec" /></body>
      <title>Visual Foxpro JSON Class Update</title>
      <guid isPermaLink="false">http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,5ac8d202-98b4-4ee8-998d-692e4b597bec.aspx</guid>
      <link>http://www.sweetpotatosoftware.com/SPSBlog/2008/12/19/VisualFoxproJSONClassUpdate.aspx</link>
      <pubDate>Fri, 19 Dec 2008 09:43:59 GMT</pubDate>
      <description>&lt;b&gt;JSON Class Update&lt;br&gt;
&lt;/b&gt;Since my &lt;a href="http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,5f96efd7-f350-4bc8-86c5-caffd9e833eb.aspx"&gt;initial
post&lt;/a&gt; regarding this class, work has continued improving it. A number of fixes
and enhancement can be found in the latest version...&lt;br&gt;
&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;b&gt;Fixes to parse method&lt;/b&gt; - There was a problem with brace matching for "{}" and
"[]" when nested in certain ways.&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Fixes to UseUTCDatetime functionality&lt;/b&gt; - rules are now as follows:&lt;/li&gt;
&lt;ul&gt;
&lt;li&gt;
UseUTCDateTime = .F. &amp;amp;&amp;amp; Datetimes will stringify including Local offset from
UTC&lt;/li&gt;
&lt;li&gt;
UseUTCDateTime = .T. &amp;amp;&amp;amp; Datetimes will stringify as UTC equivalent for Local&lt;/li&gt;
&lt;li&gt;
Parse() &amp;amp;&amp;amp; will always return Local equivalent&lt;/li&gt;
&lt;/ul&gt;
&lt;li&gt;
&lt;b&gt;Fixes to GetTimezoneOffset method&lt;/b&gt; - now respects Standard/Daylight boundaries
of datetimes&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Fixed Stringify&lt;/b&gt; - cursors are serialized to valid JSON now&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Added KeyForCursor property&lt;/b&gt; - this allows a JSON key to be specified for identifying
cursors (defaulted to "VFPData")&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Enhanced Stringify and Parse methods&lt;/b&gt; - they now handle the VFP Collection class
with aplomb&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Added KeyForItems property&lt;/b&gt; - when serializing Collections, the key for the
contained JSON object's array property can be defined (defaulted to "items")&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Renamed DateSerializationType property&lt;/b&gt; - it is now ParseDateType&lt;/li&gt;
&lt;li&gt;
&lt;b&gt;Enhanced Parse&lt;/b&gt; - JSON class will now (optionally) respect Class and ClassLibrary
properties if they exist in a JSON object being deserialized (see ParseRespectClass
property). This means that if you Stringify() a VFP Form and then Parse() the JSON
(with ParseRespectClass = .T.) you will get a Form object back rather than an Empty
object with the same properties as the Form.&lt;/li&gt;
&lt;/ul&gt;
I would consider the JSON class production-ready at this point. This doesn't mean
that bugs won't be found in the future, but it has been hammered on enough that I
wouldn't hesitate to use it in a production application.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Visual FoxPro Now Listed&lt;br&gt;
&lt;/b&gt;I got in touch with &lt;a href="http://www.crockford.com/"&gt;Douglas Crockford&lt;/a&gt; and
was able to get Visual FoxPro listed on &lt;a href="http://www.json.org/"&gt;JSON.org&lt;/a&gt; with
a link to my initial post. I appreciate Douglas Crockford taking the time out of his
busy schedule to list Visual FoxPro on the JSON site.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Special Thank You&lt;br&gt;
&lt;/b&gt;Nearly all of the fixes and enhancements provided in this version of the JSON
class were made possible by the help and prodding I received from Frank Dietrich of
Berlin. He is an extremely bright fellow. Implementing the Timezone and Daylight vs.
Standard stuff drove us both to the brink. I sincerely doubt I could have done it
without his help.&lt;br&gt;
&lt;br&gt;
&lt;a href="http://www.sweetpotatosoftware.com/files/json.zip"&gt;Download the JSON class
library (approx. 59 KB)&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
&lt;span style="font-size: 11px; color: black; font-family: Courier New; background-color: transparent;"&gt;&lt;font size="2" face="Verdana"&gt;The
download contains the JSON class in both VCX and PRG format. They are the same. Use
whichever one you prefe&lt;/font&gt;&lt;/span&gt;r.&lt;br&gt;
&lt;img width="0" height="0" src="http://www.sweetpotatosoftware.com/SPSBlog/aggbug.ashx?id=5ac8d202-98b4-4ee8-998d-692e4b597bec" /&gt;</description>
      <comments>http://www.sweetpotatosoftware.com/SPSBlog/CommentView,guid,5ac8d202-98b4-4ee8-998d-692e4b597bec.aspx</comments>
      <category>Information Technology</category>
      <category>Visual Foxpro</category>
    </item>
    <item>
      <trackback:ping>http://www.sweetpotatosoftware.com/SPSBlog/Trackback.aspx?guid=416ae65b-0af2-4145-8637-aa0d81d77637</trackback:ping>
      <pingback:server>http://www.sweetpotatosoftware.com/SPSBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,416ae65b-0af2-4145-8637-aa0d81d77637.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.sweetpotatosoftware.com/SPSBlog/CommentView,guid,416ae65b-0af2-4145-8637-aa0d81d77637.aspx</wfw:comment>
      <wfw:commentRss>http://www.sweetpotatosoftware.com/SPSBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=416ae65b-0af2-4145-8637-aa0d81d77637</wfw:commentRss>
      <slash:comments>14</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>VFPCompression Bug Fixes</strong>
          <br />
I received some really good feedback after posting my <a href="http://www.sweetpotatosoftware.com/SPSBlog/CommentView,guid,ebdf7fe4-f97c-4e61-9018-3007904ed8da.aspx#commentstart">previous
blog entry</a> concerning this library from Curt Hamlin and Eduard. There were two
bugs there that I felt needed some immediate attention, so in this blog entry I present
a version of VFPCompression that addresses them.<br /><br />
The first bug was the one that Curt Hamlin ran into where something screwy was going
on if the zip file wasn't somehow relative to the files or folders being zipped. The
following code...
</p>
        <p>
ZipOpen("F:\MyZipFile.zip") &amp;&amp; note zip is going to F: drive<br />
ZipFolder("C:\MyFolder\", .F.)  &amp;&amp; note folder being zipped is on C:
drive<br />
ZipClose() 
<br /><br />
...would result in an empty zip file being created (not good). While the other bug
was the one that Eduard reported where the ZipFolderQuick function wasn't applying
the optional password to the files being zipped. To make a long story short, I was
able to verify that these were actual bugs in the library, and I have uploaded
a new version of VFPCompression.fll that fixes them.
</p>
        <p>
          <strong>VFPCompression Enhancement</strong>
          <br />
Something that I didn't like in the FLL was that in order to extract the contents
of a zip to a particular folder that folder had to already exist in the file system.
I decided that the FLL should try and create a folder if it doesn't already exist
when extracting, which it now does.
</p>
        <p>
          <a href="http://www.sweetpotatosoftware.com/files/vfpcompression.zip">VFPCompression
FLL Download (approx. 38 KB)</a>
          <br />
          <br />
The VFP Compression Library sample code and documentation can still be found at my <a href="http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,ebdf7fe4-f97c-4e61-9018-3007904ed8da.aspx">previous
blog entry</a>.
</p>
        <img width="0" height="0" src="http://www.sweetpotatosoftware.com/SPSBlog/aggbug.ashx?id=416ae65b-0af2-4145-8637-aa0d81d77637" />
      </body>
      <title>VFPCompression Update - A Couple of Fixes and a Slight Enhancement</title>
      <guid isPermaLink="false">http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,416ae65b-0af2-4145-8637-aa0d81d77637.aspx</guid>
      <link>http://www.sweetpotatosoftware.com/SPSBlog/2008/12/08/VFPCompressionUpdateACoupleOfFixesAndASlightEnhancement.aspx</link>
      <pubDate>Mon, 08 Dec 2008 11:35:21 GMT</pubDate>
      <description>&lt;p&gt;
&lt;strong&gt;VFPCompression Bug Fixes&lt;/strong&gt;
&lt;br&gt;
I received some really good feedback after posting my &lt;a href="http://www.sweetpotatosoftware.com/SPSBlog/CommentView,guid,ebdf7fe4-f97c-4e61-9018-3007904ed8da.aspx#commentstart"&gt;previous
blog entry&lt;/a&gt; concerning this library from Curt Hamlin and Eduard. There were two
bugs there that I felt needed some immediate attention, so in this blog entry I present
a version of VFPCompression that addresses them.&lt;br&gt;
&lt;br&gt;
The first bug was the one that Curt Hamlin ran into where something screwy was going
on if the zip file wasn't somehow relative to the files or folders being zipped. The
following code...
&lt;/p&gt;
&lt;p&gt;
ZipOpen("F:\MyZipFile.zip") &amp;amp;&amp;amp; note zip is going to F: drive&lt;br&gt;
ZipFolder("C:\MyFolder\", .F.)&amp;nbsp; &amp;amp;&amp;amp; note folder being zipped is on C:
drive&lt;br&gt;
ZipClose() 
&lt;br&gt;
&lt;br&gt;
...would result in an empty zip file being created (not good). While the other bug
was the one that Eduard reported where&amp;nbsp;the ZipFolderQuick function wasn't applying
the optional password to the files being zipped. To make a long story short, I was
able to verify that these&amp;nbsp;were actual bugs in the library, and I have uploaded
a new version of VFPCompression.fll that fixes them.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;VFPCompression Enhancement&lt;/strong&gt;
&lt;br&gt;
Something that I didn't like in the FLL was that in order to extract the contents
of a zip to a particular folder that folder had to already exist in the file system.
I decided that the FLL should try and create a folder if it doesn't already exist
when extracting, which it now does.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.sweetpotatosoftware.com/files/vfpcompression.zip"&gt;VFPCompression
FLL Download (approx. 38 KB)&lt;/a&gt;
&lt;br&gt;
&lt;br&gt;
The VFP Compression Library sample code and documentation can still be found at my &lt;a href="http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,ebdf7fe4-f97c-4e61-9018-3007904ed8da.aspx"&gt;previous
blog entry&lt;/a&gt;.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sweetpotatosoftware.com/SPSBlog/aggbug.ashx?id=416ae65b-0af2-4145-8637-aa0d81d77637" /&gt;</description>
      <comments>http://www.sweetpotatosoftware.com/SPSBlog/CommentView,guid,416ae65b-0af2-4145-8637-aa0d81d77637.aspx</comments>
      <category>Information Technology</category>
      <category>Visual Foxpro</category>
    </item>
    <item>
      <trackback:ping>http://www.sweetpotatosoftware.com/SPSBlog/Trackback.aspx?guid=3bc4195f-5c1d-42d0-9053-f4069ce8869e</trackback:ping>
      <pingback:server>http://www.sweetpotatosoftware.com/SPSBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,3bc4195f-5c1d-42d0-9053-f4069ce8869e.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.sweetpotatosoftware.com/SPSBlog/CommentView,guid,3bc4195f-5c1d-42d0-9053-f4069ce8869e.aspx</wfw:comment>
      <wfw:commentRss>http://www.sweetpotatosoftware.com/SPSBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=3bc4195f-5c1d-42d0-9053-f4069ce8869e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>Search Revisited</strong>
          <br />
I've spoken about the work I was doing with <a href="http://www.microsoft.com/windows/products/winfamily/desktopsearch/default.mspx">Windows
Desktop Search</a> (WDS) and Visual FoxPro before on this blog <a href="http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,421e07bc-8210-44c2-bfd2-423e7c8eb53e.aspx">here</a> and <a href="http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,c5ff0b43-a24d-43a6-b290-94fe9cfd4492.aspx">here</a>.
Though the project I present in this blog entry began when WDS 2.0 was the latest
and greatest, it was rewritten for WDS 3.0 and has been revamped some and tested with
WDS 4.0 (the latest and greatest as of this writing). In any event, this project was
being considered by Microsoft (MS) for inclusion as part of Sedna, but never
made the cut. I later obtained permission from MS to release it on my own, but haven't
found time to test it or post it until now.
</p>
        <p>
          <strong>Foxy Search Value</strong>
          <br />
There are many things of value in the Foxy Search sample...
</p>
        <ul>
          <li>
Shows how to properly use the WDS OLEDB Provider from VFP.</li>
          <li>
Provides a guide to the proper SQL syntax for WDS.</li>
          <li>
Includes a list of fields available via the OLEDB Provider. (see fields.dbf)</li>
          <li>
Provides VFP develpers a class for working with WDS and ultimately returning search
results as VFP cursors.</li>
        </ul>
        <p>
If nothing else, Foxy Search provides a pretty good sample for messing with when trying
out various aspects of WDS. It does not provide examples of the creation or use of IFilters,
handlers, or thumbnail extractors - if you are looking for those you'll have to look
elsewhere at the moment.
</p>
        <p>
          <strong>Foxy Search Errors</strong>
          <br />
It should be noted that Foxy Search can, and will, throw errors depending on the combinations
of display fields, filters, and/or sorting chosen. Rather than attempt to restrict
what can and can't be chosen to lessen the errors, I felt it was easier to just allow
the developer using it to mess around with everything and see what is and what isn't
possible. Feel free to change the Throw Error in the Catch of the form's GetSearchResults
method to handle the various errors you run into if you feel like it (or just comment
it out if you want it to fail silently).
</p>
        <p>
          <strong>Don't Have Windows Desktop Search?<br /></strong>You can check whether you have Windows Desktop Search and what version of
it is on your system by looking in the Control Panel's Add &amp; Remove Programs or
by looking in your registry under the "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
Desktop Search" key where there is a "Version" value. If you don't have WDS (or you
are running an outdated version) you can go to the MS site to <a href="http://www.microsoft.com/windows/products/winfamily/desktopsearch/choose/windowssearch4.mspx?tab=Install%20It">download
and install WDS v4.0</a>.
</p>
        <p>
Until next time... Visual FoxPro Rocks!
</p>
        <p>
          <a href="http://www.sweetpotatosoftware.com/files/foxysearch.zip">Download Foxy Search
1.0 (approx. 89 KB)</a>
        </p>
        <p>
          <img src="http://www.sweetpotatosoftware.com/SPSBlog/content/binary/foxysearch1.png" border="0" />
        </p>
        <p>
          <strong>Figure 1:</strong> Shows Foxy Search being used to find all of the FOXUSER
files on my system and display information about each result.
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.sweetpotatosoftware.com/SPSBlog/aggbug.ashx?id=3bc4195f-5c1d-42d0-9053-f4069ce8869e" />
      </body>
      <title>Visual FoxPro and Windows Desktop Search</title>
      <guid isPermaLink="false">http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,3bc4195f-5c1d-42d0-9053-f4069ce8869e.aspx</guid>
      <link>http://www.sweetpotatosoftware.com/SPSBlog/2008/12/08/VisualFoxProAndWindowsDesktopSearch.aspx</link>
      <pubDate>Mon, 08 Dec 2008 10:08:19 GMT</pubDate>
      <description>&lt;p&gt;
&lt;strong&gt;Search Revisited&lt;/strong&gt;
&lt;br&gt;
I've spoken about the work I was doing with &lt;a href="http://www.microsoft.com/windows/products/winfamily/desktopsearch/default.mspx"&gt;Windows
Desktop Search&lt;/a&gt; (WDS)&amp;nbsp;and Visual FoxPro before on this blog &lt;a href="http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,421e07bc-8210-44c2-bfd2-423e7c8eb53e.aspx"&gt;here&lt;/a&gt; and &lt;a href="http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,c5ff0b43-a24d-43a6-b290-94fe9cfd4492.aspx"&gt;here&lt;/a&gt;.
Though the project I present in this blog entry began when WDS 2.0 was the latest
and greatest, it was rewritten for WDS 3.0 and has been revamped some and tested with
WDS 4.0 (the latest and greatest as of this writing). In any event, this project was
being considered by Microsoft (MS)&amp;nbsp;for inclusion as part of Sedna, but never
made the cut. I later obtained permission from MS to release it on my own, but&amp;nbsp;haven't
found time to test it or post it until now.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Foxy Search Value&lt;/strong&gt;
&lt;br&gt;
There are many things of value in the Foxy Search sample...
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Shows how to properly use the WDS OLEDB Provider from VFP.&lt;/li&gt;
&lt;li&gt;
Provides a guide to the proper SQL syntax&amp;nbsp;for WDS.&lt;/li&gt;
&lt;li&gt;
Includes a list of fields available via the OLEDB Provider. (see fields.dbf)&lt;/li&gt;
&lt;li&gt;
Provides VFP develpers a class for working with WDS and ultimately returning search
results as VFP cursors.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
If nothing else, Foxy Search provides a pretty good sample for messing with when trying
out various aspects of WDS. It does not provide examples of the creation or use of&amp;nbsp;IFilters,
handlers, or thumbnail extractors - if you are looking for those you'll have to look
elsewhere at the moment.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Foxy Search Errors&lt;/strong&gt;
&lt;br&gt;
It should be noted that Foxy Search can, and will, throw errors depending on the combinations
of display fields, filters, and/or sorting chosen. Rather than attempt to restrict
what can and can't be chosen to lessen the errors, I felt it was easier to just allow
the developer using it to mess around with everything and see what is and what isn't
possible. Feel free to change the Throw Error in the Catch of the form's GetSearchResults
method to handle the various errors you run into if you feel like it (or just comment
it out if you want it to fail silently).
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Don't Have Windows Desktop Search?&lt;br&gt;
&lt;/strong&gt;You can check whether you have Windows Desktop Search and what version of
it is on your system by looking in the Control Panel's Add &amp;amp; Remove Programs or
by looking in your registry under the "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows
Desktop Search" key where there is a "Version" value. If you don't have WDS (or you
are running an outdated version) you can go to the MS site to&amp;nbsp;&lt;a href="http://www.microsoft.com/windows/products/winfamily/desktopsearch/choose/windowssearch4.mspx?tab=Install%20It"&gt;download
and install WDS v4.0&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Until next time... Visual FoxPro Rocks!
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.sweetpotatosoftware.com/files/foxysearch.zip"&gt;Download Foxy Search
1.0 (approx.&amp;nbsp;89 KB)&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.sweetpotatosoftware.com/SPSBlog/content/binary/foxysearch1.png" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Figure 1:&lt;/strong&gt; Shows Foxy Search being used to find all of the FOXUSER
files on my system and display information about each result.
&lt;/p&gt;
&lt;p&gt;
&amp;nbsp;
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sweetpotatosoftware.com/SPSBlog/aggbug.ashx?id=3bc4195f-5c1d-42d0-9053-f4069ce8869e" /&gt;</description>
      <comments>http://www.sweetpotatosoftware.com/SPSBlog/CommentView,guid,3bc4195f-5c1d-42d0-9053-f4069ce8869e.aspx</comments>
      <category>Information Technology</category>
      <category>Visual Foxpro</category>
    </item>
    <item>
      <trackback:ping>http://www.sweetpotatosoftware.com/SPSBlog/Trackback.aspx?guid=b6eb576c-7142-4993-b3f2-74b7af5fb66c</trackback:ping>
      <pingback:server>http://www.sweetpotatosoftware.com/SPSBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,b6eb576c-7142-4993-b3f2-74b7af5fb66c.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.sweetpotatosoftware.com/SPSBlog/CommentView,guid,b6eb576c-7142-4993-b3f2-74b7af5fb66c.aspx</wfw:comment>
      <wfw:commentRss>http://www.sweetpotatosoftware.com/SPSBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=b6eb576c-7142-4993-b3f2-74b7af5fb66c</wfw:commentRss>
      <slash:comments>10</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>VFPConnection Library Update<br /></strong>It hasn't been too many days since I posted <a href="http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,7c6e5339-8cc5-41c1-8b11-56fb957cdffb.aspx">an
update to this library</a>. The two big enhancements in that update was SSL support
and a mechanism for tracing. It was fairly well received and appeared to work well
for those that downloaded it, but I mentioned at the end of that blog entry that I
wanted to do a few other enhancements surrounding FTP commands and HTTP Posts. This
update provides that functionality among other things.
</p>
        <p>
          <strong>What's New<br /></strong>I've added 10 new functions to the FLL and documentation. These include:
</p>
        <ul>
          <li>
HTTPSimplePost</li>
          <li>
HTTPPost</li>
          <li>
FTPCommands</li>
          <li>
FTPSCommands</li>
          <li>
URLEncode</li>
          <li>
URLDecode</li>
          <li>
DateStrToEpochSec</li>
          <li>
SetConnectTimeout</li>
          <li>
SetResponseTimeout</li>
          <li>
CurlVersion 
</li>
        </ul>
        <p>
I've also done some refactoring within the library and a few performance enhancements
(though it was pretty darn fast to already).
</p>
        <p>
          <strong>What's Next</strong>
          <br />
If you download and use this library then you might consider taking the time to provide
me feedback and any suggestions you may have for further improving it. The update
provided here is a testament to the fact that your feedback is valuable and an integral
part of the improvement process for the stuff I provide to the VFP Community.
</p>
        <p>
Until next time... Visual FoxPro Rocks!
</p>
        <p>
          <a href="http://www.sweetpotatosoftware.com/files/vfpconnection.zip">VFPConnection
FLL Download (400 KB approx.)</a>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>VFPConnection.FLL Sample Use Code:</b>
        </p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> The
code below <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">is</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">not</span> designed <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">to</span> run
all at once<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Run
the individual examples seperately<br /><br />
********************************************************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Upload
Examples<br />
********************************************************************<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span> (LOCFILE(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"vfpconnection.fll"</span>,<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"FLL"</span>))<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> FILE<br />
?<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">FILEGet</span>(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"File:///C:\Source.txt"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\Destination.txt"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyProgress()"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyTrace()"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> FTP<br />
?FTPGet(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"FTP://UserName:Password@somedomain.com/directory/Source.zip"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\Destination.zip"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyProgress()"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyTrace()"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> FTPS<br />
?FTPSGet(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"FTPS://UserName:Password@somedomain.com:21/directory/Source.zip"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\Destination.zip"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyProgress()"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyTrace()"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> HTTP<br />
?HTTPGet(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"http://www.somedomain.com/Source.htm"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\Destination.htm"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyProgress()"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyTrace()"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> HTTPS<br />
?HTTPSGet(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"https://www.somedomain.com/Source.htm"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\Destination.htm"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyProgress()"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyTrace()"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span><br /><br />
********************************************************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Download
Examples<br />
********************************************************************<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span> (LOCFILE(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"vfpconnection.fll"</span>,<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"FLL"</span>))<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> FILE<br />
?<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">FILEPut</span>(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\Source.txt"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"File:///C:\Destination.txt"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyProgress()"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyTrace()"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> FTP<br />
?FTPPut(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\Source.zip"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"FTP://UserName:Password@somedomain.com/directory/Destination.zip"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyProgress()"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyTrace()"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> FTPS<br />
?FTPSPut(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\Source.zip"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"FTPS://UserName:Password@somedomain.com:21/directory/Destination.zip"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyProgress()"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyTrace()"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> HTTP<br />
?HTTPPut(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\Source.htm"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"http://www.somedomain.com/Destination.htm"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyProgress()"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyTrace()"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> HTTPS<br />
?HTTPSPut(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\Source.htm"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"https://www.somedomain.com/Destination.htm"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyProgress()"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyTrace()"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span><br /><br />
********************************************************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">To</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">String</span> Examples<br />
********************************************************************<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span> (LOCFILE(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"vfpconnection.fll"</span>,<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"FLL"</span>))<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> FILE<br />
?FILEToStr(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\Source.txt"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> FTP<br />
?FTPTOSTR(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"FTP://UserName:Password@somedomain.com:21/directory/Source.txt"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> FTPS<br />
?FTPSTOSTR(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"FTPS://UserName:Password@somedomain.com:21/directory/Source.txt"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> HTTP<br />
?HTTPToStr(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"http://www.somedomain.com/Source.txt"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> HTTPS<br />
?HTTPSToStr(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"https://www.somedomain.com/Source.txt"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span><br /><br />
********************************************************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> HTTP
Post Examples<br />
********************************************************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Simple
HTTP Post<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span> (LOCFILE(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"vfpconnection.fll"</span>,<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"FLL"</span>))<br />
LOCAL lcPost<br />
m.lcPost <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"fname=John&amp;lname=Smith"</span><br />
?HttpSimplePost(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"http://www.snee.com/xml/crud/posttest.cgi"</span>,
m.lcPost, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">""</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyTrace()"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span><br /><br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> MultiPart/Form-Data
HTTP Post<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span> (LOCFILE(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"vfpconnection.fll"</span>,<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"FLL"</span>))<br />
LOCAL ARRAY aryPost(2,2)<br />
aryPost(1,1) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"fname"</span> &amp;&amp;
name<br />
aryPost(1,2) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"test
first"</span> &amp;&amp; value<br />
aryPost(2,1) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"lname"</span> &amp;&amp;
name<br />
aryPost(2,2) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"test
last"</span> &amp;&amp; value<br />
?HttpPost(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"http://www.cs.tut.fi/cgi-bin/run/~jkorpela/echo.cgi"</span>,
@aryPost, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">""</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyTrace()"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span><br /><br />
********************************************************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> FTP
Commands Example<br />
********************************************************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Rename</span> FTP
Directory<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span> (LOCFILE(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"vfpconnection.fll"</span>,<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"FLL"</span>))<br />
LOCAL ARRAY aryFTPCommands(4)<br />
aryFTPCommands(1) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"CWD
/"</span><br />
aryFTPCommands(2) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"PWD"</span><br />
aryFTPCommands(3) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"RNFR
MyDir"</span><br />
aryFTPCommands(4) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"RNTO
RenamedMyDir"</span><br />
?FTPCommands(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"FTP://username:password@somedomain.com/"</span>,
@aryFTPCommands, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyTrace()"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> ?FTPSCommands(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"FTPS://username:password@somedomain.com/"</span>,
@aryFTPCommands, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyTrace()"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span><br /><br />
********************************************************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> URL
Encode/Decode Example<br />
********************************************************************<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span> (LOCFILE(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"vfpconnection.fll"</span>,<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"FLL"</span>))<br />
LOCAL lcString, lcEncoded, lcDecoded<br />
m.lcString <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"A!B@C#D$E%F^G&amp;H*I(J)K_L-M=N+O[P]Q{R}S|T\U:V;W'X,Y.Z&lt;0&gt;1/2?3©4©5©6©7©8©9"</span><br />
m.lcEncoded <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> UrlEncode(m.lcString)<br />
m.lcDecoded <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> UrlDecode(m.lcEncoded)<br />
?<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Escaped:
"</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">+</span> m.lcEncoded<br />
?<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Unescaped:
"</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">+</span> m.lcDecoded<br />
?<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Original
: "</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">+</span> m.lcString<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span><br /><br />
********************************************************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Setting
Timeouts Example<br />
********************************************************************<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span> (LOCFILE(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"vfpconnection.fll"</span>,<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"FLL"</span>))<br />
SetConnectTimeout(30) &amp;&amp; <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Default</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">is</span> 10
seconds<br />
SetResponseTimeout(30) &amp;&amp; <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Default</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">is</span> 10
seconds<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span><br /><br />
********************************************************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Datetime <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">String</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">to</span> the <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">number</span> of
seconds from Epoch (12 Midnight <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">on</span> January
1, 1970)<br />
********************************************************************<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span> (LOCFILE(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"vfpconnection.fll"</span>,<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"FLL"</span>))<br />
?DateStrToEpochSec(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Sun,
06 Nov 1994 08:49:37 GMT"</span>)<br />
?DateStrToEpochSec(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Sunday,
06-Nov-94 08:49:37 GMT"</span>)<br />
?DateStrToEpochSec(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Sun
Nov 6 08:49:37 1994"</span>)<br />
?DateStrToEpochSec(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"06
Nov 1994 08:49:37 GMT"</span>)<br />
?DateStrToEpochSec(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"06-Nov-94
08:49:37 GMT"</span>)<br />
?DateStrToEpochSec(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Nov
6 08:49:37 1994"</span>)<br />
?DateStrToEpochSec(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"06
Nov 1994 08:49:37"</span>)<br />
?DateStrToEpochSec(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"06-Nov-94
08:49:37"</span>)<br />
?DateStrToEpochSec(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"1994
Nov 6 08:49:37"</span>)<br />
?DateStrToEpochSec(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"GMT
08:49:37 06-Nov-94 Sunday"</span>)<br />
?DateStrToEpochSec(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"94
6 Nov 08:49:37"</span>)<br />
?DateStrToEpochSec(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"1994
Nov 6"</span>)<br />
?DateStrToEpochSec(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"06-Nov-94"</span>)<br />
?DateStrToEpochSec(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Sun
Nov 6 94"</span>)<br />
?DateStrToEpochSec(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"1994.Nov.6"</span>)<br />
?DateStrToEpochSec(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Sun/Nov/6/94/GMT"</span>)<br />
?DateStrToEpochSec(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Sun,
06 Nov 1994 08:49:37 CET"</span>)<br />
?DateStrToEpochSec(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"06
Nov 1994 08:49:37 EST"</span>)<br />
?DateStrToEpochSec(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Sun,
12 Sep 2004 15:05:58 -0700"</span>)<br />
?DateStrToEpochSec(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Sat,
11 Sep 2004 21:32:11 +0200"</span>)<br />
?DateStrToEpochSec(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"20040912
15:05:58 -0700"</span>)<br />
?DateStrToEpochSec(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"20040911
+0200"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span><br /><br />
********************************************************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Determine
the version of libcurl <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">and</span> OpenSSL
that were used <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">for</span> VFPConnection.fll<br />
********************************************************************<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span> (LOCFILE(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"vfpconnection.fll"</span>,<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"FLL"</span>))<br />
?CURLVERSION()<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span><br /><br />
***********************<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">FUNCTION</span> MyProgress()
&amp;&amp; Callback from the FLL <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">-</span> can
be used <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">to</span> track
operation progress<br />
***********************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> You
can create your own <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">function</span>,
procedure <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">or</span> method <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">to</span> handle
this <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">and</span> name
it whatever you want.<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> The
nConnectTotalBytes <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">and</span> nConnectBytesSoFar
are <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">private</span> variables
created <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">on</span>-the-fly
by the FLL<br />
?m.nConnectTotalBytes<br />
?m.nConnectBytesSoFar<br />
ENDFUNC<br /><br />
***********************<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">FUNCTION</span> MyTrace()
&amp;&amp; Callback from the FLL <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">-</span> used <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">to</span> provide
a detailed trace of the operation<br />
***********************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> You
can create your own <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">function</span>,
procedure <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">or</span> method <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">to</span> handle
this <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">and</span> name
it whatever you want.<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> The
nTraceDataType <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">and</span> cTraceData
are <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">private</span> variables
created <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">on</span>-the-fly
by the FLL<br />
#DEFINE TYPE_TEXT 0<br />
#DEFINE TYPE_HEADER_IN 1<br />
#DEFINE TYPE_HEADER_OUT 2<br />
#DEFINE TYPE_DATA_IN 3<br />
#DEFINE TYPE_DATA_OUT 4<br />
#DEFINE TYPE_SSL_DATA_IN 5<br />
#DEFINE TYPE_SSL_DATA_OUT 6<br />
#DEFINE TYPE_END 7<br />
?ICASE(m.nTraceDataType <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> TYPE_TEXT, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"STATUS:"</span>,
;<br />
m.nTraceDataType <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> TYPE_HEADER_IN, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"&lt;RECV
HEADER: "</span>, ;<br />
m.nTraceDataType <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> TYPE_HEADER_OUT, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"&gt;SEND
HEADER: "</span>, ;<br />
m.nTraceDataType <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> TYPE_DATA_IN, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"&lt;RECV
DATA: "</span>, ;<br />
m.nTraceDataType <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> TYPE_DATA_OUT, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"&gt;SEND
DATA: "</span>, ;<br />
m.nTraceDataType <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> TYPE_SSL_DATA_IN, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"&lt;RECV
SSL DATA: "</span>, ;<br />
m.nTraceDataType <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> TYPE_SSL_DATA_OUT, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"&gt;SEND
SSL DATA: "</span>, ;<br />
m.nTraceDataType <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> TYPE_END, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"END:
"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"UNKNOWN:
"</span>)<br />
??m.cTraceData<br />
ENDFUNC</span>
        </p>
        <p>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>VFPConnection.FLL Documenation:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <hr />
        </p>
        <p>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Function FTPGet() </b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Signature:</b> FTPGet(cSourceURL, cDestination[, cProgressCallback[, cTraceCallback]])
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Parameters:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cSourceURL - The URL to the file you wish to download.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cDestination - The full path and file name where you want the source file saved.
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Return Value:</b>
        </p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
Logical - returns .T. if successful or .F. if the operation has failed.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Remarks:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
This function provides the ability to download a file from an FTP site.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
In order to specify port or login information you would simply include them in cSourceURL,
such as “FTP://myusername:mypassword@myftpsite.com:21/mydir/myfile.zip”.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <hr />
        </p>
        <p>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Function FTPSGet() </b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Signature:</b> FTPSGet(cSourceURL, cDestination[, cProgressCallback[, cTraceCallback]])
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Parameters:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cSourceURL - The URL to the file you wish to download.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cDestination - The full path and file name where you want the source file saved.
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Return Value:</b>
        </p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
Logical - returns .T. if successful or .F. if the operation has failed.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Remarks:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
This function provides the ability to download a file from an FTP site that provides
FTP over Secure Sockets Layer (SSL). It should be noted that this function does not
check the site's certificate for authenticity/validness nor does it compare the site
to the identity specified by the certificate.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
In order to specify port or login information you would simply include them in cSourceURL,
such as “FTPS://myusername:mypassword@myftpsite.com:21/mydir/myfile.zip”.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <hr />
        </p>
        <p>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Function HTTPGet() </b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Signature:</b> HTTPGet(cSourceURL, cDestination[, cProgressCallback[, cTraceCallback]])
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Parameters:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cSourceURL - The URL to the file you wish to download.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cDestination - The full path and file name where you want the source file saved.
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Return Value:</b>
        </p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
Logical - returns .T. if successful or .F. if the operation has failed.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Remarks:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
This function provides the ability to download a file from a website.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <hr />
        </p>
        <p>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Function HTTPSGet() </b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Signature:</b> HTTPSGet(cSourceURL, cDestination[, cProgressCallback[, cTraceCallback]])
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Parameters:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cSourceURL - The URL to the file you wish to download.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cDestination - The full path and file name where you want the source file saved.
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Return Value:</b>
        </p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
Logical - returns .T. if successful or .F. if the operation has failed.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Remarks:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
This function provides the ability to download a file from a a website that provides
HTTP over Secure Sockets Layer (SSL). It should be noted that this function does not
check the site's certificate for authenticity/validness nor does it compare the site
to the identity specified by the certificate.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <hr />
        </p>
        <p>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Function FILEGet() </b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Signature:</b> FILEGet(cSourceURL, cDestination[, cProgressCallback[, cTraceCallback]])
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Parameters:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cSourceURL - The full path and file name to the file you wish to copy.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cDestination - The full path and file name where you want the source file saved.
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cProgressCallback – An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
          <b>Return Value:</b>
        </p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
Logical - returns .T. if successful or .F. if the operation has failed.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Remarks:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
This function provides the ability to copy a file from a local or remote location.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
The format for the cSourceURL parameter is slightly different than you might expect.
In order to copy file C:\MyDir\MyFile.zip you would specify cSourceURL as “FILE://
C:\MyDir\MyFile.zip”.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <hr />
        </p>
        <p>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Function FTPPut() </b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Signature:</b> FTPPut(cSource, cDestinationURL[, cProgressCallback[, cTraceCallback]])
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Parameters:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cSource - The full path and file name of the file you want uploaded.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cDestinationURL - The URL to where the file specified in cSource should be uploaded
to.
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Return Value:</b>
        </p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
Logical - returns .T. if successful or .F. if the operation has failed.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Remarks:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
This function provides the ability to upload a file to an FTP site.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
In order to specify port or login information you would simply include them in cDestinationURL,
such as “FTP://myusername:mypassword@myftpsite.com:21/mydir/myfile.zip”.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <hr />
        </p>
        <p>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Function FTPSPut() </b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="center">
          <b>Signature:</b> FTPSPut(cSource, cDestinationURL[, cProgressCallback[, cTraceCallback]])
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="center">
          <b>Parameters:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="center">
cSource - The full path and file name of the file you want uploaded.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="center">
cDestinationURL - The URL to where the file specified in cSource should be uploaded
to.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="center">
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="center">
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="center">
          <b>Return Value:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="center">
Logical - returns .T. if successful or .F. if the operation has failed.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="center">
          <b>Remarks:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="center">
This function provides the ability to upload a file to an FTP site that provides FTP
over Secure Sockets Layer (SSL). It should be noted that this function does not check
the site's certificate for authenticity/validness nor does it compare the site to
the identity specified by the certificate.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="center">
In order to specify port or login information you would simply include them in cDestinationURL,
such as “FTPS://myusername:mypassword@myftpsite.com:21/mydir/myfile.zip”.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="center">
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="center">
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="center">
          <hr />
        </p>
        <p>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align="center">
          <b>Function HTTPPut() </b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Signature:</b> HTTPPut(cSource, cDestinationURL[, cProgressCallback[, cTraceCallback]])
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Parameters:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cSource - The full path and file name of the file you want uploaded.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cDestinationURL - The URL to where the file specified in cSource should be uploaded
to.
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Return Value:</b>
        </p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
Logical - returns .T. if successful or .F. if the operation has failed.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Remarks:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
This function provides the ability to upload a file to a website.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <hr />
        </p>
        <p>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Function HTTPSPut() </b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Signature:</b> HTTPSPut(cSource, cDestinationURL[, cProgressCallback[, cTraceCallback]])
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Parameters:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cSource - The full path and file name of the file you want uploaded.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cDestinationURL - The URL to where the file specified in cSource should be uploaded
to.
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Return Value:</b>
        </p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
Logical - returns .T. if successful or .F. if the operation has failed.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Remarks:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
This function provides the ability to upload a file to a website that provides HTTP
over Secure Sockets Layer (SSL). It should be noted that this function does not check
the site's certificate for authenticity/validness nor does it compare the site to
the identity specified by the certificate.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <hr />
        </p>
        <p>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Function FILEPut() </b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Signature:</b> FILEPut(cSource, cDestinationURL[, cProgressCallback[, cTraceCallback]])
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Parameters:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cSource - The full path and file name of the file you want copied.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cDestinationURL - The full path and file name where the file specified in cSource
should be copied to.
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
          <b>Return Value:</b>
        </p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
Logical - returns .T. if successful or .F. if the operation has failed.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Remarks:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
This function provides the ability to copy a file to a local or remote location.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
The format for the cDestinationURL parameter is slightly different than you might
expect. In order to copy file C:\MyDir\MyFile.zip you would specify cDestinationURL
as “FILE:// C:\MyDir\MyFile.zip”.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <hr />
        </p>
        <p>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Function FTPToStr() </b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Signature:</b> FTPToStr(cSourceURL[, cProgressCallback[, cTraceCallback]])
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Parameters:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cSourceURL - The URL to the file you wish to return a string from.
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Return Value:</b>
        </p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
Character Data - the contents of the file specified by cSourceURL
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Remarks:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
This function provides the ability to retrieve a file from an FTP site as a string.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
In order to specify port or login information you would simply include them in cSourceURL,
such as “FTP://myusername:mypassword@myftpsite.com:21/mydir/myfile.txt”.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <hr />
        </p>
        <p>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Function FTPSToStr() </b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Signature:</b> FTPSToStr(cSourceURL[, cProgressCallback[, cTraceCallback]])
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Parameters:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cSourceURL - The URL to the file you wish to return a string from.
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Return Value:</b>
        </p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
Character Data - the contents of the file specified by cSourceURL
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Remarks:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
This function provides the ability to retrieve a file as a string from an FTP site
that provides FTP over Secure Sockets Layer (SSL). It should be noted that this function
does not check the site's certificate for authenticity/validness nor does it compare
the site to the identity specified by the certificate.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
In order to specify port or login information you would simply include them in cSourceURL,
such as “FTPS://myusername:mypassword@myftpsite.com:21/mydir/myfile.txt”.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <hr />
        </p>
        <p>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Function HTTPToStr() </b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Signature:</b> HTTPToStr(cSourceURL[, cProgressCallback[, cTraceCallback]])
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Parameters:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cSourceURL - The URL to the file you wish to download.
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Return Value:</b>
        </p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
Logical - returns .T. if successful or .F. if the operation has failed.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Remarks:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
This function provides the ability to retrieve a file from a website as a string.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <hr />
        </p>
        <p>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Function HTTPSToStr() </b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Signature:</b> HTTPSToStr(cSourceURL[, cProgressCallback[, cTraceCallback]])
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Parameters:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cSourceURL - The URL to the file you wish to download.
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Return Value:</b>
        </p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
Logical - returns .T. if successful or .F. if the operation has failed.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Remarks:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
This function provides the ability to retrieve a file as a string from a website that
provides HTTP over Secure Sockets Layer (SSL). It should be noted that this function
does not check the site's certificate for authenticity/validness nor does it compare
the site to the identity specified by the certificate.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <hr />
        </p>
        <p>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Function HTTPSimplePost() </b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Signature:</b> HTTPSimplePost(cPostURL, cPostData[, cProgressCallback[, cTraceCallback]])
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Parameters:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cPostURL - The URL to which you want to post.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cPostData - A string consisting of a series of key-value pairs.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Return Value:</b>
        </p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
Logical - returns .T. if successful or .F. if the operation has failed.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Remarks:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
The key-value pairs sent to cPostData are in the form of key1=value1. Additional key-value
pairs must be delimited by "&amp;", such as "firstname=John&amp;lastname=Smith".
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <hr />
        </p>
        <p>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Function HTTPPost() </b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Signature:</b> HTTPPost(cPostURL, aPostData[, cProgressCallback[, cTraceCallback]])
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Parameters:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cPostURL - The URL to the file you wish to download.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
aPostData - A multi-dimensional array containing key-value pairs
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Return Value:</b>
        </p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
Logical - returns .T. if successful or .F. if the operation has failed.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Remarks:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
The aPostData array must be sent in by reference. The key-value pairs in aPostData
must have the keys in column 1 and the values in column 2, such as:
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
aPostData(1,1) = "firstname"<br />
aPostData(1,2) = "John"<br />
aPostData(2,1) = "lastname"<br />
aPostData(2,2) = "Smith"
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <hr />
        </p>
        <p>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Function FTPCommands() </b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Signature:</b> FTPCommands(cFTPURL, aCommands[, cProgressCallback[, cTraceCallback]])
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Parameters:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cFTPURL - The URL to the FTP site you wish to interact with.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
aCommands - A single dimension array containing the commands you wish to have run
on the FTP site.
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Return Value:</b>
        </p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
Logical - returns .T. if successful or .F. if the operation has failed.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Remarks:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
In order to specify port or login information you would simply include them in cFTPURL,
such as “FTP://myusername:mypassword@myftpsite.com:21/. 
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
The aCommands array must be sent in by reference. The aCommands is an array of FTP
commands (as defined by <a href="http://www.faqs.org/rfcs/rfc959.html">RFC 959</a>),
such as: 
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
aCommands(1) = "CWD /"<br />
aCommands(2) = "PWD"<br />
aCommands(3) = "RNFR MyDir"<br />
aCommands(4) = "RNTO RenamedMyDir"
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <hr />
        </p>
        <p>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Function FTPSCommands() </b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Signature:</b> FTPSCommands(cFTPSURL, aCommands[, cProgressCallback[, cTraceCallback]])
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Parameters:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cFTPSURL - The URL to the FTP site you wish to interact with.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
aCommands - A single dimension array containing the commands you wish to have run
on the FTP site.
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
</p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Return Value:</b>
        </p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
Logical - returns .T. if successful or .F. if the operation has failed.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Remarks:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
In order to specify port or login information you would simply include them in cFTPSURL,
such as “FTPS://myusername:mypassword@myftpsite.com:21/. 
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
The aCommands array must be sent in by reference. The aCommands is an array of FTP
commands (as defined by <a href="http://www.faqs.org/rfcs/rfc959.html">RFC 959</a>),
such as: 
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
aCommands(1) = "CWD /"<br />
aCommands(2) = "PWD"<br />
aCommands(3) = "RNFR MyDir"<br />
aCommands(4) = "RNTO RenamedMyDir"
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <hr />
        </p>
        <p>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Function URLEncode() </b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Signature:</b> URLEncode(cString)
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Parameters:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cString - The string you want encoded (escaped).
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Return Value:</b>
        </p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
Character - returns the encoded equivalent of cString.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Remarks:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
This function provides libcurl's "URL Escape" functionality. Any character in cString
that is not a-z, A-Z, or 0-9 will be deemed unsafe and be replaced with a "%" followed
by the unsafe character's hex equivalent. For instance spaces are replaced with %20
because the ASCII value of a space is 32 (0x20 in hex).
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <hr />
        </p>
        <p>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Function URLDecode() </b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Signature:</b> URLDecode(cString)
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Parameters:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cString - The string you want decoded (unescaped).
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Return Value:</b>
        </p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
Character - returns the decoded equivalent of cString.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Remarks:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
This function provides libcurl's "URL Unescape" functionality. Any character in cString
that has been escaped/encoded with a "%" followed by its hex equivalent will be decoded
to its plaintext equivalent. For instance %20 will be turned back into a space - CHR(32).
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <hr />
        </p>
        <p>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Function SetConnectionTimeout() </b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Signature:</b> SetConnectionTimeout(nSeconds)
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Parameters:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
nSeconds - The number of seconds any connection operation in VFPConnection should
wait before failing due to timeout.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Return Value:</b>
        </p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
None
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Remarks:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
This function effects all connection operations in VFPConnection. The default value
for the connection timeout is 10 seconds. 
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <hr />
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Function SetResponseTimeout() </b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Signature:</b> SetResponseTimeout(nSeconds)
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Parameters:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
nSeconds - The number of seconds any operation in VFPConnection should wait for a
response before failing due to timeout.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Return Value:</b>
        </p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
None
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Remarks:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
This function effects all operations in VFPConnection that are designed to wait for
a server response. The default value for the response timeout is 10 seconds.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <hr />
        </p>
        <p>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Function DateStrToEpochSec() </b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Signature:</b> DateStrToEpochSec(cDateTime)
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Parameters:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
cDateTime - A datetime string in one of the many formats.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Return Value:</b>
        </p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
Numeric - returns the number of seconds between Epoch and the datetime specified by
cDateTime.
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Remarks:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
This function is useful when attempting to convert datetime strings you may encounter
when working with web-based applications. <a href="http://www.ietf.org/rfc/rfc2616.txt">RFC2616</a> specifies
which datetime string formats are acceptable for HTTP applications and, in short,
there are a lot of them. For instance...
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
Sun, 06 Nov 1994 08:49:37 GMT<br />
Sunday, 06-Nov-94 08:49:37 GMT<br />
Sun Nov 6 08:49:37 1994<br />
06 Nov 1994 08:49:37 GMT<br />
06-Nov-94 08:49:37 GMT<br />
Nov 6 08:49:37 1994<br />
06 Nov 1994 08:49:37<br />
06-Nov-94 08:49:37<br />
1994 Nov 6 08:49:37<br />
GMT 08:49:37 06-Nov-94 Sunday<br />
94 6 Nov 08:49:37<br />
1994 Nov 606-Nov-94<br />
Sun Nov 6 94<br />
1994.Nov.6<br />
Sun/Nov/6/94/GMT<br />
Sun, 06 Nov 1994 08:49:37 CET<br />
06 Nov 1994 08:49:37 EST<br />
Sun, 12 Sep 2004 15:05:58 -0700<br />
Sat, 11 Sep 2004 21:32:11 +0200<br />
20040912 15:05:58 -0700<br />
20040911 +0200
</p>
        <p class="MsoNormal" dir="ltr" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
...are all acceptable. There are also a number of situations where you may be required
to use or know the number of seconds since midnight January 1, 1970 (a.k.a. epoch
- due to unix and POSIX systems which count time this way). In any event, this function
is provided as a crutch if needed.
</p>
        <p class="MsoNormal" dir="ltr" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <hr />
        </p>
        <p>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Function CurlVersion() </b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Signature:</b> CurlVersion()
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Parameters:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
None
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Return Value:</b>
        </p>
        <p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify">
String - the versions of <a href="http://curl.haxx.se/libcurl/">libcurl</a> and <a href="http://www.openssl.org/">OpenSSL</a> that
were used in VFPConnection
</p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
          <b>Remarks:</b>
        </p>
        <p class="MsoNormal" style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto">
This may be of some interest to VFP developers who are asking for enhancements or
want to ensure that this library is using the latest and greatest. The static libraries
for libcurl and OpenSSL were both built from the latest source available at the time
using Visual Studio 2003 and ActivePerl.
</p>
        <img width="0" height="0" src="http://www.sweetpotatosoftware.com/SPSBlog/aggbug.ashx?id=b6eb576c-7142-4993-b3f2-74b7af5fb66c" />
      </body>
      <title>VFPConnection Update - HTTP Post, FTP Commands and More...</title>
      <guid isPermaLink="false">http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,b6eb576c-7142-4993-b3f2-74b7af5fb66c.aspx</guid>
      <link>http://www.sweetpotatosoftware.com/SPSBlog/2008/12/05/VFPConnectionUpdateHTTPPostFTPCommandsAndMore.aspx</link>
      <pubDate>Fri, 05 Dec 2008 15:54:45 GMT</pubDate>
      <description>&lt;p&gt;
&lt;strong&gt;VFPConnection Library Update&lt;br&gt;
&lt;/strong&gt;It hasn't been too many days since I posted &lt;a href="http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,7c6e5339-8cc5-41c1-8b11-56fb957cdffb.aspx"&gt;an
update to this library&lt;/a&gt;. The two big enhancements in that update was SSL support
and a mechanism for tracing. It was fairly well received and appeared to work well
for those that downloaded it, but I mentioned at the end of that blog entry that I
wanted to do a few other enhancements surrounding FTP commands and HTTP Posts. This
update provides that functionality among other things.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;What's New&lt;br&gt;
&lt;/strong&gt;I've added 10 new functions to the FLL and documentation. These include:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
HTTPSimplePost&lt;/li&gt;
&lt;li&gt;
HTTPPost&lt;/li&gt;
&lt;li&gt;
FTPCommands&lt;/li&gt;
&lt;li&gt;
FTPSCommands&lt;/li&gt;
&lt;li&gt;
URLEncode&lt;/li&gt;
&lt;li&gt;
URLDecode&lt;/li&gt;
&lt;li&gt;
DateStrToEpochSec&lt;/li&gt;
&lt;li&gt;
SetConnectTimeout&lt;/li&gt;
&lt;li&gt;
SetResponseTimeout&lt;/li&gt;
&lt;li&gt;
CurlVersion 
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
I've also done some refactoring within the library and a few performance enhancements
(though it was pretty darn fast to already).
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;What's Next&lt;/strong&gt;
&lt;br&gt;
If you download and use this library then you might consider taking the time to provide
me feedback and any suggestions you may have for further improving it. The update
provided here is a testament to the fact that your feedback is valuable and an integral
part of the improvement process for the stuff I provide to the VFP Community.
&lt;/p&gt;
&lt;p&gt;
Until next time... Visual FoxPro Rocks!
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.sweetpotatosoftware.com/files/vfpconnection.zip"&gt;VFPConnection
FLL Download (400 KB approx.)&lt;/a&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;VFPConnection.FLL Sample Use Code:&lt;/b&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; The
code below &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;is&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;not&lt;/span&gt; designed &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;to&lt;/span&gt; run
all at once&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Run
the individual examples seperately&lt;br&gt;
&lt;br&gt;
********************************************************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Upload
Examples&lt;br&gt;
********************************************************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt; (LOCFILE(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"vfpconnection.fll"&lt;/span&gt;,&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"FLL"&lt;/span&gt;))&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; FILE&lt;br&gt;
?&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;FILEGet&lt;/span&gt;(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"File:///C:\Source.txt"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\Destination.txt"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyProgress()"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyTrace()"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; FTP&lt;br&gt;
?FTPGet(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"FTP://UserName:Password@somedomain.com/directory/Source.zip"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\Destination.zip"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyProgress()"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyTrace()"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; FTPS&lt;br&gt;
?FTPSGet(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"FTPS://UserName:Password@somedomain.com:21/directory/Source.zip"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\Destination.zip"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyProgress()"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyTrace()"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; HTTP&lt;br&gt;
?HTTPGet(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"http://www.somedomain.com/Source.htm"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\Destination.htm"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyProgress()"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyTrace()"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; HTTPS&lt;br&gt;
?HTTPSGet(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"https://www.somedomain.com/Source.htm"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\Destination.htm"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyProgress()"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyTrace()"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
********************************************************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Download
Examples&lt;br&gt;
********************************************************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt; (LOCFILE(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"vfpconnection.fll"&lt;/span&gt;,&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"FLL"&lt;/span&gt;))&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; FILE&lt;br&gt;
?&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;FILEPut&lt;/span&gt;(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\Source.txt"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"File:///C:\Destination.txt"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyProgress()"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyTrace()"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; FTP&lt;br&gt;
?FTPPut(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\Source.zip"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"FTP://UserName:Password@somedomain.com/directory/Destination.zip"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyProgress()"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyTrace()"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; FTPS&lt;br&gt;
?FTPSPut(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\Source.zip"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"FTPS://UserName:Password@somedomain.com:21/directory/Destination.zip"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyProgress()"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyTrace()"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; HTTP&lt;br&gt;
?HTTPPut(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\Source.htm"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"http://www.somedomain.com/Destination.htm"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyProgress()"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyTrace()"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; HTTPS&lt;br&gt;
?HTTPSPut(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\Source.htm"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"https://www.somedomain.com/Destination.htm"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyProgress()"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyTrace()"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
********************************************************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;To&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;String&lt;/span&gt; Examples&lt;br&gt;
********************************************************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt; (LOCFILE(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"vfpconnection.fll"&lt;/span&gt;,&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"FLL"&lt;/span&gt;))&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; FILE&lt;br&gt;
?FILEToStr(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\Source.txt"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; FTP&lt;br&gt;
?FTPTOSTR(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"FTP://UserName:Password@somedomain.com:21/directory/Source.txt"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; FTPS&lt;br&gt;
?FTPSTOSTR(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"FTPS://UserName:Password@somedomain.com:21/directory/Source.txt"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; HTTP&lt;br&gt;
?HTTPToStr(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"http://www.somedomain.com/Source.txt"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; HTTPS&lt;br&gt;
?HTTPSToStr(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"https://www.somedomain.com/Source.txt"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
********************************************************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; HTTP
Post Examples&lt;br&gt;
********************************************************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Simple
HTTP Post&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt; (LOCFILE(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"vfpconnection.fll"&lt;/span&gt;,&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"FLL"&lt;/span&gt;))&lt;br&gt;
LOCAL lcPost&lt;br&gt;
m.lcPost &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"fname=John&amp;amp;lname=Smith"&lt;/span&gt;
&lt;br&gt;
?HttpSimplePost(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"http://www.snee.com/xml/crud/posttest.cgi"&lt;/span&gt;,
m.lcPost, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;""&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyTrace()"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; MultiPart/Form-Data
HTTP Post&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt; (LOCFILE(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"vfpconnection.fll"&lt;/span&gt;,&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"FLL"&lt;/span&gt;))&lt;br&gt;
LOCAL ARRAY aryPost(2,2)&lt;br&gt;
aryPost(1,1) &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"fname"&lt;/span&gt; &amp;amp;&amp;amp;
name&lt;br&gt;
aryPost(1,2) &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"test
first"&lt;/span&gt; &amp;amp;&amp;amp; value&lt;br&gt;
aryPost(2,1) &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"lname"&lt;/span&gt; &amp;amp;&amp;amp;
name&lt;br&gt;
aryPost(2,2) &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"test
last"&lt;/span&gt; &amp;amp;&amp;amp; value&lt;br&gt;
?HttpPost(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"http://www.cs.tut.fi/cgi-bin/run/~jkorpela/echo.cgi"&lt;/span&gt;,
@aryPost, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;""&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyTrace()"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
********************************************************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; FTP
Commands Example&lt;br&gt;
********************************************************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Rename&lt;/span&gt; FTP
Directory&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt; (LOCFILE(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"vfpconnection.fll"&lt;/span&gt;,&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"FLL"&lt;/span&gt;))&lt;br&gt;
LOCAL ARRAY aryFTPCommands(4)&lt;br&gt;
aryFTPCommands(1) &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"CWD
/"&lt;/span&gt;
&lt;br&gt;
aryFTPCommands(2) &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"PWD"&lt;/span&gt;
&lt;br&gt;
aryFTPCommands(3) &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"RNFR
MyDir"&lt;/span&gt;
&lt;br&gt;
aryFTPCommands(4) &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"RNTO
RenamedMyDir"&lt;/span&gt;
&lt;br&gt;
?FTPCommands(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"FTP://username:password@somedomain.com/"&lt;/span&gt;,
@aryFTPCommands, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyTrace()"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; ?FTPSCommands(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"FTPS://username:password@somedomain.com/"&lt;/span&gt;,
@aryFTPCommands, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyTrace()"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
********************************************************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; URL
Encode/Decode Example&lt;br&gt;
********************************************************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt; (LOCFILE(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"vfpconnection.fll"&lt;/span&gt;,&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"FLL"&lt;/span&gt;))&lt;br&gt;
LOCAL lcString, lcEncoded, lcDecoded&lt;br&gt;
m.lcString &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"A!B@C#D$E%F^G&amp;amp;H*I(J)K_L-M=N+O[P]Q{R}S|T\U:V;W'X,Y.Z&amp;lt;0&amp;gt;1/2?3©4©5©6©7©8©9"&lt;/span&gt;
&lt;br&gt;
m.lcEncoded &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; UrlEncode(m.lcString)&lt;br&gt;
m.lcDecoded &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; UrlDecode(m.lcEncoded)&lt;br&gt;
?&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Escaped:
"&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;+&lt;/span&gt; m.lcEncoded&lt;br&gt;
?&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Unescaped:
"&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;+&lt;/span&gt; m.lcDecoded&lt;br&gt;
?&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Original
: "&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;+&lt;/span&gt; m.lcString&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
********************************************************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Setting
Timeouts Example&lt;br&gt;
********************************************************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt; (LOCFILE(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"vfpconnection.fll"&lt;/span&gt;,&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"FLL"&lt;/span&gt;))&lt;br&gt;
SetConnectTimeout(30) &amp;amp;&amp;amp; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Default&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;is&lt;/span&gt; 10
seconds&lt;br&gt;
SetResponseTimeout(30) &amp;amp;&amp;amp; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Default&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;is&lt;/span&gt; 10
seconds&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
********************************************************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Datetime &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;String&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;to&lt;/span&gt; the &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;number&lt;/span&gt; of
seconds from Epoch (12 Midnight &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;on&lt;/span&gt; January
1, 1970)&lt;br&gt;
********************************************************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt; (LOCFILE(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"vfpconnection.fll"&lt;/span&gt;,&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"FLL"&lt;/span&gt;))&lt;br&gt;
?DateStrToEpochSec(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Sun,
06 Nov 1994 08:49:37 GMT"&lt;/span&gt;)&lt;br&gt;
?DateStrToEpochSec(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Sunday,
06-Nov-94 08:49:37 GMT"&lt;/span&gt;)&lt;br&gt;
?DateStrToEpochSec(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Sun
Nov 6 08:49:37 1994"&lt;/span&gt;)&lt;br&gt;
?DateStrToEpochSec(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"06
Nov 1994 08:49:37 GMT"&lt;/span&gt;)&lt;br&gt;
?DateStrToEpochSec(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"06-Nov-94
08:49:37 GMT"&lt;/span&gt;)&lt;br&gt;
?DateStrToEpochSec(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Nov
6 08:49:37 1994"&lt;/span&gt;)&lt;br&gt;
?DateStrToEpochSec(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"06
Nov 1994 08:49:37"&lt;/span&gt;)&lt;br&gt;
?DateStrToEpochSec(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"06-Nov-94
08:49:37"&lt;/span&gt;)&lt;br&gt;
?DateStrToEpochSec(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"1994
Nov 6 08:49:37"&lt;/span&gt;)&lt;br&gt;
?DateStrToEpochSec(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"GMT
08:49:37 06-Nov-94 Sunday"&lt;/span&gt;)&lt;br&gt;
?DateStrToEpochSec(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"94
6 Nov 08:49:37"&lt;/span&gt;)&lt;br&gt;
?DateStrToEpochSec(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"1994
Nov 6"&lt;/span&gt;)&lt;br&gt;
?DateStrToEpochSec(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"06-Nov-94"&lt;/span&gt;)&lt;br&gt;
?DateStrToEpochSec(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Sun
Nov 6 94"&lt;/span&gt;)&lt;br&gt;
?DateStrToEpochSec(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"1994.Nov.6"&lt;/span&gt;)&lt;br&gt;
?DateStrToEpochSec(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Sun/Nov/6/94/GMT"&lt;/span&gt;)&lt;br&gt;
?DateStrToEpochSec(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Sun,
06 Nov 1994 08:49:37 CET"&lt;/span&gt;)&lt;br&gt;
?DateStrToEpochSec(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"06
Nov 1994 08:49:37 EST"&lt;/span&gt;)&lt;br&gt;
?DateStrToEpochSec(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Sun,
12 Sep 2004 15:05:58 -0700"&lt;/span&gt;)&lt;br&gt;
?DateStrToEpochSec(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Sat,
11 Sep 2004 21:32:11 +0200"&lt;/span&gt;)&lt;br&gt;
?DateStrToEpochSec(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"20040912
15:05:58 -0700"&lt;/span&gt;)&lt;br&gt;
?DateStrToEpochSec(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"20040911
+0200"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
********************************************************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Determine
the version of libcurl &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;and&lt;/span&gt; OpenSSL
that were used &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;for&lt;/span&gt; VFPConnection.fll&lt;br&gt;
********************************************************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt; (LOCFILE(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"vfpconnection.fll"&lt;/span&gt;,&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"FLL"&lt;/span&gt;))&lt;br&gt;
?CURLVERSION()&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt; 
&lt;br&gt;
&lt;br&gt;
***********************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;FUNCTION&lt;/span&gt; MyProgress()
&amp;amp;&amp;amp; Callback from the FLL &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;-&lt;/span&gt; can
be used &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;to&lt;/span&gt; track
operation progress&lt;br&gt;
***********************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; You
can create your own &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;function&lt;/span&gt;,
procedure &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;or&lt;/span&gt; method &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;to&lt;/span&gt; handle
this &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;and&lt;/span&gt; name
it whatever you want.&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; The
nConnectTotalBytes &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;and&lt;/span&gt; nConnectBytesSoFar
are &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;private&lt;/span&gt; variables
created &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;on&lt;/span&gt;-the-fly
by the FLL&lt;br&gt;
?m.nConnectTotalBytes&lt;br&gt;
?m.nConnectBytesSoFar&lt;br&gt;
ENDFUNC&lt;br&gt;
&lt;br&gt;
***********************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;FUNCTION&lt;/span&gt; MyTrace()
&amp;amp;&amp;amp; Callback from the FLL &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;-&lt;/span&gt; used &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;to&lt;/span&gt; provide
a detailed trace of the operation&lt;br&gt;
***********************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; You
can create your own &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;function&lt;/span&gt;,
procedure &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;or&lt;/span&gt; method &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;to&lt;/span&gt; handle
this &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;and&lt;/span&gt; name
it whatever you want.&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; The
nTraceDataType &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;and&lt;/span&gt; cTraceData
are &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;private&lt;/span&gt; variables
created &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;on&lt;/span&gt;-the-fly
by the FLL&lt;br&gt;
#DEFINE TYPE_TEXT 0&lt;br&gt;
#DEFINE TYPE_HEADER_IN 1&lt;br&gt;
#DEFINE TYPE_HEADER_OUT 2&lt;br&gt;
#DEFINE TYPE_DATA_IN 3&lt;br&gt;
#DEFINE TYPE_DATA_OUT 4&lt;br&gt;
#DEFINE TYPE_SSL_DATA_IN 5&lt;br&gt;
#DEFINE TYPE_SSL_DATA_OUT 6&lt;br&gt;
#DEFINE TYPE_END 7&lt;br&gt;
?ICASE(m.nTraceDataType &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; TYPE_TEXT, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"STATUS:"&lt;/span&gt;,
;&lt;br&gt;
m.nTraceDataType &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; TYPE_HEADER_IN, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"&amp;lt;RECV
HEADER: "&lt;/span&gt;, ;&lt;br&gt;
m.nTraceDataType &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; TYPE_HEADER_OUT, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"&amp;gt;SEND
HEADER: "&lt;/span&gt;, ;&lt;br&gt;
m.nTraceDataType &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; TYPE_DATA_IN, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"&amp;lt;RECV
DATA: "&lt;/span&gt;, ;&lt;br&gt;
m.nTraceDataType &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; TYPE_DATA_OUT, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"&amp;gt;SEND
DATA: "&lt;/span&gt;, ;&lt;br&gt;
m.nTraceDataType &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; TYPE_SSL_DATA_IN, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"&amp;lt;RECV
SSL DATA: "&lt;/span&gt;, ;&lt;br&gt;
m.nTraceDataType &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; TYPE_SSL_DATA_OUT, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"&amp;gt;SEND
SSL DATA: "&lt;/span&gt;, ;&lt;br&gt;
m.nTraceDataType &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; TYPE_END, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"END:
"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"UNKNOWN:
"&lt;/span&gt;)&lt;br&gt;
??m.cTraceData&lt;br&gt;
ENDFUNC&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;VFPConnection.FLL Documenation:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Function FTPGet() &lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Signature:&lt;/b&gt; FTPGet(cSourceURL, cDestination[, cProgressCallback[, cTraceCallback]])
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Parameters:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cSourceURL - The URL to the file you wish to download.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cDestination - The full path and file name where you want the source file saved.
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Return Value:&lt;/b&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
Logical - returns .T. if successful or .F. if the operation has failed.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Remarks:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
This function provides the ability to download a file from an FTP site.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
In order to specify port or login information you would simply include them in cSourceURL,
such as “FTP://myusername:mypassword@myftpsite.com:21/mydir/myfile.zip”.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Function FTPSGet() &lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Signature:&lt;/b&gt; FTPSGet(cSourceURL, cDestination[, cProgressCallback[, cTraceCallback]])
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Parameters:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cSourceURL - The URL to the file you wish to download.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cDestination - The full path and file name where you want the source file saved.
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Return Value:&lt;/b&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
Logical - returns .T. if successful or .F. if the operation has failed.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Remarks:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
This function provides the ability to download a file from an FTP site that provides
FTP over Secure Sockets Layer (SSL). It should be noted that this function does not
check the site's certificate for authenticity/validness nor does it compare the site
to the identity specified by the certificate.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
In order to specify port or login information you would simply include them in cSourceURL,
such as “FTPS://myusername:mypassword@myftpsite.com:21/mydir/myfile.zip”.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Function HTTPGet() &lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Signature:&lt;/b&gt; HTTPGet(cSourceURL, cDestination[, cProgressCallback[, cTraceCallback]])
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Parameters:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cSourceURL - The URL to the file you wish to download.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cDestination - The full path and file name where you want the source file saved.
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Return Value:&lt;/b&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
Logical - returns .T. if successful or .F. if the operation has failed.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Remarks:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
This function provides the ability to download a file from a website.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Function HTTPSGet() &lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Signature:&lt;/b&gt; HTTPSGet(cSourceURL, cDestination[, cProgressCallback[, cTraceCallback]])
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Parameters:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cSourceURL - The URL to the file you wish to download.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cDestination - The full path and file name where you want the source file saved.
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Return Value:&lt;/b&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
Logical - returns .T. if successful or .F. if the operation has failed.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Remarks:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
This function provides the ability to download a file from a a website that provides
HTTP over Secure Sockets Layer (SSL). It should be noted that this function does not
check the site's certificate for authenticity/validness nor does it compare the site
to the identity specified by the certificate.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Function FILEGet() &lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Signature:&lt;/b&gt; FILEGet(cSourceURL, cDestination[, cProgressCallback[, cTraceCallback]])
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Parameters:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cSourceURL - The full path and file name to the file you wish to copy.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cDestination - The full path and file name where you want the source file saved.
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cProgressCallback – An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;b&gt;Return Value:&lt;/b&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
Logical - returns .T. if successful or .F. if the operation has failed.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Remarks:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
This function provides the ability to copy a file from a local or remote location.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
The format for the cSourceURL parameter is slightly different than you might expect.
In order to copy file C:\MyDir\MyFile.zip you would specify cSourceURL as “FILE://
C:\MyDir\MyFile.zip”.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Function FTPPut() &lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Signature:&lt;/b&gt; FTPPut(cSource, cDestinationURL[, cProgressCallback[, cTraceCallback]])
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Parameters:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cSource - The full path and file name of the file you want uploaded.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cDestinationURL - The URL to where the file specified in cSource should be uploaded
to.
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Return Value:&lt;/b&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
Logical - returns .T. if successful or .F. if the operation has failed.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Remarks:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
This function provides the ability to upload a file to an FTP site.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
In order to specify port or login information you would simply include them in cDestinationURL,
such as “FTP://myusername:mypassword@myftpsite.com:21/mydir/myfile.zip”.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Function FTPSPut() &lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=center&gt;
&lt;b&gt;Signature:&lt;/b&gt; FTPSPut(cSource, cDestinationURL[, cProgressCallback[, cTraceCallback]])
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=center&gt;
&lt;b&gt;Parameters:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=center&gt;
cSource - The full path and file name of the file you want uploaded.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=center&gt;
cDestinationURL - The URL to where the file specified in cSource should be uploaded
to.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=center&gt;
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=center&gt;
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=center&gt;
&lt;b&gt;Return Value:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=center&gt;
Logical - returns .T. if successful or .F. if the operation has failed.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=center&gt;
&lt;b&gt;Remarks:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=center&gt;
This function provides the ability to upload a file to an FTP site that provides FTP
over Secure Sockets Layer (SSL). It should be noted that this function does not check
the site's certificate for authenticity/validness nor does it compare the site to
the identity specified by the certificate.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=center&gt;
In order to specify port or login information you would simply include them in cDestinationURL,
such as “FTPS://myusername:mypassword@myftpsite.com:21/mydir/myfile.zip”.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=center&gt;
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=center&gt;
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=center&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto" align=center&gt;
&lt;b&gt;Function HTTPPut() &lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Signature:&lt;/b&gt; HTTPPut(cSource, cDestinationURL[, cProgressCallback[, cTraceCallback]])
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Parameters:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cSource - The full path and file name of the file you want uploaded.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cDestinationURL - The URL to where the file specified in cSource should be uploaded
to.
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Return Value:&lt;/b&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
Logical - returns .T. if successful or .F. if the operation has failed.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Remarks:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
This function provides the ability to upload a file to a website.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Function HTTPSPut() &lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Signature:&lt;/b&gt; HTTPSPut(cSource, cDestinationURL[, cProgressCallback[, cTraceCallback]])
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Parameters:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cSource - The full path and file name of the file you want uploaded.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cDestinationURL - The URL to where the file specified in cSource should be uploaded
to.
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Return Value:&lt;/b&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
Logical - returns .T. if successful or .F. if the operation has failed.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Remarks:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
This function provides the ability to upload a file to a website that provides HTTP
over Secure Sockets Layer (SSL). It should be noted that this function does not check
the site's certificate for authenticity/validness nor does it compare the site to
the identity specified by the certificate.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Function FILEPut() &lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Signature:&lt;/b&gt; FILEPut(cSource, cDestinationURL[, cProgressCallback[, cTraceCallback]])
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Parameters:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cSource - The full path and file name of the file you want copied.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cDestinationURL - The full path and file name where the file specified in cSource
should be copied to.
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;b&gt;Return Value:&lt;/b&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
Logical - returns .T. if successful or .F. if the operation has failed.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Remarks:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
This function provides the ability to copy a file to a local or remote location.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
The format for the cDestinationURL parameter is slightly different than you might
expect. In order to copy file C:\MyDir\MyFile.zip you would specify cDestinationURL
as “FILE:// C:\MyDir\MyFile.zip”.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Function FTPToStr() &lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Signature:&lt;/b&gt; FTPToStr(cSourceURL[, cProgressCallback[, cTraceCallback]])
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Parameters:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cSourceURL - The URL to the file you wish to return a string from.
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Return Value:&lt;/b&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
Character Data - the contents of the file specified by cSourceURL
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Remarks:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
This function provides the ability to retrieve a file from an FTP site as a string.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
In order to specify port or login information you would simply include them in cSourceURL,
such as “FTP://myusername:mypassword@myftpsite.com:21/mydir/myfile.txt”.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Function FTPSToStr() &lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Signature:&lt;/b&gt; FTPSToStr(cSourceURL[, cProgressCallback[, cTraceCallback]])
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Parameters:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cSourceURL - The URL to the file you wish to return a string from.
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Return Value:&lt;/b&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
Character Data - the contents of the file specified by cSourceURL
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Remarks:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
This function provides the ability to retrieve a file as a string from an FTP site
that provides FTP over Secure Sockets Layer (SSL). It should be noted that this function
does not check the site's certificate for authenticity/validness nor does it compare
the site to the identity specified by the certificate.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
In order to specify port or login information you would simply include them in cSourceURL,
such as “FTPS://myusername:mypassword@myftpsite.com:21/mydir/myfile.txt”.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Function HTTPToStr() &lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Signature:&lt;/b&gt; HTTPToStr(cSourceURL[, cProgressCallback[, cTraceCallback]])
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Parameters:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cSourceURL - The URL to the file you wish to download.
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Return Value:&lt;/b&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
Logical - returns .T. if successful or .F. if the operation has failed.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Remarks:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
This function provides the ability to retrieve a file from a website as a string.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Function HTTPSToStr() &lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Signature:&lt;/b&gt; HTTPSToStr(cSourceURL[, cProgressCallback[, cTraceCallback]])
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Parameters:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cSourceURL - The URL to the file you wish to download.
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Return Value:&lt;/b&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
Logical - returns .T. if successful or .F. if the operation has failed.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Remarks:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
This function provides the ability to retrieve a file as a string from a website that
provides HTTP over Secure Sockets Layer (SSL). It should be noted that this function
does not check the site's certificate for authenticity/validness nor does it compare
the site to the identity specified by the certificate.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Function HTTPSimplePost() &lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Signature:&lt;/b&gt; HTTPSimplePost(cPostURL, cPostData[, cProgressCallback[, cTraceCallback]])
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Parameters:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cPostURL - The URL to which you want to post.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cPostData - A string consisting of a series of key-value pairs.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Return Value:&lt;/b&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
Logical - returns .T. if successful or .F. if the operation has failed.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Remarks:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
The key-value pairs sent to cPostData are in the form of key1=value1. Additional key-value
pairs must be delimited by "&amp;amp;", such as "firstname=John&amp;amp;lastname=Smith".
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cProgressCallback is called 2 variables (nConnectTotalBytes and nConnectBytesSoFar)
are created dynamically by the FLL. These variables can be used within the specified
function, procedure, or method to determine the total size of the source file in bytes
as well as the total progress of the operation (Percentage = 100 * nConnectBytesSoFar
/ nConnectTotalBytes).
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
When the cTraCallback is called 2 variables (nTraceDataType and cTraceData) are created
dynamically by the FLL. The variable nTraceDataType specifies the type of operation
that produced the information contained in cTraceData. The possible values for nTraceDataType
are as follows: 0 = Text, 1 = Header In, 2 = Header Out, 3 = Data In, 4 = Data Out,
5 = SSL Data In, 6 = SSL Data Out, 7 = End.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Function HTTPPost() &lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Signature:&lt;/b&gt; HTTPPost(cPostURL, aPostData[, cProgressCallback[, cTraceCallback]])
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Parameters:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cPostURL - The URL to the file you wish to download.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
aPostData - A multi-dimensional array containing key-value pairs
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Return Value:&lt;/b&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
Logical - returns .T. if successful or .F. if the operation has failed.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Remarks:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
The aPostData array must be sent in by reference. The key-value pairs in aPostData
must have the keys in column 1 and the values in column 2, such as:
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
aPostData(1,1) = "firstname"&lt;br&gt;
aPostData(1,2) = "John"&lt;br&gt;
aPostData(2,1) = "lastname"&lt;br&gt;
aPostData(2,2) = "Smith"
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Function FTPCommands() &lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Signature:&lt;/b&gt; FTPCommands(cFTPURL, aCommands[, cProgressCallback[, cTraceCallback]])
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Parameters:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cFTPURL - The URL to the FTP site you wish to interact with.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
aCommands - A single dimension array containing the commands you wish to have run
on the FTP site.
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Return Value:&lt;/b&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
Logical - returns .T. if successful or .F. if the operation has failed.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Remarks:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
In order to specify port or login information you would simply include them in cFTPURL,
such as “FTP://myusername:mypassword@myftpsite.com:21/. 
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
The aCommands array must be sent in by reference. The aCommands is an array of FTP
commands (as defined by &lt;a href="http://www.faqs.org/rfcs/rfc959.html"&gt;RFC 959&lt;/a&gt;),
such as: 
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
aCommands(1) = "CWD /"&lt;br&gt;
aCommands(2) = "PWD"&lt;br&gt;
aCommands(3) = "RNFR MyDir"&lt;br&gt;
aCommands(4) = "RNTO RenamedMyDir"
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Function FTPSCommands() &lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Signature:&lt;/b&gt; FTPSCommands(cFTPSURL, aCommands[, cProgressCallback[, cTraceCallback]])
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Parameters:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cFTPSURL - The URL to the FTP site you wish to interact with.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
aCommands - A single dimension array containing the commands you wish to have run
on the FTP site.
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cProgressCallback - An optional string denoting a function, procedure, or method that
you want fired whenever a read/write occurs, such as "MyProgress()".
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
cTraceCallback - An optional string denoting a function, procedure, or method that
you want fired whenever additional information regarding the status of the operation
is available. Eample: "MyTrace()"
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Return Value:&lt;/b&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
Logical - returns .T. if successful or .F. if the operation has failed.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Remarks:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
In order to specify port or login information you would simply include them in cFTPSURL,
such as “FTPS://myusername:mypassword@myftpsite.com:21/. 
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
The aCommands array must be sent in by reference. The aCommands is an array of FTP
commands (as defined by &lt;a href="http://www.faqs.org/rfcs/rfc959.html"&gt;RFC 959&lt;/a&gt;),
such as: 
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
aCommands(1) = "CWD /"&lt;br&gt;
aCommands(2) = "PWD"&lt;br&gt;
aCommands(3) = "RNFR MyDir"&lt;br&gt;
aCommands(4) = "RNTO RenamedMyDir"
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Function URLEncode() &lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Signature:&lt;/b&gt; URLEncode(cString)
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Parameters:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cString - The string you want encoded (escaped).
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Return Value:&lt;/b&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
Character - returns the encoded equivalent of cString.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Remarks:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
This function provides libcurl's "URL Escape" functionality. Any character in cString
that is not a-z, A-Z, or 0-9 will be deemed unsafe and be replaced with a "%" followed
by the unsafe character's hex equivalent. For instance spaces are replaced with %20
because the ASCII value of a space is 32 (0x20 in hex).
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Function URLDecode() &lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Signature:&lt;/b&gt; URLDecode(cString)
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Parameters:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cString - The string you want decoded (unescaped).
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Return Value:&lt;/b&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
Character - returns the decoded equivalent of cString.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Remarks:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
This function provides libcurl's "URL Unescape" functionality. Any character in cString
that has been escaped/encoded with a "%" followed by its hex equivalent will be decoded
to its plaintext equivalent. For instance %20 will be turned back into a space - CHR(32).
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Function SetConnectionTimeout() &lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Signature:&lt;/b&gt; SetConnectionTimeout(nSeconds)
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Parameters:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
nSeconds - The number of seconds any connection operation in VFPConnection should
wait before failing due to timeout.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Return Value:&lt;/b&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
None
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Remarks:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
This function effects all connection operations in VFPConnection. The default value
for the connection timeout is 10 seconds. 
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;hr&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Function SetResponseTimeout() &lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Signature:&lt;/b&gt; SetResponseTimeout(nSeconds)
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Parameters:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
nSeconds - The number of seconds any operation in VFPConnection should wait for a
response before failing due to timeout.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Return Value:&lt;/b&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
None
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Remarks:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
This function effects all operations in VFPConnection that are designed to wait for
a server response. The default value for the response timeout is 10 seconds.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Function DateStrToEpochSec() &lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Signature:&lt;/b&gt; DateStrToEpochSec(cDateTime)
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Parameters:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
cDateTime - A datetime string in one of the many formats.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Return Value:&lt;/b&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
Numeric - returns the number of seconds between Epoch and the datetime specified by
cDateTime.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Remarks:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
This function is useful when attempting to convert datetime strings you may encounter
when working with web-based applications. &lt;a href="http://www.ietf.org/rfc/rfc2616.txt"&gt;RFC2616&lt;/a&gt; specifies
which datetime string formats are acceptable for HTTP applications and, in short,
there are a lot of them. For instance...
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
Sun, 06 Nov 1994 08:49:37 GMT&lt;br&gt;
Sunday, 06-Nov-94 08:49:37 GMT&lt;br&gt;
Sun Nov 6 08:49:37 1994&lt;br&gt;
06 Nov 1994 08:49:37 GMT&lt;br&gt;
06-Nov-94 08:49:37 GMT&lt;br&gt;
Nov 6 08:49:37 1994&lt;br&gt;
06 Nov 1994 08:49:37&lt;br&gt;
06-Nov-94 08:49:37&lt;br&gt;
1994 Nov 6 08:49:37&lt;br&gt;
GMT 08:49:37 06-Nov-94 Sunday&lt;br&gt;
94 6 Nov 08:49:37&lt;br&gt;
1994 Nov 606-Nov-94&lt;br&gt;
Sun Nov 6 94&lt;br&gt;
1994.Nov.6&lt;br&gt;
Sun/Nov/6/94/GMT&lt;br&gt;
Sun, 06 Nov 1994 08:49:37 CET&lt;br&gt;
06 Nov 1994 08:49:37 EST&lt;br&gt;
Sun, 12 Sep 2004 15:05:58 -0700&lt;br&gt;
Sat, 11 Sep 2004 21:32:11 +0200&lt;br&gt;
20040912 15:05:58 -0700&lt;br&gt;
20040911 +0200
&lt;/p&gt;
&lt;p class=MsoNormal dir=ltr style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
...are all acceptable. There are also a number of situations where you may be required
to use or know the number of seconds since midnight January 1, 1970 (a.k.a. epoch
- due to unix and POSIX systems which count time this way). In any event, this function
is provided as a crutch if needed.
&lt;/p&gt;
&lt;p class=MsoNormal dir=ltr style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Function CurlVersion() &lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Signature:&lt;/b&gt; CurlVersion()
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Parameters:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
None
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Return Value:&lt;/b&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
String - the versions of &lt;a href="http://curl.haxx.se/libcurl/"&gt;libcurl&lt;/a&gt; and &lt;a href="http://www.openssl.org/"&gt;OpenSSL&lt;/a&gt; that
were used in VFPConnection
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;Remarks:&lt;/b&gt;
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
This may be of some interest to VFP developers who are asking for enhancements or
want to ensure that this library is using the latest and greatest. The static libraries
for libcurl and OpenSSL were both built from the latest source available at the time
using Visual Studio 2003 and ActivePerl.
&lt;/p&gt;
&lt;img width="0" height="0" src="http://www.sweetpotatosoftware.com/SPSBlog/aggbug.ashx?id=b6eb576c-7142-4993-b3f2-74b7af5fb66c" /&gt;</description>
      <comments>http://www.sweetpotatosoftware.com/SPSBlog/CommentView,guid,b6eb576c-7142-4993-b3f2-74b7af5fb66c.aspx</comments>
      <category>Information Technology</category>
      <category>Visual Foxpro</category>
    </item>
    <item>
      <trackback:ping>http://www.sweetpotatosoftware.com/SPSBlog/Trackback.aspx?guid=ebdf7fe4-f97c-4e61-9018-3007904ed8da</trackback:ping>
      <pingback:server>http://www.sweetpotatosoftware.com/SPSBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,ebdf7fe4-f97c-4e61-9018-3007904ed8da.aspx</pingback:target>
      <dc:creator />
      <wfw:comment>http://www.sweetpotatosoftware.com/SPSBlog/CommentView,guid,ebdf7fe4-f97c-4e61-9018-3007904ed8da.aspx</wfw:comment>
      <wfw:commentRss>http://www.sweetpotatosoftware.com/SPSBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=ebdf7fe4-f97c-4e61-9018-3007904ed8da</wfw:commentRss>
      <slash:comments>12</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
            <strong>
              <span class="searchword">VFPCompression</span> Update<br /></strong>
          </font>
          <font face="Verdana, Arial, Helvetica, sans-serif" size="2">This update
contains a fix that effects the Unzip routines and a new function called ZipComment().
I've also updated the sample code and documentation that is provided with this library.</font>
        </p>
        <p>
          <font face="Verdana, Arial, Helvetica, sans-serif" size="2">The bug that was fixed
pertained to 0 byte (length) files were being ignored when a zip file's contents were
extracted. The Zip routines were handling the 0 byte length files correctly.</font>
        </p>
        <p>
          <font face="Verdana, Arial, Helvetica, sans-serif" size="2">The ZipComment() function
allows you to add, replace or delete the global zipfile comment for a specified zip
file. The code at the bottom of this blog entry shows an example of its use and the
documentation now includes this function.</font>
        </p>
        <p>
          <strong>Special Thank You<br /></strong>Special thanks goes out to Mike Sue-Ping who posted out on the <a href="http://www.universalthread.com/">Universal
Thread</a> about the bug that is fixed in this update.
</p>
        <p>
          <strong>What's Next<br /></strong>I still plan to add more functionality to this FLL (ability to create cabs
and self-extracting archives, better error handling, etc.). I'm hopeful that those
of you that download this library will take the time to provide me feedback and any
suggestions you may have for further improving it. If you do find a bug, please comment
on it here and/or contact me directly. Note the "Contact Craig Boyd" link to the right
of this blog entry.
</p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <font face="Verdana" size="2">Until
next time... Visual FoxPro Rocks!</font>
          </span>
        </p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
          </span>
          <font size="2">
            <font face="Verdana, Arial, Helvetica, sans-serif">
              <strong>VFP
Compression Update:<br /><br /></strong>
            </font>
            <a href="http://www.sweetpotatosoftware.com/files/vfpcompression.zip">VFPCompression
FLL Download (37 KB approx.)</a>
          </font>
        </p>
        <p>
          <font size="2">
            <strong>VFP Compression Sample Code:</strong>
          </font>
        </p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">****************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Example
1<br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Zip
a file quickly <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">with</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">or</span> without
password protection.<br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span> LOCFILE(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"vfpcompression.fll"</span>)<br />
?ZipFileQuick(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\MyFile1.txt"</span>)<br />
?ZipFileQuick(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\MyFile2.txt"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyPassword"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span><br /><br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Example
2<br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Zip
a folder quickly <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">with</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">or</span> without
respect<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">for</span> relative
pathing of the files. Password<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> protection
can be included <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">if</span> desired.<br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span> LOCFILE(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"vfpcompression.fll"</span>)<br />
?ZipFolderQuick(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\MyFolder"</span>)<br />
?ZipFolderQuick(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\MyFolder2"</span>,
.T., <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyPassword"</span>)<br />
?ZipFolderQuick(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\MyFolder2"</span>,
.F., <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyPassword"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span><br /><br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Example
3<br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Unzip
a zip file quickly <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">with</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">or</span> without
respect<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">for</span> relative
pathing of the files. Password<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> protection
can be included <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">if</span> desired.<br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span> LOCFILE(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"vfpcompression.fll"</span>)<br />
?UnzipQuick(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\MyFile.zip"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\"</span>)<br />
?UnzipQuick(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\MyFolder.zip"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\"</span>,
.T.)<br />
?UnzipQuick(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\MyFolder.zip"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\"</span>,
.F., <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyPassword"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span><br /><br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Example
4<br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Create
a zip file, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">add</span> some
files <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">to</span> it<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">and</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">then</span> close
it <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">when</span> done.
Respect<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">for</span> relative
pathing <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">and</span> Password<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> protection
can be included <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">if</span> desired.<br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span> LOCFILE(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"vfpcompression.fll"</span>)<br />
?ZipOpen(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyZipFile.zip"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\"</span>,
.F.)<br />
?ZipFile(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\SomeFile.txt"</span>,
.F.)<br />
?ZipFile(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\AnotherFile.txt"</span>,
.F., <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyPassword"</span>)<br />
?ZipClose()<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span><br /><br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Example
5<br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Create
a zip file, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">add</span> some
folders <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">to</span> it<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">and</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">then</span> close
it <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">when</span> done.
Respect<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">for</span> relative
pathing <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">and</span> Password<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> protection
can be included <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">if</span> desired.<br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span> LOCFILE(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"vfpcompression.fll"</span>)<br />
?ZipOpen(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\MyZipFile.zip"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> ?ZipOpen(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyZipFile.zip"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\"</span>,
.F.)<br />
?ZipFolder(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\MyFolder\"</span>,
.F.) &amp;&amp; trailing backslash <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">is</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">optional</span><br />
?ZipFolder(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\AnotherFolder"</span>,
.F., <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyPassword"</span>)<br />
?ZipClose()<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span><br /><br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Example
6<br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Compress <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">and</span> decompress
a <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">string</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">in</span> memory.<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> The
amount of compression <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">is</span> pretty
remarkable.<br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span> LOCFILE(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"vfpcompression.fll"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">CLEAR</span><br />
lcOriginal <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> REPLICATE(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Visual
FoxPro Rocks!"</span>,100)<br />
?<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Original
Length: "</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">+</span> TRANSFORM(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">LEN</span>(lcOriginal))<br />
?<br />
lcCompressed <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> ZipString(lcOriginal)<br />
?<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Compressed:
"</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">+</span> lcCompressed<br />
?<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Compressed
Length: "</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">+</span> TRANSFORM(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">LEN</span>(lcCompressed))<br />
?<br />
?<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Length
Savings: "</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">+</span> TRANSFORM(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">LEN</span>(lcOriginal) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">-</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">LEN</span>(lcCompressed)) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">+</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"
bytes"</span><br />
?<br />
lcUncompressed <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> UnzipString(lcCompressed)<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> ?<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Uncompressed:
"</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">+</span> lcUncompressed<br />
?<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Uncompressed
Length: "</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">+</span> TRANSFORM(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">LEN</span>(lcUncompressed))<br />
?<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Equals
Original: "</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">+</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">IIF</span>(lcUncompressed
== lcOriginal, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"YES"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"NO"</span>)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">IF</span> !(lcUncompressed
== lcOriginal)<br />
    <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">EXIT</span><br />
ENDIF<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span><br /><br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Example
7<br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Demonstrates
the callback functionality<br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span> LOCFILE(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"vfpcompression.fll"</span>)<br />
ZipCallback(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyCallback()"</span>)
&amp;&amp; Start <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Event</span> Handling <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">-</span> Any <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Function</span>/Procedure/Method
(<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">in</span> scope
of course)<br />
?ZipOpen(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MyZip.zip"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\"</span>,
.F.) &amp;&amp; create zip file<br />
?ZipFile(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\MyFile.txt"</span>,
.F.) &amp;&amp; compress file into zip<br />
?ZipClose() &amp;&amp; done zipping<br />
?UnzipQuick(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\MyZip.zip"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\"</span>)
&amp;&amp; unzip contents of Test.zip <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">to</span> C:\<br />
ZipCallback(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">""</span>)
&amp;&amp; <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Stop</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Event</span> Handling<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span><br /><br />
*****************************<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">FUNCTION</span> MyCallback()<br />
    *****************************<br />
    <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Variables
below are created <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">on</span> the
fly<br />
    <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> by
the FLL <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">when</span> the
ZipCallback feature <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">is</span> used<br /><br />
    <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Depends <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">on</span> the
value of nZipEvent<br />
    ?cZipObjectName &amp;&amp; Name of Zip, File, <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">or</span> Folder
being processed<br /><br />
    <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Events
that fire MyCallback<br />
    <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> 0 <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> Open
Zip<br />
    <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> 1 <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> Start
Zip/Unzip of File<br />
    <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> 2 <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> Read/<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Write</span> File
(nZipBytes will contain value of bytes read <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">for</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">event</span>)<br />
    <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> 3 <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">-</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">End</span> Zip/Unzip
of File<br />
    <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> 4 <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">-</span> Folder
Opened<br />
    <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> 5 <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">-</span> Close
Zip<br />
    ?nZipEvent<br /><br />
    <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Number</span> of
Bytes read (<span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">Event</span> 3)<br />
    ?nZipBytes<br /><br />
ENDFUNC<br /><br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Example
8<br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Demonstrates
how <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">to</span> use
the UnzipAFileInfo()<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">and</span> UnzipAFileInfoByIndex()
functions.<br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span> LOCFILE(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"vfpcompression.fll"</span>)<br />
UnzipOpen(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\MyZip.zip"</span>)<br />
UnzipGotoTopFile()<br />
UnzipAFileInfo(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"laTestArray1"</span>)<br />
UnzipClose()<br />
showfileinfo(@laTestArray1)<br />
?<br />
UnzipOpen(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\MyZip.zip"</span>)<br />
UnzipAFileInfoByIndex(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"laTestArray2"</span>,2)<br />
UnzipClose()<br />
showfileinfo(@laTestArray2)<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span><br /><br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">FUNCTION</span> showfileinfo(aFileInfo)<br />
    LOCAL lnCounter<br />
    LOCAL ARRAY aCaptions(13)<br />
    aCaptions(1) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"File
Name"</span><br />
    aCaptions(2) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Comment"</span><br />
    aCaptions(3) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Version"</span><br />
    aCaptions(4) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Version
Needed"</span><br />
    aCaptions(5) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Flags"</span><br />
    aCaptions(6) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Compression
Method"</span><br />
    aCaptions(7) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"DateTime"</span><br />
    aCaptions(8) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"CRC"</span><br />
    aCaptions(9) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Compressed
Size"</span><br />
    aCaptions(10) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Uncompressed
Size"</span><br />
    aCaptions(11) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Internal
Attribute"</span><br />
    aCaptions(12) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"External
Attribute"</span><br />
    aCaptions(13) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span><span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Folder"</span><br />
    <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">FOR</span> lnCounter <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> 1 <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span> 13<br />
        ?aCaptions(lnCounter)<br />
        ?aFileInfo(lnCounter)<br />
        ?TYPE(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"aFileInfo(lnCounter)"</span>)<br />
    ENDFOR<br />
ENDFUNC<br /><br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Example
9<br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span>!<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">*</span> Manipulate
the global zipfile comment of a zip file.<br />
****************************<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span> LOCFILE(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"vfpcompression.fll"</span>)<br />
ZipComment(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\MyZip1.zip"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Hello"</span>)
&amp;&amp; <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">add</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">or</span><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">replace</span> a
global comment <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">to</span> a
zip file<br />
ZipComment(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"C:\MyZip2.zip"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">""</span>)
&amp;&amp; delete a global comment from a zip file<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">SET</span> LIBRARY <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">TO</span></span>
        </p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            </span>
          </span>
          <font size="2">
            <strong>VFP
Compression Documentation:</strong>
          </font>
        </p>
        <font size="2">
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function ZipString() </strong>
            </font>
          </p>
          <font face="Verdana, Arial, Helvetica, sans-serif">
            <p>
              <font size="2">
                <strong>Signature:</strong> ZipString(cString[, nLevel])</font>
            </p>
            <p>
              <font size="2">
                <strong>Parameters:</strong>
              </font>
            </p>
            <p>
              <font size="2">cString - The character string you wish to compress</font>
            </p>
            <p>
              <font size="2">nLevel - The compression level to use which is 1 through 9 (1 is the
fastest, while 9 is the best compression). The default value for this parameter is
6.</font>
            </p>
            <p>
              <font size="2">
                <strong>Return Value:</strong>
              </font>
            </p>
            <p>
              <font size="2">Character Data - the compressed version of cString.</font>
            </p>
            <p>
              <font size="2">
                <strong>Remarks:</strong>
              </font>
            </p>
            <p>
              <font size="2">This function is particularly useful in a client-server application
given that strings of data (such as memo fields, character fields, and xml) can be
compressed before sending them across the network and then extracted at the other
end (using UnzipString).</font>
            </p>
          </font>
          <hr />
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function ZipFileQuick() </strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Signature:</strong> ZipFileQuick(cFileName[,
cPassword])</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Parameters:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cFileName - The fully
qualified file name (full path) of the file you wish to have compressed.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cPassword - The password
you wish to protect the zipped file with.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Return Value:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Logical - returns .T.
if successful or .F. if the operation has failed.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Remarks:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">The zip file that this
function creates will have the same file name as cFileName, with the extension as
".zip".</font>
          </p>
          <hr />
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function ZipFolderQuick() </strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Signature:</strong> ZipFolderQuick(cFolderName[,
lIgnorePaths[, cPassword]])</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Parameters:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cFolderName - The full
path to the folder you wish to have zipped.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cPassword - The password
you wish to protect the zipped files with.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">lIgnorePath - If you wish
to ignore the relative path of the file into the zip file that is being created
you would pass .T. for this parameter. The default value for this parameter is .F.
which means that the relative path will be respected.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Return Value:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Logical - returns .T.
if successful or .F. if the operation has failed.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Remarks:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">The zipfile that this
function creates will have the same file name as cFolderName, with the extension as
".zip".</font>
          </p>
          <hr />
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function ZipOpen() </strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Signature:</strong> ZipOpen(cZipFileName[,cFolderName[,lAppend]])</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Parameters:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cZipFileName - The file
name or full path of the zip file you wish to create.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cFolderName - The full
path of the folder in which you want cZipFileName created.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">lAppend - If the zip file
you are compressing to exists you can choose to append to it by passing .T. to this
parameter. Defaults to .F..</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Return Value:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Logical - returns .T.
if successful or .F. if the operation has failed.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Remarks:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">ZipOpen() is used in conjunction
with the matching ZipClose(). The usual series of function calls would consist of
creating/opening the zip file using ZipOpen, zipping files and/or folders using ZipFile/ZipFileRelative/ZipFolder,
and then closing the zip file using ZipClose.</font>
          </p>
          <hr />
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function ZipClose() </strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Signature:</strong> ZipClose()</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Parameters:</strong> None</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Return Value:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Logical - returns .T.
if successful or .F. if the operation has failed.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Remarks:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">ZipClose() must be called
after issuing a ZipOpen(). The usual series of function calls would consist of creating/opening
the zip file using ZipOpen, zipping files and/or folders using ZipFile/ZipFileRelative/ZipFolder,
and then closing the zip file using ZipClose.</font>
          </p>
          <hr />
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function ZipFile() </strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Signature:</strong> ZipFile(cFileName[,lIgnorePath[,cPassword]])</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Parameters:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cFileName - The file name
or full path of the file you wish to compress.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">lIgnorePath - If you wish
to ignore the relative path of the file into the zip file that is being created
you would pass .T. for this parameter. The default value for this parameter is .F.
which means that the relative path will be respected.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cPassword - The password
you wish to protect the zipped file with.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Return Value:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Logical - returns .T.
if successful or .F. if the operation has failed.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Remarks:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">ZipFile() is used between
calls to ZipOpen() and ZipClose(). The usual series of function calls would consist
of creating/opening the zip file using ZipOpen, zipping files and/or folders using
ZipFile/ZipFileRelative/ZipFolder, and then closing the zip file using ZipClose.</font>
          </p>
          <p>
The cPassword is usually the same for all files within a zip, however it does not
need to be the same. Different passwords can be specified for different files and
you can even selectively password protect files within the zip.
</p>
          <hr />
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function ZipFileRelative()</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Signature:</strong> ZipFileRelative(cFileName[,cRelativePath[,
cPassword]])</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Parameters:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cFileName - The file name
or full path of the file you wish to compress.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cRelativePath - The relative
path you wish to have saved in the zip for this file. This allows you to set up the
structure (relative paths) in the zip different from the actual relative paths of
the files you are compressing.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cPassword - The password
you wish to protect the zipped file with.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Return Value:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Logical - returns .T.
if successful or .F. if the operation has failed.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Remarks:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">ZipFileRelative() is used
between calls to ZipOpen() and ZipClose(). The usual series of function calls would
consist of creating/opening the zip file using ZipOpen, zipping files and/or folders
using ZipFile/ZipFileRelative/ZipFolder, and then closing the zip file using ZipClose.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">The cPassword is usually
the same for all files within a zip, however it does not need to be the same. Different
passwords can be specified for different files and you can even selectively password
protect files within the zip.</font>
          </p>
          <hr />
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function ZipFolder()</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Signature: ZipFolder(cFolderName[,lIgnorePaths[,
cPassword]])</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Parameters:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cFolderName - The full
path to the folder you wish to compress.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">lIgnorePaths - If you
wish to ignore the relative path of the folder into the zip file that is being created
you would pass .T. for this parameter. The default value for this parameter is .F.
which means that paths will be respected.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cPassword - The password
you wish to protect the zipped file with.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Return Value:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Logical - returns .T.
if successful or .F. if the operation has failed.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Remarks:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">ZipFolder() is used between
calls to ZipOpen() and ZipClose(). The usual series of function calls would consist
of creating/opening the zip file using ZipOpen, zipping files and/or folders using
ZipFile/ZipFileRelative/ZipFolder, and then closing the zip file using ZipClose.</font>
          </p>
          <hr />
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function UnzipString()</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Signature:</strong> UnzipString(cString)</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Parameters:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cString - The compressed
string you wish to uncompress.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Return Value:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Character Data - the extracted
version of cString.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Remarks:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">The string to be extracted
must have been compressed with the ZipString() function or other compression function
that is compatible with the compress or compress2 functions in zlib.</font>
          </p>
          <hr />
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function UnzipQuick() </strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Signature:</strong> UnzipQuick(cZipFileName,
[cOutputFolderName[, lIgnorePaths[, cPassword]]])</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Parameters:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cZipFileName - The fully
qualified file name (full path) of the zip file you wish to have extracted.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cOutputFolderName - The
full path to the folder you wish to extract the contents of the zip to.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cPassword - The password
to use when unzipping the file.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">lIgnorePaths - If you
wish to ignore the relative paths that are contained in the zip file you would pass
.T. for this parameter. The default value for this parameter is .F. which means that
the relative paths will be respected.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Return Value:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Logical - returns .T.
if successful or .F. if the operation has failed.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Remarks:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">The file and folders in
the zip file will be extracted into the same folder as the cZipFileName resides in.</font>
          </p>
          <hr />
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function UnzipOpen() </strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Signature:</strong> UnzipOpen(cZipFileName)</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Parameters:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cZipFileName - The file
name or full path of the zip file you wish to uncompress.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Return Value:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Logical - returns .T.
if successful or .F. if the operation has failed.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Remarks:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">UnzipOpen() is used in
conjunction with the matching UnzipClose(). The usual series of function calls would
consist of opening the zip file using UnzipOpen, uncompressing files and/or folders
using Unzip/UnzipTo/UnzipByIndex/UnzipFile, and then closing the zip file using UnzipClose.</font>
          </p>
          <hr />
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function UnzipClose() </strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Signature:</strong> UnzipClose()</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Parameters:</strong> None</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Return Value:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Logical - returns .T.
if successful or .F. if the operation has failed.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Remarks:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">UnzipClose() must be called
after issuing an UnzipOpen(). The usual series of function calls would consist of
opening the zip file using UnzipOpen, uncompressing files and/or folders using Unzip/UnzipTo/UnzipByIndex/UnzipFile,
and then closing the zip file using UnzipClose.</font>
          </p>
          <hr />
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function Unzip() </strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Signature:</strong> Unzip([lIgnorePaths[,
cPassword]])</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Parameters:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">lIgnorePaths - If you
wish to ignore the relative paths that are contained in the zip file you would pass
.T. for this parameter. The default value for this parameter is .F. which means that
the relative paths will be respected.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cPassword - The password
to use when unzipping the file.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Return Value:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Logical - returns .T.
if successful or .F. if the operation has failed.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Remarks:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Unzip() is used between
calls to UnzipOpen() and UnzipClose() to uncompress the entire zip file. The files
and folders contained in the zip file will be extracted to the same folder as the
zip file resides in unless a call to UnzipSetFolder() has been previously issued.
The usual series of function calls would consist of opening the zip file using UnzipOpen,
uncompressing files and/or folders using Unzip/UnzipTo/UnzipByIndex/UnzipFile, and
then closing the zip file using UnzipClose.<br /><br /></font>
          </p>
          <hr />
          <p>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function UnzipTo() </strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Signature:</strong> UnzipTo(cOutputFolderName[,
lIgnorePaths[, cPassword]])</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Parameters:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cOutputFolderName - The
folder into which the zip file contents should be extracted. </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">lIgnorePaths - If you
wish to ignore the relative paths that are contained in the zip file you would pass
.T. for this parameter. The default value for this parameter is .F. which means that
the relative paths will be respected.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cPassword - The password
to use when unzipping the file.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Return Value:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Logical - returns .T.
if successful or .F. if the operation has failed.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Remarks:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">UnzipTo() is used between
calls to UnzipOpen() and UnzipClose(). The functionality of this is similar to calling
UnzipSetFolder() and then Unzip(). The usual series of function calls would consist
of opening the zip file using UnzipOpen, uncompressing files and/or folders using
Unzip/UnzipTo/UnzipByIndex/UnzipFile, and then closing the zip file using UnzipClose.</font>
          </p>
          <hr />
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function UnzipFile() </strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Signature:</strong> UnzipFile(cOutputFolderName[,
lIgnorePaths[, cPassword]])</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Parameters:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cOutputFolderName - The
folder into which the current file (cotained in the zip) should be extracted. </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">lIgnorePaths - If you
wish to ignore the relative path of the current file you would pass .T. for this parameter.
The default value for this parameter is .F. which means that the relative path will
be respected.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cPassword - The password
to use when unzipping the file.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Return Value:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Logical - returns .T.
if successful or .F. if the operation has failed.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Remarks:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">UnzipFile() is used between
calls to UnzipOpen() and UnzipClose() to extract the currently selected file contained
in the zip file. UnzipFile() is used in conjunction with the UnzipGotoTopFile, UnzipGotoNextFile,
UnzipGotoFileByName, and UnzipGotoFileByIndex functions. You can think of the contents
of a zip file as records in a table. In this sense UnzipGotoTopFile, UnzipGotoNextFile,
UnzipGotoFileByName, and UnzipGotoFileByIndex functions are used to move the record
pointer and the UnzipFile function is used to extract the file that the record pointer
is currently on.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">The cPassword is usually
the same for all files within a zip, however it does not need to be the same. Just
keep in mind that passwords can be specified for different files within a zip
and when you are unzipping such an archive you will need to change the cPassword accordingly.</font>
          </p>
          <hr />
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function UnzipByIndex() </strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Signature: UnzipByIndex(nIndex[,
cOutputFolderName[,lIgnorePaths, cPassword]]])</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Parameters:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">nIndex - The index number
of the file to be extracted.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cOutputFolderName - The
folder into which the zip file contents should be extracted.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">lIgnorePaths - If you
wish to ignore the relative path for this file that is contained in the zip file you
would pass .T. for this parameter. The default value for this parameter is .F. which
means that the relative path will be respected.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cPassword - The password
to use when unzipping the file.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Return Value:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Logical - returns .T.
if successful or .F. if the operation has failed.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Remarks:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">UnzipByIndex() is used
between calls to UnzipOpen() and UnzipClose() to extract a file by the position (index)
it holds in the zip file. UnzipByIndex() is used in conjunction with the UnzipFileCount
function. You can think of the contents of a zip file as records in a table. In this
sense UnzipFileCount would give you the record count for the table and the UnzipByIndex
function be used to extract a particular file by record number.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">The cPassword is usually
the same for all files within a zip, however it does not need to be the same. Just
keep in mind that passwords can be specified for different files within a zip
and when you are unzipping such an archive you will need to change the cPassword accordingly.</font>
          </p>
          <hr />
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function UnzipFileCount() </strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Signature:</strong> UnzipFileCount()</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Parameters:</strong> None </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Return Value:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Logical - returns .T.
if successful or .F. if the operation has failed.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Remarks:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">UnzipFileCount() is used
between calls to UnzipOpen() and UnzipClose() to retrieve the number of files that
are contained in the zip file. It does not actually extract anything. UnzipFileCount()
is used in conjunction with the UnzipByIndex function. You can think of the contents
of a zip file as records in a table. In this sense UnzipFileCount would give you the
record count for the table and the UnzipByIndex function be used to extract a particular
file by record number.</font>
          </p>
          <hr />
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function UnzipSetFolder()</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Signature:</strong> UnzipSetFolder(cOutputFolderName)</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Parameters:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cOutputFolderName - The
folder into which the zip file contents should be extracted. </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Return Value:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Logical - returns .T.
if successful or .F. if the operation has failed.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Remarks:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">UnzipSetFolder() is used
between calls to UnzipOpen() and UnzipClose() to set the output folder for extracted
zip contents. It does not actually extract anything. The usual series of function
calls would consist of opening the zip file using UnzipOpen, calling UnzipSetFolder
to set the output folder, uncompressing files and/or folders using Unzip/UnzipTo/UnzipByIndex/UnzipFile,
and then closing the zip file using UnzipClose.</font>
          </p>
          <hr />
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function UnzipGotoTopFile()</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Signature:</strong> UnzipGotoTopFile([cExtension])</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Parameters:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cExtension - The file
extension to use as a filter for file type. All other file types will be ignored and
only the first file of the type specified will be selected in the zip file.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Return Value:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Logical - returns .T.
if successful or .F. if the operation has failed.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Remarks:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">UnzipGotoTopFile() is
used between calls to UnzipOpen() and UnzipClose() to select a particular file in
the contents of the open zip file. UnzipGotoTopFile() is used in conjunction with
the UnzipFile function to extract a particular file from the zip. By using the cExtension
optional parameter you can select the first record of a particular file type. You
can think of the contents of a zip file as records in a table. In this sense UnzipGotoTopFile,
UnzipGotoNextFile, UnzipGotoFileByName, and UnzipGotoFileByIndex functions are used
to move the record pointer and the UnzipFile function is used to extract the file
that the record pointer is currently on.</font>
          </p>
          <hr />
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function UnzipGotoNextFile() </strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Signature:</strong> UnzipGotoNextFile([cExtension])</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Parameters:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cExtension - The file
extension to use as a filter for file type. All other file types will be ignored and
only the next file of the type specified will be selected in the zip file.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Return Value:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Logical - returns .T.
if successful or .F. if the operation has failed.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Remarks:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">UnzipGotoNextFile() is
used between calls to UnzipOpen() and UnzipClose() to select a particular file in
the contents of the open zip file. UnzipGotoNextFile() is used in conjunction with
the UnzipFile function to extract a particular file from the zip. By using the cExtension
optional parameter you can select the next record of a particular file type. You can
think of the contents of a zip file as records in a table. In this sense UnzipGotoTopFile,
UnzipGotoNextFile, UnzipGotoFileByName, and UnzipGotoFileByIndex functions are used
to move the record pointer and the UnzipFile function is used to extract the file
that the record pointer is currently on.</font>
          </p>
          <hr />
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function UnzipGotoFileByName() </strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Signature:</strong> UnzipGotoFileByName(cFileName[,
lIgnoreFilePath])</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Parameters:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cFileName - The file name
of the file you wish to select in the zip file contents. You can specify a relative
path as well to narrow down the search.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">lIgnoreFilePath - If you
wish to just find a file of a particular name in the zip file you can pass .T. for
this parameter and the relative path of the file will be ignored. The first matching
file of the name specified in cFileName will be selected in the zip contents.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Return Value:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Logical - returns .T.
if successful or .F. if the operation has failed.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Remarks:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">UnzipGotoFileByName()
is used between calls to UnzipOpen() and UnzipClose() to select a particular file
in the contents of the open zip file by file name and/or relative path. UnzipGotoFileByName()
is used in conjunction with the UnzipFile function to extract a particular file from
the open zip file. You can think of the contents of a zip file as records in a table.
In this sense UnzipGotoTopFile, UnzipGotoNextFile, UnzipGotoFileByName, and UnzipGotoFileByIndex
functions are used to move the record pointer and the UnzipFile function is used to
extract the file that the record pointer is currently on.</font>
          </p>
          <hr />
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function UnzipGotoFileByIndex() </strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Signature:</strong> UnzipGotoFileByIndex(nIndex)</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Parameters:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">nIndex - The index number
of the file to be selected.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Return Value:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Logical - returns .T.
if successful or .F. if the operation has failed.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Remarks:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">UnzipGotoFileByIndex()
is used between calls to UnzipOpen() and UnzipClose() to select a particular file
by the position it physically holds in the contents of the open zip file. UnzipGotoFileByIndex()
is used in conjunction with the UnzipFile function to extract a particular file from
the zip file contents. You can think of the contents of a zip file as records in a
table. In this sense UnzipGotoTopFile, UnzipGotoNextFile, UnzipGotoFileByName, and
UnzipGotoFileByIndex functions are used to move the record pointer and the UnzipFile
function is used to extract the file that the record pointer is currently on.</font>
          </p>
          <hr />
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function UnzipAFileInfoByIndex() </strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Signature:</strong> UnzipAFileInfoByIndex(cArrayName,
nIndex)</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Parameters:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cArrayName - Name of the
VFP array to be created with file information in it.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">nIndex - The index number
of the file you want to return information about.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Return Value:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Logical - returns .T.
if successful or .F. if the operation has failed.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Creates an array with
13 rows (elements) in it. The rows contain various pieces of information regarding
the file that is held in the zip file at nIndex. The following table describes the
contents and data type of each row in the array:</font>
          </p>
          <p>
            <table bordercolor="#000000" width="80%" border="1">
              <tbody>
                <tr bordercolor="#000000" bgcolor="#3399ff">
                  <td>
                    <strong>
                      <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Row</font>
                    </strong>
                  </td>
                  <td>
                    <strong>
                      <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Array Content</font>
                    </strong>
                  </td>
                  <td>
                    <strong>
                      <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Data Type</font>
                    </strong>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">1</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">File Name</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Character</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">2</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Comment</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Character</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">3</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Version</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Numeric</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">4</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Version Needed</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Numeric</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">5</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Flags</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Numeric</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">6</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Compression Method </font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Numeric</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">7</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">DOS Date</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Datetime</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">8</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">CRC</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Numeric</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">9</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Compressed Size </font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Numeric</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">10</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Uncompressed Size </font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Numeric</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">11</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Internal Attribute</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Numeric</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">12</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">External Attribute</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Numeric</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">13</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Folder</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Logical</font>
                  </td>
                </tr>
              </tbody>
            </table>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Remarks:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">The array that is created
will have whatever name was specified by cArrayName. Should the array already exist
it will release it and recreate it. UnzipAFileInfoByIndex() is used between calls
to UnzipOpen() and UnzipClose() to show information about a particular file. The file
is referred to by the position it physically holds in the contents of the open zip
file. You can think of the contents of a zip file as records in a table. In this sense
the UnzipAFileInfoByIndex function is used to refer to and retrieve information about
a particular record number in the zip file.</font>
          </p>
          <hr />
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function UnzipAFileInfo() </strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Signature:</strong> UnzipAFileInfo(cArrayName)</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Parameters:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cArrayName - Name of the
VFP array to be created with file information in it.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Return Value:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Logical - returns .T.
if successful or .F. if the operation has failed.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Creates an array with
13 rows (elements) in it. The rows contain various pieces of information regarding
the currently selected file in the zip. The following table describes the contents
and data type of each row in the array:</font>
          </p>
          <p>
            <table bordercolor="#000000" width="80%" border="1">
              <tbody>
                <tr bordercolor="#000000" bgcolor="#3399ff">
                  <td>
                    <strong>
                      <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Row</font>
                    </strong>
                  </td>
                  <td>
                    <strong>
                      <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Array Content</font>
                    </strong>
                  </td>
                  <td>
                    <strong>
                      <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Data Type</font>
                    </strong>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">1</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">File Name</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Character</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">2</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Comment</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Character</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">3</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Version</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Numeric</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">4</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Version Needed</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Numeric</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">5</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Flags</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Numeric</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">6</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Compression Method </font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Numeric</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">7</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">DOS Date</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Datetime</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">8</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">CRC</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Numeric</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">9</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Compressed Size </font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Numeric</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">10</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Uncompressed Size </font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Numeric</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">11</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Internal Attribute</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Numeric</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">12</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">External Attribute</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Numeric</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">13</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Folder</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Logical</font>
                  </td>
                </tr>
              </tbody>
            </table>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Remarks:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">The array that is created
will have whatever name was specified by cArrayName. Should the array already exist
it will release it and recreate it. UnzipAFileInfo() is used between calls to UnzipOpen()
and UnzipClose() to show information about a particular file. Use the UnzipAFileInfo
function in conjunction with UnzipGotoTopFile, UnzipGotoNextFile, UnzipGotoFileByName,
and UnzipGotoFileByIndex functions to return information regarding a particular file
contained in the open zip file. You can think of the contents of a zip file as records
in a table. In this sense the UnzipAFileInfo function is used to refer to and retrieve
information about the record that the record pointer is currently on within the zip
file.</font>
          </p>
          <hr />
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function ZipCallback() </strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Signature:</strong> ZipCallback(cFunction)</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Parameters:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cFunction - A string denoting
a function, procedure, or method that you want fired whenever a zip event occurs,
such as "MyCallback()".</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Return Value: </strong>None</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Events:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">When one of the following
zip events occurs the function/procedure/method specified by the cFunction parameter
will be called. cZipObjectName, nZipEvent, and nZipBytes are private variables created
on-the-fly by the FLL. They will contain the values specified in the table below.</font>
          </p>
          <p>
            <table bordercolor="#000000" width="80%" border="1">
              <tbody>
                <tr bordercolor="#000000" bgcolor="#3399ff">
                  <td>
                    <strong>
                      <font face="Arial, Helvetica, sans-serif" size="2">Event Description </font>
                    </strong>
                  </td>
                  <td>
                    <font face="Arial, Helvetica, sans-serif" size="2">
                      <strong>cZipObjectName (character) </strong>
                    </font>
                  </td>
                  <td>
                    <font face="Arial, Helvetica, sans-serif" size="2">
                      <strong>nZipEvent (numeric) </strong>
                    </font>
                  </td>
                  <td>
                    <strong>
                      <font face="Arial, Helvetica, sans-serif" size="2">nZipBytes (numeric)</font>
                    </strong>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Zip Opened</font>
                  </td>
                  <td>
                    <font size="2">Name and path of zip file</font>
                  </td>
                  <td>
                    <font size="2">0</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">N/A</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Zip/Unzip File Start</font>
                  </td>
                  <td>
                    <font size="2">Name and path of file being zipped/unzipped</font>
                  </td>
                  <td>
                    <font size="2">1</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">N/A</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Zip Read or Unzip Write</font>
                  </td>
                  <td>
                    <font size="2">Name and path of file being zipped/unzipped</font>
                  </td>
                  <td>
                    <font size="2">2</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Number of bytes currently
being read or written</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Zip/Unzip File End</font>
                  </td>
                  <td>
                    <font size="2">Name and path of file being zipped/unzipped</font>
                  </td>
                  <td>
                    <font size="2">3</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">N/A</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font size="2">Zip/Unzip Folder Opened</font>
                  </td>
                  <td>
                    <font size="2">Name and path of folder being zipped/unzipped</font>
                  </td>
                  <td>
                    <font size="2">4</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">N/A</font>
                  </td>
                </tr>
                <tr bordercolor="#000000">
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Zip Closed</font>
                  </td>
                  <td>
                    <font size="2">Name and path of zip file</font>
                  </td>
                  <td>
                    <font size="2">5</font>
                  </td>
                  <td>
                    <font face="Verdana, Arial, Helvetica, sans-serif" size="2">N/A</font>
                  </td>
                </tr>
              </tbody>
            </table>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Remarks:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">Event handling is started
as soon as you call ZipCallback and pass it the name of a function, procedure, or
object method. ZipCallback provides a way for you to hook into the internal events
happening inside of the VFPCompression FLL. nZipBytes reports the number of bytes
currently being read during zip (2048 bytes at a time) or written during unzip (4096
bytes at a time) of an individual file. In order to turn off event handling simply
call the ZipCallback with an empty length string, such as ZipCallback("").</font>
          </p>
          <hr />
          <p>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="3">
              <strong>Function ZipComment() </strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Signature:</strong> ZipComment(cZipFileName,
cComment)</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Parameters:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cZipFileName - The file
name or full path to the zip file you wish to add, replace, or delete the comment
on.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">cComment - A string
containing the comment (maximum of 255 characters)</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Return Value:</strong>
            </font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">None - returns .T. if
successful or .F. if the operation has failed.</font>
          </p>
          <p>
            <font face="Verdana, Arial, Helvetica, sans-serif" size="2">
              <strong>Remarks:</strong>
            </font>
          </p>
          <p>
If a comment does not exist in the zip file, the string designated in cComment will
be added. However, if a comment already exists in the zip file, the existing
comment will be replaced with the cComment specified. This replacement functionality
allows you to also delete an existing comment in a zip file by passing an empty string
to the cComment parameter.
</p>
          <p>
 
</p>
        </font>
        <img width="0" height="0" src="http://www.sweetpotatosoftware.com/SPSBlog/aggbug.ashx?id=ebdf7fe4-f97c-4e61-9018-3007904ed8da" />
      </body>
      <title>VFPCompression Update - Fix and ZipFile Comment Support</title>
      <guid isPermaLink="false">http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,ebdf7fe4-f97c-4e61-9018-3007904ed8da.aspx</guid>
      <link>http://www.sweetpotatosoftware.com/SPSBlog/2008/12/01/VFPCompressionUpdateFixAndZipFileCommentSupport.aspx</link>
      <pubDate>Mon, 01 Dec 2008 02:12:25 GMT</pubDate>
      <description>&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;&lt;span class=searchword&gt;VFPCompression&lt;/span&gt; Update&lt;br&gt;
&lt;/strong&gt;&lt;/font&gt;&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;This update
contains a fix that effects the Unzip routines and a new function called ZipComment().
I've also updated the sample code and documentation that is provided with this library.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;The bug that was fixed pertained
to 0 byte (length) files were being ignored when a zip file's contents were extracted.
The Zip routines were handling the 0 byte length files correctly.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;The ZipComment() function
allows you to add, replace or&amp;nbsp;delete&amp;nbsp;the global zipfile comment for a specified&amp;nbsp;zip
file. The code at the bottom of this blog entry shows an example of its use and the
documentation now includes this function.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Special Thank You&lt;br&gt;
&lt;/strong&gt;Special thanks goes&amp;nbsp;out to Mike Sue-Ping who posted out on the &lt;a href="http://www.universalthread.com/"&gt;Universal
Thread&lt;/a&gt;&amp;nbsp;about the bug that is fixed in this update.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;What's Next&lt;br&gt;
&lt;/strong&gt;I still plan to add more functionality to this FLL (ability to create cabs
and self-extracting archives, better error handling, etc.). I'm hopeful that those
of you that download this library will take the time to provide me feedback and any
suggestions you may have for further improving it. If you do find a bug, please comment
on it here and/or contact me directly. Note the "Contact Craig Boyd" link to the right
of this blog entry.
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;font face=Verdana size=2&gt;Until
next time... Visual FoxPro Rocks!&lt;/font&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;/span&gt;&lt;font size=2&gt;&lt;font face="Verdana, Arial, Helvetica, sans-serif"&gt;&lt;strong&gt;VFP
Compression Update:&lt;br&gt;
&lt;br&gt;
&lt;/strong&gt;&lt;/font&gt;&lt;a href="http://www.sweetpotatosoftware.com/files/vfpcompression.zip"&gt;VFPCompression
FLL Download (37 KB approx.)&lt;/a&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=2&gt;&lt;strong&gt;VFP Compression Sample Code:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Example
1&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Zip
a file quickly &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;with&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;or&lt;/span&gt; without
password protection.&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt; LOCFILE(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"vfpcompression.fll"&lt;/span&gt;)&lt;br&gt;
?ZipFileQuick(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\MyFile1.txt"&lt;/span&gt;)&lt;br&gt;
?ZipFileQuick(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\MyFile2.txt"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyPassword"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Example
2&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Zip
a folder quickly &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;with&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;or&lt;/span&gt; without
respect&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;for&lt;/span&gt; relative
pathing of the files. Password&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; protection
can be included &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;if&lt;/span&gt; desired.&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt; LOCFILE(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"vfpcompression.fll"&lt;/span&gt;)&lt;br&gt;
?ZipFolderQuick(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\MyFolder"&lt;/span&gt;)&lt;br&gt;
?ZipFolderQuick(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\MyFolder2"&lt;/span&gt;,
.T., &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyPassword"&lt;/span&gt;)&lt;br&gt;
?ZipFolderQuick(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\MyFolder2"&lt;/span&gt;,
.F., &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyPassword"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Example
3&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Unzip
a zip file quickly &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;with&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;or&lt;/span&gt; without
respect&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;for&lt;/span&gt; relative
pathing of the files. Password&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; protection
can be included &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;if&lt;/span&gt; desired.&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt; LOCFILE(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"vfpcompression.fll"&lt;/span&gt;)&lt;br&gt;
?UnzipQuick(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\MyFile.zip"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\"&lt;/span&gt;)&lt;br&gt;
?UnzipQuick(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\MyFolder.zip"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\"&lt;/span&gt;,
.T.)&lt;br&gt;
?UnzipQuick(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\MyFolder.zip"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\"&lt;/span&gt;,
.F., &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyPassword"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Example
4&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Create
a zip file, &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;add&lt;/span&gt; some
files &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;to&lt;/span&gt; it&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;and&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;then&lt;/span&gt; close
it &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;when&lt;/span&gt; done.
Respect&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;for&lt;/span&gt; relative
pathing &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;and&lt;/span&gt; Password&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; protection
can be included &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;if&lt;/span&gt; desired.&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt; LOCFILE(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"vfpcompression.fll"&lt;/span&gt;)&lt;br&gt;
?ZipOpen(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyZipFile.zip"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\"&lt;/span&gt;,
.F.)&lt;br&gt;
?ZipFile(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\SomeFile.txt"&lt;/span&gt;,
.F.)&lt;br&gt;
?ZipFile(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\AnotherFile.txt"&lt;/span&gt;,
.F., &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyPassword"&lt;/span&gt;)&lt;br&gt;
?ZipClose()&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Example
5&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Create
a zip file, &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;add&lt;/span&gt; some
folders &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;to&lt;/span&gt; it&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;and&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;then&lt;/span&gt; close
it &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;when&lt;/span&gt; done.
Respect&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;for&lt;/span&gt; relative
pathing &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;and&lt;/span&gt; Password&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; protection
can be included &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;if&lt;/span&gt; desired.&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt; LOCFILE(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"vfpcompression.fll"&lt;/span&gt;)&lt;br&gt;
?ZipOpen(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\MyZipFile.zip"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; ?ZipOpen(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyZipFile.zip"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\"&lt;/span&gt;,
.F.)&lt;br&gt;
?ZipFolder(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\MyFolder\"&lt;/span&gt;,
.F.) &amp;amp;&amp;amp; trailing backslash &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;is&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;optional&lt;/span&gt;
&lt;br&gt;
?ZipFolder(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\AnotherFolder"&lt;/span&gt;,
.F., &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyPassword"&lt;/span&gt;)&lt;br&gt;
?ZipClose()&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Example
6&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Compress &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;and&lt;/span&gt; decompress
a &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;string&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;in&lt;/span&gt; memory.&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; The
amount of compression &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;is&lt;/span&gt; pretty
remarkable.&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt; LOCFILE(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"vfpcompression.fll"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;CLEAR&lt;/span&gt;
&lt;br&gt;
lcOriginal &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; REPLICATE(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Visual
FoxPro Rocks!"&lt;/span&gt;,100)&lt;br&gt;
?&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Original
Length: "&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;+&lt;/span&gt; TRANSFORM(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;LEN&lt;/span&gt;(lcOriginal))&lt;br&gt;
?&lt;br&gt;
lcCompressed &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; ZipString(lcOriginal)&lt;br&gt;
?&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Compressed:
"&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;+&lt;/span&gt; lcCompressed&lt;br&gt;
?&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Compressed
Length: "&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;+&lt;/span&gt; TRANSFORM(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;LEN&lt;/span&gt;(lcCompressed))&lt;br&gt;
?&lt;br&gt;
?&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Length
Savings: "&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;+&lt;/span&gt; TRANSFORM(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;LEN&lt;/span&gt;(lcOriginal) &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;-&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;LEN&lt;/span&gt;(lcCompressed)) &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;+&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"
bytes"&lt;/span&gt;
&lt;br&gt;
?&lt;br&gt;
lcUncompressed &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; UnzipString(lcCompressed)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; ?&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Uncompressed:
"&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;+&lt;/span&gt; lcUncompressed&lt;br&gt;
?&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Uncompressed
Length: "&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;+&lt;/span&gt; TRANSFORM(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;LEN&lt;/span&gt;(lcUncompressed))&lt;br&gt;
?&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Equals
Original: "&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;+&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;IIF&lt;/span&gt;(lcUncompressed
== lcOriginal, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"YES"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"NO"&lt;/span&gt;)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;IF&lt;/span&gt; !(lcUncompressed
== lcOriginal)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;EXIT&lt;/span&gt;
&lt;br&gt;
ENDIF&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Example
7&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Demonstrates
the callback functionality&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt; LOCFILE(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"vfpcompression.fll"&lt;/span&gt;)&lt;br&gt;
ZipCallback(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyCallback()"&lt;/span&gt;)
&amp;amp;&amp;amp; Start &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Event&lt;/span&gt; Handling &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;-&lt;/span&gt; Any &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Function&lt;/span&gt;/Procedure/Method
(&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;in&lt;/span&gt; scope
of course)&lt;br&gt;
?ZipOpen(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyZip.zip"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\"&lt;/span&gt;,
.F.) &amp;amp;&amp;amp; create zip file&lt;br&gt;
?ZipFile(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\MyFile.txt"&lt;/span&gt;,
.F.) &amp;amp;&amp;amp; compress file into zip&lt;br&gt;
?ZipClose() &amp;amp;&amp;amp; done zipping&lt;br&gt;
?UnzipQuick(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\MyZip.zip"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\"&lt;/span&gt;)
&amp;amp;&amp;amp; unzip contents of Test.zip &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;to&lt;/span&gt; C:\&lt;br&gt;
ZipCallback(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;""&lt;/span&gt;)
&amp;amp;&amp;amp; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Stop&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Event&lt;/span&gt; Handling&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
*****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;FUNCTION&lt;/span&gt; MyCallback()&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*****************************&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Variables
below are created &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;on&lt;/span&gt; the
fly&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; by
the FLL &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;when&lt;/span&gt; the
ZipCallback feature &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;is&lt;/span&gt; used&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Depends &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;on&lt;/span&gt; the
value of nZipEvent&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;?cZipObjectName &amp;amp;&amp;amp; Name of Zip, File, &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;or&lt;/span&gt; Folder
being processed&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Events
that fire MyCallback&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; 0 &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; Open
Zip&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; 1 &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; Start
Zip/Unzip of File&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; 2 &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; Read/&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Write&lt;/span&gt; File
(nZipBytes will contain value of bytes read &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;for&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;event&lt;/span&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; 3 &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;-&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;End&lt;/span&gt; Zip/Unzip
of File&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; 4 &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;-&lt;/span&gt; Folder
Opened&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; 5 &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;-&lt;/span&gt; Close
Zip&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;?nZipEvent&lt;br&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Number&lt;/span&gt; of
Bytes read (&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;Event&lt;/span&gt; 3)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;?nZipBytes&lt;br&gt;
&lt;br&gt;
ENDFUNC&lt;br&gt;
&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Example
8&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Demonstrates
how &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;to&lt;/span&gt; use
the UnzipAFileInfo()&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;and&lt;/span&gt; UnzipAFileInfoByIndex()
functions.&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt; LOCFILE(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"vfpcompression.fll"&lt;/span&gt;)&lt;br&gt;
UnzipOpen(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\MyZip.zip"&lt;/span&gt;)&lt;br&gt;
UnzipGotoTopFile()&lt;br&gt;
UnzipAFileInfo(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"laTestArray1"&lt;/span&gt;)&lt;br&gt;
UnzipClose()&lt;br&gt;
showfileinfo(@laTestArray1)&lt;br&gt;
?&lt;br&gt;
UnzipOpen(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\MyZip.zip"&lt;/span&gt;)&lt;br&gt;
UnzipAFileInfoByIndex(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"laTestArray2"&lt;/span&gt;,2)&lt;br&gt;
UnzipClose()&lt;br&gt;
showfileinfo(@laTestArray2)&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;FUNCTION&lt;/span&gt; showfileinfo(aFileInfo)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LOCAL lnCounter&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LOCAL ARRAY aCaptions(13)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aCaptions(1) &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"File
Name"&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aCaptions(2) &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Comment"&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aCaptions(3) &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Version"&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aCaptions(4) &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Version
Needed"&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aCaptions(5) &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Flags"&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aCaptions(6) &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Compression
Method"&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aCaptions(7) &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"DateTime"&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aCaptions(8) &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"CRC"&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aCaptions(9) &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Compressed
Size"&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aCaptions(10) &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Uncompressed
Size"&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aCaptions(11) &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Internal
Attribute"&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aCaptions(12) &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"External
Attribute"&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;aCaptions(13) &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Folder"&lt;/span&gt;
&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;FOR&lt;/span&gt; lnCounter &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; 1 &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt; 13&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;?aCaptions(lnCounter)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;?aFileInfo(lnCounter)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;?TYPE(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"aFileInfo(lnCounter)"&lt;/span&gt;)&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;ENDFOR&lt;br&gt;
ENDFUNC&lt;br&gt;
&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Example
9&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt;!&lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;*&lt;/span&gt; Manipulate
the global zipfile comment of a zip file.&lt;br&gt;
****************************&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt; LOCFILE(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"vfpcompression.fll"&lt;/span&gt;)&lt;br&gt;
ZipComment(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\MyZip1.zip"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"Hello"&lt;/span&gt;)
&amp;amp;&amp;amp; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;add&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;or&lt;/span&gt; &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;replace&lt;/span&gt; a
global comment &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;to&lt;/span&gt; a
zip file&lt;br&gt;
ZipComment(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\MyZip2.zip"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;""&lt;/span&gt;)
&amp;amp;&amp;amp; delete a global comment from a zip file&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt;&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;/span&gt;&lt;/span&gt;&gt;&lt;font size=2&gt;&lt;strong&gt;VFP
Compression Documentation:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;font size=2&gt; 
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=3&gt;&lt;strong&gt;Function ZipString() &lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif"&gt; 
&lt;p&gt;
&lt;font size=2&gt;&lt;strong&gt;Signature:&lt;/strong&gt; ZipString(cString[, nLevel])&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=2&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=2&gt;cString - The character string you wish to compress&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=2&gt;nLevel - The compression level to use which is 1 through 9 (1 is the
fastest, while 9 is the best compression). The default value for this parameter is
6.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=2&gt;&lt;strong&gt;Return Value:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=2&gt;Character Data - the compressed version of cString.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=2&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=2&gt;This function is particularly useful in a client-server application given
that strings of data (such as memo fields, character fields, and xml) can be compressed
before sending them across the network and then extracted at the other end (using
UnzipString).&lt;/font&gt;
&lt;/p&gt;
&lt;/font&gt; 
&lt;hr&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=3&gt;&lt;strong&gt;Function ZipFileQuick() &lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Signature:&lt;/strong&gt; ZipFileQuick(cFileName[,
cPassword])&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cFileName - The fully qualified
file name (full path) of the file you wish to have compressed.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cPassword - The password
you wish to protect the zipped file with.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Return Value:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Logical - returns .T. if
successful or .F. if the operation has failed.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;The zip file that this function
creates will have the same file name as cFileName, with the extension as ".zip".&lt;/font&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=3&gt;&lt;strong&gt;Function ZipFolderQuick() &lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Signature:&lt;/strong&gt; ZipFolderQuick(cFolderName[,
lIgnorePaths[, cPassword]])&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cFolderName - The full path
to the folder you wish to have zipped.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cPassword - The password
you wish to protect the zipped files with.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;lIgnorePath - If you wish
to&amp;nbsp;ignore the relative path of the file into the zip file that is being created
you would pass .T. for this parameter. The default value for this parameter is .F.
which means that the relative path will be respected.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Return Value:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Logical - returns .T. if
successful or .F. if the operation has failed.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;The zipfile that this function
creates will have the same file name as cFolderName, with the extension as ".zip".&lt;/font&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=3&gt;&lt;strong&gt;Function ZipOpen() &lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Signature:&lt;/strong&gt; ZipOpen(cZipFileName[,cFolderName[,lAppend]])&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cZipFileName - The file
name or full path of the zip file you wish to create.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cFolderName - The full path
of the folder in which you want cZipFileName created.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;lAppend - If the zip file
you are compressing to exists you can choose to append to it by passing .T. to this
parameter. Defaults to .F..&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Return Value:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Logical - returns .T. if
successful or .F. if the operation has failed.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;ZipOpen() is used in conjunction
with the matching ZipClose(). The usual series of function calls would consist of
creating/opening the zip file using ZipOpen, zipping files and/or folders using ZipFile/ZipFileRelative/ZipFolder,
and then closing the zip file using ZipClose.&lt;/font&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=3&gt;&lt;strong&gt;Function ZipClose() &lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Signature:&lt;/strong&gt; ZipClose()&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Parameters:&lt;/strong&gt; None&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Return Value:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Logical - returns .T. if
successful or .F. if the operation has failed.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;ZipClose() must be called
after issuing a ZipOpen(). The usual series of function calls would consist of creating/opening
the zip file using ZipOpen, zipping files and/or folders using ZipFile/ZipFileRelative/ZipFolder,
and then closing the zip file using ZipClose.&lt;/font&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=3&gt;&lt;strong&gt;Function ZipFile() &lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Signature:&lt;/strong&gt; ZipFile(cFileName[,lIgnorePath[,cPassword]])&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cFileName - The file name
or full path of the file you wish to compress.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;lIgnorePath - If you wish
to&amp;nbsp;ignore the relative path of the file into the zip file that is being created
you would pass .T. for this parameter. The default value for this parameter is .F.
which means that the relative path will be respected.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cPassword - The password
you wish to protect the zipped file with.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Return Value:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Logical - returns .T. if
successful or .F. if the operation has failed.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;ZipFile() is used between
calls to ZipOpen() and ZipClose(). The usual series of function calls would consist
of creating/opening the zip file using ZipOpen, zipping files and/or folders using
ZipFile/ZipFileRelative/ZipFolder, and then closing the zip file using ZipClose.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
The cPassword is usually the same for all files within a zip, however it does not
need to be the same. Different passwords can be specified for different files and
you can even selectively password protect files within the zip.
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=3&gt;&lt;strong&gt;Function ZipFileRelative()&lt;/strong&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Signature:&lt;/strong&gt; ZipFileRelative(cFileName[,cRelativePath[,
cPassword]])&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cFileName - The file name
or full path of the file you wish to compress.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cRelativePath - The relative
path you wish to have saved in the zip for this file. This allows you to set up the
structure (relative paths) in the zip different from the actual relative paths of
the files you are compressing.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cPassword - The password
you wish to protect the zipped file with.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Return Value:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Logical - returns .T. if
successful or .F. if the operation has failed.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;ZipFileRelative() is used
between calls to ZipOpen() and ZipClose(). The usual series of function calls would
consist of creating/opening the zip file using ZipOpen, zipping files and/or folders
using ZipFile/ZipFileRelative/ZipFolder, and then closing the zip file using ZipClose.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;The cPassword is usually
the same for all files within a zip, however it does not need to be the same. Different
passwords can be specified for different files and you can even selectively password
protect files within the zip.&lt;/font&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=3&gt;&lt;strong&gt;Function ZipFolder()&lt;/strong&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Signature: ZipFolder(cFolderName[,lIgnorePaths[,
cPassword]])&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cFolderName - The full path
to the folder you wish to compress.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;lIgnorePaths - If you wish
to ignore the relative path of the folder into the zip file that is being created
you would pass .T. for this parameter. The default value for this parameter is .F.
which means that paths will be respected.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cPassword - The password
you wish to protect the zipped file with.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Return Value:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Logical - returns .T. if
successful or .F. if the operation has failed.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;ZipFolder() is used between
calls to ZipOpen() and ZipClose(). The usual series of function calls would consist
of creating/opening the zip file using ZipOpen, zipping files and/or folders using
ZipFile/ZipFileRelative/ZipFolder, and then closing the zip file using ZipClose.&lt;/font&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=3&gt;&lt;strong&gt;Function UnzipString()&lt;/strong&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Signature:&lt;/strong&gt; UnzipString(cString)&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cString - The compressed
string you wish to uncompress.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Return Value:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Character Data - the extracted
version of cString.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;The string to be extracted
must have been compressed with the ZipString() function or other compression function
that is compatible with the compress or compress2 functions in zlib.&lt;/font&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=3&gt;&lt;strong&gt;Function UnzipQuick() &lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Signature:&lt;/strong&gt; UnzipQuick(cZipFileName,
[cOutputFolderName[, lIgnorePaths[, cPassword]]])&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cZipFileName - The fully
qualified file name (full path) of the zip file you wish to have extracted.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cOutputFolderName - The
full path to the folder you wish to extract the contents of the zip to.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cPassword - The password
to use when unzipping the file.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;lIgnorePaths - If you wish
to ignore the relative paths that are contained in the zip file you would pass .T.
for this parameter. The default value for this parameter is .F. which means that the
relative paths will be respected.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Return Value:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Logical - returns .T. if
successful or .F. if the operation has failed.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;The file and folders in
the zip file will be extracted into the same folder as the cZipFileName resides in.&lt;/font&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=3&gt;&lt;strong&gt;Function UnzipOpen() &lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Signature:&lt;/strong&gt; UnzipOpen(cZipFileName)&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cZipFileName - The file
name or full path of the zip file you wish to uncompress.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Return Value:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Logical - returns .T. if
successful or .F. if the operation has failed.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;UnzipOpen() is used in conjunction
with the matching UnzipClose(). The usual series of function calls would consist of
opening the zip file using UnzipOpen, uncompressing files and/or folders using Unzip/UnzipTo/UnzipByIndex/UnzipFile,
and then closing the zip file using UnzipClose.&lt;/font&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=3&gt;&lt;strong&gt;Function UnzipClose() &lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Signature:&lt;/strong&gt; UnzipClose()&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Parameters:&lt;/strong&gt; None&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Return Value:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Logical - returns .T. if
successful or .F. if the operation has failed.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;UnzipClose() must be called
after issuing an UnzipOpen(). The usual series of function calls would consist of
opening the zip file using UnzipOpen, uncompressing files and/or folders using Unzip/UnzipTo/UnzipByIndex/UnzipFile,
and then closing the zip file using UnzipClose.&lt;/font&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=3&gt;&lt;strong&gt;Function Unzip() &lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Signature:&lt;/strong&gt; Unzip([lIgnorePaths[,
cPassword]])&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Parameters:&lt;/strong&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;lIgnorePaths - If you wish
to ignore the relative paths that are contained in the zip file you would pass .T.
for this parameter. The default value for this parameter is .F. which means that the
relative paths will be respected.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cPassword - The password
to use when unzipping the file.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Return Value:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Logical - returns .T. if
successful or .F. if the operation has failed.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Unzip() is used between
calls to UnzipOpen() and UnzipClose() to uncompress the entire zip file. The files
and folders contained in the zip file will be extracted to the same folder as the
zip file resides in unless a call to UnzipSetFolder() has been previously issued.
The usual series of function calls would consist of opening the zip file using UnzipOpen,
uncompressing files and/or folders using Unzip/UnzipTo/UnzipByIndex/UnzipFile, and
then closing the zip file using UnzipClose.&lt;br&gt;
&lt;br&gt;
&lt;/font&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=3&gt;&lt;strong&gt;Function UnzipTo() &lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Signature:&lt;/strong&gt; UnzipTo(cOutputFolderName[,
lIgnorePaths[, cPassword]])&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cOutputFolderName - The
folder into which the zip file contents should be extracted. &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;lIgnorePaths - If you wish
to ignore the relative paths that are contained in the zip file you would pass .T.
for this parameter. The default value for this parameter is .F. which means that the
relative paths will be respected.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cPassword - The password
to use when unzipping the file.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Return Value:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Logical - returns .T. if
successful or .F. if the operation has failed.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;UnzipTo() is used between
calls to UnzipOpen() and UnzipClose(). The functionality of this is similar to calling
UnzipSetFolder() and then Unzip(). The usual series of function calls would consist
of opening the zip file using UnzipOpen, uncompressing files and/or folders using
Unzip/UnzipTo/UnzipByIndex/UnzipFile, and then closing the zip file using UnzipClose.&lt;/font&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=3&gt;&lt;strong&gt;Function UnzipFile() &lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Signature:&lt;/strong&gt; UnzipFile(cOutputFolderName[,
lIgnorePaths[, cPassword]])&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cOutputFolderName - The
folder into which the current file (cotained in the zip) should be extracted. &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;lIgnorePaths - If you wish
to ignore the relative path of the current file you would pass .T. for this parameter.
The default value for this parameter is .F. which means that the relative path will
be respected.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cPassword - The password
to use when unzipping the file.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Return Value:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Logical - returns .T. if
successful or .F. if the operation has failed.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;UnzipFile() is used between
calls to UnzipOpen() and UnzipClose() to extract the currently selected file contained
in the zip file. UnzipFile() is used in conjunction with the UnzipGotoTopFile, UnzipGotoNextFile,
UnzipGotoFileByName, and UnzipGotoFileByIndex functions. You can think of the contents
of a zip file as records in a table. In this sense UnzipGotoTopFile, UnzipGotoNextFile,
UnzipGotoFileByName, and UnzipGotoFileByIndex functions are used to move the record
pointer and the UnzipFile function is used to extract the file that the record pointer
is currently on.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;The cPassword is usually
the same for all files within a zip, however it does not need to be the same. Just
keep in mind that&amp;nbsp;passwords can be specified for different files within a zip
and when you are unzipping such an archive you will need to change the cPassword accordingly.&lt;/font&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=3&gt;&lt;strong&gt;Function UnzipByIndex() &lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Signature: UnzipByIndex(nIndex[,
cOutputFolderName[,lIgnorePaths, cPassword]]])&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;nIndex - The index number
of the file to be extracted.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cOutputFolderName - The
folder into which the zip file contents should be extracted.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;lIgnorePaths - If you wish
to ignore the relative path for this file that is contained in the zip file you would
pass .T. for this parameter. The default value for this parameter is .F. which means
that the relative path will be respected.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cPassword - The password
to use when unzipping the file.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Return Value:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Logical - returns .T. if
successful or .F. if the operation has failed.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;UnzipByIndex() is used between
calls to UnzipOpen() and UnzipClose() to extract a file by the position (index) it
holds in the zip file. UnzipByIndex() is used in conjunction with the UnzipFileCount
function. You can think of the contents of a zip file as records in a table. In this
sense UnzipFileCount would give you the record count for the table and the UnzipByIndex
function be used to extract a particular file by record number.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;The cPassword is usually
the same for all files within a zip, however it does not need to be the same. Just
keep in mind that&amp;nbsp;passwords can be specified for different files within a zip
and when you are unzipping such an archive you will need to change the cPassword accordingly.&lt;/font&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=3&gt;&lt;strong&gt;Function UnzipFileCount() &lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Signature:&lt;/strong&gt; UnzipFileCount()&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Parameters:&lt;/strong&gt; None &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Return Value:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Logical - returns .T. if
successful or .F. if the operation has failed.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;UnzipFileCount() is used
between calls to UnzipOpen() and UnzipClose() to retrieve the number of files that
are contained in the zip file. It does not actually extract anything. UnzipFileCount()
is used in conjunction with the UnzipByIndex function. You can think of the contents
of a zip file as records in a table. In this sense UnzipFileCount would give you the
record count for the table and the UnzipByIndex function be used to extract a particular
file by record number.&lt;/font&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=3&gt;&lt;strong&gt;Function UnzipSetFolder()&lt;/strong&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Signature:&lt;/strong&gt; UnzipSetFolder(cOutputFolderName)&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cOutputFolderName - The
folder into which the zip file contents should be extracted. &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Return Value:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Logical - returns .T. if
successful or .F. if the operation has failed.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;UnzipSetFolder() is used
between calls to UnzipOpen() and UnzipClose() to set the output folder for extracted
zip contents. It does not actually extract anything. The usual series of function
calls would consist of opening the zip file using UnzipOpen, calling UnzipSetFolder
to set the output folder, uncompressing files and/or folders using Unzip/UnzipTo/UnzipByIndex/UnzipFile,
and then closing the zip file using UnzipClose.&lt;/font&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=3&gt;&lt;strong&gt;Function UnzipGotoTopFile()&lt;/strong&gt; &lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Signature:&lt;/strong&gt; UnzipGotoTopFile([cExtension])&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cExtension - The file extension
to use as a filter for file type. All other file types will be ignored and only the
first file of the type specified will be selected in the zip file.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Return Value:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Logical - returns .T. if
successful or .F. if the operation has failed.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;UnzipGotoTopFile() is used
between calls to UnzipOpen() and UnzipClose() to select a particular file in the contents
of the open zip file. UnzipGotoTopFile() is used in conjunction with the UnzipFile
function to extract a particular file from the zip. By using the cExtension optional
parameter you can select the first record of a particular file type. You can think
of the contents of a zip file as records in a table. In this sense UnzipGotoTopFile,
UnzipGotoNextFile, UnzipGotoFileByName, and UnzipGotoFileByIndex functions are used
to move the record pointer and the UnzipFile function is used to extract the file
that the record pointer is currently on.&lt;/font&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=3&gt;&lt;strong&gt;Function UnzipGotoNextFile() &lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Signature:&lt;/strong&gt; UnzipGotoNextFile([cExtension])&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cExtension - The file extension
to use as a filter for file type. All other file types will be ignored and only the
next file of the type specified will be selected in the zip file.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Return Value:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Logical - returns .T. if
successful or .F. if the operation has failed.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;UnzipGotoNextFile() is used
between calls to UnzipOpen() and UnzipClose() to select a particular file in the contents
of the open zip file. UnzipGotoNextFile() is used in conjunction with the UnzipFile
function to extract a particular file from the zip. By using the cExtension optional
parameter you can select the next record of a particular file type. You can think
of the contents of a zip file as records in a table. In this sense UnzipGotoTopFile,
UnzipGotoNextFile, UnzipGotoFileByName, and UnzipGotoFileByIndex functions are used
to move the record pointer and the UnzipFile function is used to extract the file
that the record pointer is currently on.&lt;/font&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=3&gt;&lt;strong&gt;Function UnzipGotoFileByName() &lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Signature:&lt;/strong&gt; UnzipGotoFileByName(cFileName[,
lIgnoreFilePath])&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cFileName - The file name
of the file you wish to select in the zip file contents. You can specify a relative
path as well to narrow down the search.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;lIgnoreFilePath - If you
wish to just find a file of a particular name in the zip file you can pass .T. for
this parameter and the relative path of the file will be ignored. The first matching
file of the name specified in cFileName will be selected in the zip contents.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Return Value:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Logical - returns .T. if
successful or .F. if the operation has failed.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;UnzipGotoFileByName() is
used between calls to UnzipOpen() and UnzipClose() to select a particular file in
the contents of the open zip file by file name and/or relative path. UnzipGotoFileByName()
is used in conjunction with the UnzipFile function to extract a particular file from
the open zip file. You can think of the contents of a zip file as records in a table.
In this sense UnzipGotoTopFile, UnzipGotoNextFile, UnzipGotoFileByName, and UnzipGotoFileByIndex
functions are used to move the record pointer and the UnzipFile function is used to
extract the file that the record pointer is currently on.&lt;/font&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=3&gt;&lt;strong&gt;Function UnzipGotoFileByIndex() &lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Signature:&lt;/strong&gt; UnzipGotoFileByIndex(nIndex)&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;nIndex - The index number
of the file to be selected.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Return Value:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Logical - returns .T. if
successful or .F. if the operation has failed.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;UnzipGotoFileByIndex() is
used between calls to UnzipOpen() and UnzipClose() to select a particular file by
the position it physically holds in the contents of the open zip file. UnzipGotoFileByIndex()
is used in conjunction with the UnzipFile function to extract a particular file from
the zip file contents. You can think of the contents of a zip file as records in a
table. In this sense UnzipGotoTopFile, UnzipGotoNextFile, UnzipGotoFileByName, and
UnzipGotoFileByIndex functions are used to move the record pointer and the UnzipFile
function is used to extract the file that the record pointer is currently on.&lt;/font&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=3&gt;&lt;strong&gt;Function UnzipAFileInfoByIndex() &lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Signature:&lt;/strong&gt; UnzipAFileInfoByIndex(cArrayName,
nIndex)&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cArrayName - Name of the
VFP array to be created with file information in it.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;nIndex - The index number
of the file you want to return information about.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Return Value:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Logical - returns .T. if
successful or .F. if the operation has failed.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Creates an array with 13
rows (elements) in it. The rows contain various pieces of information regarding the
file that is held in the zip file at nIndex. The following table describes the contents
and data type of each row in the array:&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;table bordercolor=#000000 width="80%" border=1&gt;
&lt;tbody&gt;
&lt;tr bordercolor=#000000 bgcolor=#3399ff&gt;
&lt;td&gt;
&lt;strong&gt;&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Row&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Array Content&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Data Type&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;1&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;File Name&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Character&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;2&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Comment&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Character&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;3&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Version&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Numeric&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;4&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Version Needed&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Numeric&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;5&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Flags&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Numeric&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;6&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Compression Method &lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Numeric&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;7&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;DOS Date&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Datetime&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;8&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;CRC&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Numeric&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;9&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Compressed Size &lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Numeric&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;10&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Uncompressed Size &lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Numeric&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;11&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Internal Attribute&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Numeric&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;12&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;External Attribute&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Numeric&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;13&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Folder&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Logical&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;The array that is created
will have whatever name was specified by cArrayName. Should the array already exist
it will release it and recreate it. UnzipAFileInfoByIndex() is used between calls
to UnzipOpen() and UnzipClose() to show information about a particular file. The file
is referred to by the position it physically holds in the contents of the open zip
file. You can think of the contents of a zip file as records in a table. In this sense
the UnzipAFileInfoByIndex function is used to refer to and retrieve information about
a particular record number in the zip file.&lt;/font&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=3&gt;&lt;strong&gt;Function UnzipAFileInfo() &lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Signature:&lt;/strong&gt; UnzipAFileInfo(cArrayName)&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cArrayName - Name of the
VFP array to be created with file information in it.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Return Value:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Logical - returns .T. if
successful or .F. if the operation has failed.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Creates an array with 13
rows (elements) in it. The rows contain various pieces of information regarding the
currently selected file in the zip. The following table describes the contents and
data type of each row in the array:&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;table bordercolor=#000000 width="80%" border=1&gt;
&lt;tbody&gt;
&lt;tr bordercolor=#000000 bgcolor=#3399ff&gt;
&lt;td&gt;
&lt;strong&gt;&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Row&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Array Content&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Data Type&lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;1&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;File Name&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Character&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;2&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Comment&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Character&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;3&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Version&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Numeric&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;4&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Version Needed&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Numeric&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;5&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Flags&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Numeric&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;6&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Compression Method &lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Numeric&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;7&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;DOS Date&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Datetime&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;8&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;CRC&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Numeric&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;9&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Compressed Size &lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Numeric&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;10&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Uncompressed Size &lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Numeric&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;11&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Internal Attribute&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Numeric&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;12&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;External Attribute&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Numeric&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr bordercolor=#000000&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;13&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Folder&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Logical&lt;/font&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Remarks:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;The array that is created
will have whatever name was specified by cArrayName. Should the array already exist
it will release it and recreate it. UnzipAFileInfo() is used between calls to UnzipOpen()
and UnzipClose() to show information about a particular file. Use the UnzipAFileInfo
function in conjunction with UnzipGotoTopFile, UnzipGotoNextFile, UnzipGotoFileByName,
and UnzipGotoFileByIndex functions to return information regarding a particular file
contained in the open zip file. You can think of the contents of a zip file as records
in a table. In this sense the UnzipAFileInfo function is used to refer to and retrieve
information about the record that the record pointer is currently on within the zip
file.&lt;/font&gt;
&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=3&gt;&lt;strong&gt;Function ZipCallback() &lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Signature:&lt;/strong&gt; ZipCallback(cFunction)&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Parameters:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;cFunction - A string denoting
a function, procedure, or method that you want fired whenever a zip event occurs,
such as "MyCallback()".&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Return Value: &lt;/strong&gt;None&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;Events:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;When one of the following
zip events occurs the function/procedure/method specified by the cFunction parameter
will be called. cZipObjectName, nZipEvent, and nZipBytes are private variables created
on-the-fly by the FLL. They will contain the values specified in the table below.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;table bordercolor=#000000 width="80%" border=1&gt;
&lt;tbody&gt;
&lt;tr bordercolor=#000000 bgcolor=#3399ff&gt;
&lt;td&gt;
&lt;strong&gt;&lt;font face="Arial, Helvetica, sans-serif" size=2&gt;Event Description &lt;/font&gt;&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;cZipObjectName (character) &lt;/strong&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;font face="Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;nZipEvent (numeric) &lt;/strong&gt;&lt;/font&gt;&lt;/td&gt;
&lt;td&gt;
&lt;strong&gt;&lt;font face="Arial, Helvetica, sans-serif" size=2&gt;nZipBytes (numeric)&lt;/font&gt;&lt;/s