<?xml version="1.0" encoding="utf-8"?>
<feed xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xml:lang="en-us" xmlns="http://www.w3.org/2005/Atom">
  <title>SPS Blog</title>
  <link rel="alternate" type="text/html" href="http://www.sweetpotatosoftware.com/SPSBlog/" />
  <link rel="self" href="http://www.sweetpotatosoftware.com/SPSBlog/SyndicationService.asmx/GetAtom" />
  <icon>favicon.ico</icon>
  <updated>2008-12-19T03:43:59.5595024-06:00</updated>
  <author>
    <name>Craig Boyd</name>
  </author>
  <subtitle>Microsoft Programming Technologies</subtitle>
  <id>http://www.sweetpotatosoftware.com/SPSBlog/</id>
  <generator uri="http://dasblog.info/" version="2.3.9074.18820">DasBlog</generator>
  <entry>
    <title>Visual Foxpro JSON Class Update</title>
    <link rel="alternate" type="text/html" href="http://www.sweetpotatosoftware.com/SPSBlog/2008/12/19/VisualFoxproJSONClassUpdate.aspx" />
    <id>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,5ac8d202-98b4-4ee8-998d-692e4b597bec.aspx</id>
    <published>2008-12-19T03:43:59.559-06:00</published>
    <updated>2008-12-19T03:43:59.5595024-06:00</updated>
    <category term="Information Technology" label="Information Technology" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,InformationTechnology.aspx" />
    <category term="Visual Foxpro" label="Visual Foxpro" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,VisualFoxpro.aspx" />
    <content type="xhtml">
      <div 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" /></div>
    </content>
  </entry>
  <entry>
    <title>VFPCompression Update - A Couple of Fixes and a Slight Enhancement</title>
    <link rel="alternate" type="text/html" href="http://www.sweetpotatosoftware.com/SPSBlog/2008/12/08/VFPCompressionUpdateACoupleOfFixesAndASlightEnhancement.aspx" />
    <id>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,416ae65b-0af2-4145-8637-aa0d81d77637.aspx</id>
    <published>2008-12-08T05:35:21.939-06:00</published>
    <updated>2008-12-08T05:35:21.9397376-06:00</updated>
    <category term="Information Technology" label="Information Technology" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,InformationTechnology.aspx" />
    <category term="Visual Foxpro" label="Visual Foxpro" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,VisualFoxpro.aspx" />
    <content type="xhtml">
      <div 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" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Visual FoxPro and Windows Desktop Search</title>
    <link rel="alternate" type="text/html" href="http://www.sweetpotatosoftware.com/SPSBlog/2008/12/08/VisualFoxProAndWindowsDesktopSearch.aspx" />
    <id>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,3bc4195f-5c1d-42d0-9053-f4069ce8869e.aspx</id>
    <published>2008-12-08T04:08:19.866-06:00</published>
    <updated>2008-12-08T04:08:19.8669672-06:00</updated>
    <category term="Information Technology" label="Information Technology" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,InformationTechnology.aspx" />
    <category term="Visual Foxpro" label="Visual Foxpro" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,VisualFoxpro.aspx" />
    <content type="xhtml">
      <div 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" />
      </div>
    </content>
  </entry>
  <entry>
    <title>VFPConnection Update - HTTP Post, FTP Commands and More...</title>
    <link rel="alternate" type="text/html" href="http://www.sweetpotatosoftware.com/SPSBlog/2008/12/05/VFPConnectionUpdateHTTPPostFTPCommandsAndMore.aspx" />
    <id>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,b6eb576c-7142-4993-b3f2-74b7af5fb66c.aspx</id>
    <published>2008-12-05T09:54:45.809-06:00</published>
    <updated>2008-12-08T02:19:06.4167504-06:00</updated>
    <category term="Information Technology" label="Information Technology" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,InformationTechnology.aspx" />
    <category term="Visual Foxpro" label="Visual Foxpro" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,VisualFoxpro.aspx" />
    <content type="xhtml">
      <div 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" />
      </div>
    </content>
  </entry>
  <entry>
    <title>VFPCompression Update - Fix and ZipFile Comment Support</title>
    <link rel="alternate" type="text/html" href="http://www.sweetpotatosoftware.com/SPSBlog/2008/12/01/VFPCompressionUpdateFixAndZipFileCommentSupport.aspx" />
    <id>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,ebdf7fe4-f97c-4e61-9018-3007904ed8da.aspx</id>
    <published>2008-11-30T20:12:25.147-06:00</published>
    <updated>2008-12-03T16:02:28.2756905-06:00</updated>
    <category term="Information Technology" label="Information Technology" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,InformationTechnology.aspx" />
    <category term="Visual Foxpro" label="Visual Foxpro" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,VisualFoxpro.aspx" />
    <content type="xhtml">
      <div 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" />
      </div>
    </content>
  </entry>
  <entry>
    <title>An Update for the VFPConnection Library</title>
    <link rel="alternate" type="text/html" href="http://www.sweetpotatosoftware.com/SPSBlog/2008/11/29/AnUpdateForTheVFPConnectionLibrary.aspx" />
    <id>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,7c6e5339-8cc5-41c1-8b11-56fb957cdffb.aspx</id>
    <published>2008-11-29T07:01:34.841-06:00</published>
    <updated>2008-12-05T19:19:25.8866769-06:00</updated>
    <category term="Information Technology" label="Information Technology" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,InformationTechnology.aspx" />
    <category term="Visual Foxpro" label="Visual Foxpro" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,VisualFoxpro.aspx" />
    <content type="html">&lt;p&gt;
&lt;strong&gt;VFPConnection Library&lt;br&gt;
&lt;/strong&gt;I first introduced the VFPConnection.fll in &lt;a href="http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,e7cccb45-7d99-4c35-85bc-e123c81c8794.aspx"&gt;an
earlier blog post&lt;/a&gt;&amp;nbsp;and the functionality it provided at the time was adequate
for the task at hand. However, it didn't provide support for some of the features
that members of the VFP Community wanted.&amp;nbsp;Most of the enhancement requests I
received from them centered around two things:
&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
Support for SSL (HTTPS and FTPS) 
&lt;li&gt;
Implementation of a Tracing/Debugging Mechanism&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;
So, I've enhanced the FLL to provide additional functions and another callback parameter
that seek to fulfill a portion of these two requests. There is certainly much more
that can be done (and will be done) with this FLL in the future. For now I believe
the additional features I've implemented warrant&amp;nbsp;the release of an update. At
the bottom of this blog entry, you'll find a download link for the updated FLL, some
new sample use code, and new documentation that&amp;nbsp;encompasses the additional functions
and callback parameter.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;What's New&lt;br&gt;
&lt;/strong&gt;I've added 6 new functions to handle communication via Secure Sockets Layer
(SSL): FTPSGet(), FTPSPut(), FTPSToStr(), HTTPSGet(), HTTPSPUT(), HTTPSToStr(). I've
also added a new parameter,&amp;nbsp;cTraceCallback,&amp;nbsp;to all of the FLL's functions.
This new callback is especially useful when doing FTP/FTPS transfers as it reports
on all of the traffic going back and forth between the client and server.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;What's Next&lt;br&gt;
&lt;/strong&gt;I plan to add a bunch more FTP functionality and some facility for doing
HTTP POSTs. 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. The update provided here is a testament to the fact that your feedback is valuable
and an integral part of the improvement process for&amp;nbsp;the stuff I provide to the
VFP Community.
&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;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;/p&gt;
&lt;hr&gt;
&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;strong&gt;&lt;font color=#ff0000 size=4&gt;PLEASE
NOTE:&lt;/font&gt;&lt;/strong&gt; &lt;font size=4&gt;An updated version of this FLL and documenation
is &lt;/font&gt;&lt;a href="http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,b6eb576c-7142-4993-b3f2-74b7af5fb66c.aspx"&gt;&lt;font size=4&gt;available
here&lt;/font&gt;&lt;/a&gt;&lt;font size=4&gt;.&lt;/font&gt;&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;font size=4&gt; 
&lt;hr&gt;
&lt;/font&gt;&lt;/span&gt;&gt; 
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: #3399ff; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;a href="http://www.sweetpotatosoftware.com/files/vfpconnection.zip"&gt;&lt;b&gt;&lt;span style="COLOR: #3399ff; LINE-HEIGHT: 150%; TEXT-DECORATION: none; mso-bidi-font-size: 11.0pt; text-underline: none"&gt;&lt;span class=searchword&gt;VFPConnection&lt;/span&gt; FLL
Download (395 KB approx.)&lt;/span&gt;&lt;/b&gt;&lt;/a&gt;&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: #3399ff; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;/span&gt;&amp;nbsp;
&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;VFPConnection.FLL
Sample Use Code:&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&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;CLEAR&lt;br&gt;
SET LIBRARY TO (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;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; Uncomment
any of the lines of code below, modify it to suit, and then execute the code.&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; NOTE:
The &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;new&lt;/span&gt; trace
parameter&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; ?FILEGet(&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; ?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; ?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; ?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; ?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;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; ?FILEPut(&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; ?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; ?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; ?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; ?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;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; ?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; ?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; ?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;br&gt;
SET LIBRARY TO 
&lt;br&gt;
&lt;br&gt;
***********************&lt;br&gt;
FUNCTION 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 to track operation progress&lt;br&gt;
***********************&lt;br&gt;
?m.nConnectTotalBytes&lt;br&gt;
?m.nConnectBytesSoFar&lt;br&gt;
ENDFUNC&lt;br&gt;
&lt;br&gt;
***********************&lt;br&gt;
FUNCTION 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
to provide a detailed trace of the operation&lt;br&gt;
***********************&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#DEFINE TYPE_TEXT 0&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#DEFINE TYPE_HEADER_IN 1&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#DEFINE TYPE_HEADER_OUT 2&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#DEFINE TYPE_DATA_IN 3&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#DEFINE TYPE_DATA_OUT 4&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#DEFINE TYPE_SSL_DATA_IN 5&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#DEFINE TYPE_SSL_DATA_OUT 6&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;#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;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 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;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 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;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 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;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 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;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 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;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 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;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 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 class=MsoNormal 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 align=center width="100%" size=1&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;br&gt;
&lt;/p&gt;
&gt;&gt; 
&lt;p class=MsoNormal 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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;VFPConnection.FLL
Documenation:&lt;/span&gt;&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;
&lt;br&gt;
&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;Function
FTPGet() &lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Signature:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; FTPGet(cSourceURL,
cDestination[, cProgressCallback[, cTraceCallback]])&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Parameters:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;cSourceURL
- The URL to the file you wish to download.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;cDestination
- The full path and file name where you want the source file saved.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt; 
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;cProgressCallback
- An optional string denoting a function, procedure, or method that you want fired
whenever a read/write occurs, such as "MyProgress()".&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&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;/span&gt;&gt;
&lt;p class=MsoNormal 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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Return
Value:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Logical
- returns .T. if successful or .F. if the operation has failed.&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Remarks:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;This
function provides the ability to download a file from an FTP site.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; 
&lt;p class=MsoNormal 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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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: &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;0
= Text, &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&amp;nbsp;
&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 align=center width="100%" size=1&gt;
&lt;p class=MsoNormal 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;br&gt;
&lt;/span&gt;&gt;&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;Function
FTPSGet() &lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&gt;
&lt;p class=MsoNormal 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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Signature:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; FTPSGet(cSourceURL,
cDestination[, cProgressCallback[, cTraceCallback]])&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Parameters:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;cSourceURL
- The URL to the file you wish to download.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;cDestination
- The full path and file name where you want the source file saved.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt; 
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;cProgressCallback
- An optional string denoting a function, procedure, or method that you want fired
whenever a read/write occurs, such as "MyProgress()".&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&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;/span&gt;&gt;
&lt;p class=MsoNormal 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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Return
Value:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Logical
- returns .T. if successful or .F. if the operation has failed.&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Remarks:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;This
function provides the ability to download a file from an FTP&amp;nbsp;site that provides&amp;nbsp;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;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; 
&lt;p class=MsoNormal 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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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: &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;0
= Text, &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&amp;nbsp;
&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 align=center width="100%" size=1&gt;
&lt;p class=MsoNormal 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;br&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&gt;&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;Function
HTTPGet() &lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&gt;
&lt;p class=MsoNormal 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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Signature:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; HTTPGet(cSourceURL,
cDestination[, cProgressCallback[, cTraceCallback]])&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Parameters:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;cSourceURL
- The URL to the file you wish to download.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;cDestination
- The full path and file name where you want the source file saved.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;cProgressCallback
- An optional string denoting a function, procedure, or method that you want fired
whenever a read/write occurs, such as "MyProgress()".&lt;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&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;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt; 
&lt;p class=MsoNormal 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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Return
Value:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Logical
- returns .T. if successful or .F. if the operation has failed.&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Remarks:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;This
function provides the ability to download a file from a website.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; 
&lt;p class=MsoNormal 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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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: &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;0
= Text, &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&amp;nbsp;
&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 align=center width="100%" size=1&gt;
&lt;p class=MsoNormal 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;br&gt;
&lt;/span&gt;&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;Function
HTTPSGet() &lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&gt;
&lt;p class=MsoNormal 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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Signature:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; HTTPSGet(cSourceURL,
cDestination[, cProgressCallback[, cTraceCallback]])&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Parameters:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;cSourceURL
- The URL to the file you wish to download.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;cDestination
- The full path and file name where you want the source file saved.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;cProgressCallback
- An optional string denoting a function, procedure, or method that you want fired
whenever a read/write occurs, such as "MyProgress()".&lt;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&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;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt; 
&lt;p class=MsoNormal 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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Return
Value:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Logical
- returns .T. if successful or .F. if the operation has failed.&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Remarks:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;This
function provides the ability to download a file from a a website that provides&amp;nbsp;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;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; 
&lt;p class=MsoNormal 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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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: &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;0
= Text, &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&amp;nbsp;
&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 align=center width="100%" size=1&gt;
&lt;p class=MsoNormal 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;br&gt;
&lt;/span&gt;&gt;&gt;&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;Function
FILEGet() &lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&gt;
&lt;p class=MsoNormal 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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Signature:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; FILEGet(cSourceURL,
cDestination[, cProgressCallback[, cTraceCallback]])&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Parameters:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;cSourceURL
- The full path and file name to the file you wish to copy.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;cDestination
- The full path and file name where you want the source file saved.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;cProgressCallback
– An optional string denoting a function, procedure, or method that you want fired
whenever a read/write occurs, such as "MyProgress()".&lt;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&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;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt; 
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-size: 12.0pt"&gt;Return
Value:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Logical
- returns .T. if successful or .F. if the operation has failed.&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Remarks:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;This
function provides the ability to copy a file from a local or remote location.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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 &lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;“FILE://
C:\MyDir\MyFile.zip”.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; 
&lt;p class=MsoNormal 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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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: &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;0
= Text, &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&amp;nbsp;
&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 align=center width="100%" size=1&gt;
&lt;p class=MsoNormal 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;br&gt;
&lt;/span&gt;&gt;&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;Function
FTPPut() &lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&gt;
&lt;p class=MsoNormal 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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Signature:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; FTPPut(cSource,
cDestinationURL[, cProgressCallback[, cTraceCallback]])&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Parameters:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;cSource
- The full path and file name of the file you want uploaded.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;cDestinationURL
- The URL to where the file specified in cSource should be uploaded to.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;cProgressCallback
- An optional string denoting a function, procedure, or method that you want fired
whenever a read/write occurs, such as "MyProgress()".&lt;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&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;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt; 
&lt;p class=MsoNormal 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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Return
Value:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Logical
- returns .T. if successful or .F. if the operation has failed.&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Remarks:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;This
function provides the ability to upload a file to an FTP site.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; 
&lt;p class=MsoNormal 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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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: &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;0
= Text, &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&amp;nbsp;
&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 align=center width="100%" size=1&gt;
&lt;p class=MsoNormal 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;br&gt;
&lt;/span&gt;&gt;&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;Function
FTPSPut() &lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&gt;
&lt;p class=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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Signature:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; FTPSPut(cSource,
cDestinationURL[, cProgressCallback[, cTraceCallback]])&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Parameters:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;cSource
- The full path and file name of the file you want uploaded.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;cDestinationURL
- The URL to where the file specified in cSource should be uploaded to.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;cProgressCallback
- An optional string denoting a function, procedure, or method that you want fired
whenever a read/write occurs, such as "MyProgress()".&lt;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt; 
&lt;p class=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;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt; 
&lt;p class=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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Return
Value:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Logical
- returns .T. if successful or .F. if the operation has failed.&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Remarks:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;This
function provides the ability to upload a file to an FTP&amp;nbsp;site that provides&amp;nbsp;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;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; 
&lt;p class=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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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: &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;0
= Text, &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&amp;nbsp;
&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 align=center width="100%" size=1&gt;
&lt;p class=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;br&gt;
&lt;/span&gt;&lt;/span&gt;&gt;&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;Function
HTTPPut() &lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&gt;
&lt;p class=MsoNormal 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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Signature:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; HTTPPut(cSource,
cDestinationURL[, cProgressCallback[, cTraceCallback]])&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Parameters:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;cSource
- The full path and file name of the file you want uploaded.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;cDestinationURL
- The URL to where the file specified in cSource should be uploaded to.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;cProgressCallback
- An optional string denoting a function, procedure, or method that you want fired
whenever a read/write occurs, such as "MyProgress()".&lt;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&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;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt; 
&lt;p class=MsoNormal 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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Return
Value:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Logical
- returns .T. if successful or .F. if the operation has failed.&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Remarks:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;This
function provides the ability to upload a file to a website.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; 
&lt;p class=MsoNormal 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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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: &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;0
= Text, &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&amp;nbsp;
&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 align=center width="100%" size=1&gt;
&lt;p class=MsoNormal 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;br&gt;
&lt;/span&gt;&gt;&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;Function
HTTPSPut() &lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&gt;
&lt;div class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center" align=center&gt;
&lt;p class=MsoNormal 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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Signature:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; HTTPSPut(cSource,
cDestinationURL[, cProgressCallback[, cTraceCallback]])&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Parameters:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;cSource
- The full path and file name of the file you want uploaded.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;cDestinationURL
- The URL to where the file specified in cSource should be uploaded to.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;cProgressCallback
- An optional string denoting a function, procedure, or method that you want fired
whenever a read/write occurs, such as "MyProgress()".&lt;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&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;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt; 
&lt;p class=MsoNormal 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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Return
Value:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Logical
- returns .T. if successful or .F. if the operation has failed.&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Remarks:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;This
function provides the ability to upload a file to a website that provides&amp;nbsp;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;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; 
&lt;p class=MsoNormal 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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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: &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;0
= Text, &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&amp;nbsp;
&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 align=center width="100%" size=1&gt;
&lt;p class=MsoNormal 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;br&gt;
&lt;/span&gt;
&lt;/span&gt;&gt;&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;Function
FILEPut() &lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&gt;
&gt;
&lt;p class=MsoNormal 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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Signature:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; FILEPut(cSource,
cDestinationURL[, cProgressCallback[, cTraceCallback]])&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Parameters:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;cSource
- The full path and file name of the file you want copied.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;cDestinationURL
- The full path and file name where the file specified in cSource should be copied
to.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;cProgressCallback
- An optional string denoting a function, procedure, or method that you want fired
whenever a read/write occurs, such as "MyProgress()".&lt;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&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;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt; 
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-size: 12.0pt"&gt;Return
Value:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Logical
- returns .T. if successful or .F. if the operation has failed.&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Remarks:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;This
function provides the ability to copy a file to a local or remote location.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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 &lt;span style="mso-spacerun: yes"&gt;&amp;nbsp;&lt;/span&gt;“FILE://
C:\MyDir\MyFile.zip”.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; 
&lt;p class=MsoNormal 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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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: &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;0
= Text, &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&amp;nbsp;
&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 align=center width="100%" size=1&gt;
&lt;p class=MsoNormal 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;br&gt;
&lt;/span&gt;&gt;&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;Function
FTPToStr() &lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&gt;
&lt;p class=MsoNormal 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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Signature:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; FTPToStr(cSourceURL[,
cProgressCallback[, cTraceCallback]])&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Parameters:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;cSourceURL
- The URL to the file you wish to return a string from.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;cProgressCallback
- An optional string denoting a function, procedure, or method that you want fired
whenever a read/write occurs, such as "MyProgress()".&lt;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&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;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt; 
&lt;p class=MsoNormal 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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Return
Value:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Character
Data - the contents of the file specified by cSourceURL&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Remarks:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;This
function provides the ability to retrieve a file from an FTP site as a string.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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: &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;0
= Text, &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&amp;nbsp;
&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 align=center width="100%" size=1&gt;
&lt;p class=MsoNormal 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;br&gt;
&gt;&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;Function
FTPSToStr() &lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Signature:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; FTPSToStr(cSourceURL[,
cProgressCallback[, cTraceCallback]])&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Parameters:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;cSourceURL
- The URL to the file you wish to return a string from.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;cProgressCallback
- An optional string denoting a function, procedure, or method that you want fired
whenever a read/write occurs, such as "MyProgress()".&lt;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&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;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt; 
&lt;p class=MsoNormal 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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Return
Value:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Character
Data - the contents of the file specified by cSourceURL&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Remarks:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;This
function provides the ability to retrieve a file as a string from an FTP&amp;nbsp;site
that provides&amp;nbsp;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;o:p&gt;&lt;/o:p&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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: &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;0
= Text, &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&amp;nbsp;
&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 align=center width="100%" size=1&gt;
&lt;p class=MsoNormal 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;br&gt;
&gt;&gt;&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;Function
HTTPToStr() &lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Signature:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; HTTPToStr(cSourceURL[,
cProgressCallback[, cTraceCallback]])&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Parameters:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;cSourceURL
- The URL to the file you wish to download.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;cProgressCallback
- An optional string denoting a function, procedure, or method that you want fired
whenever a read/write occurs, such as "MyProgress()".&lt;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&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;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt; 
&lt;p class=MsoNormal 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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Return
Value:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Logical
- returns .T. if successful or .F. if the operation has failed.&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Remarks:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;This
function provides the ability to retrieve a file from a website as a string.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; 
&lt;p class=MsoNormal 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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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: &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;0
= Text, &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&amp;nbsp;
&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 align=center width="100%" size=1&gt;
&lt;p class=MsoNormal 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;br&gt;
&lt;/span&gt;&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 12pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;Function
HTTPSToStr() &lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;&gt;
&lt;p class=MsoNormal 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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Signature:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; HTTPSToStr(cSourceURL[,
cProgressCallback[, cTraceCallback]])&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Parameters:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;cSourceURL
- The URL to the file you wish to download.&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;cProgressCallback
- An optional string denoting a function, procedure, or method that you want fired
whenever a read/write occurs, such as "MyProgress()".&lt;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&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;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt; 
&lt;p class=MsoNormal 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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Return
Value:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p style="BACKGROUND: white; LINE-HEIGHT: 150%; TEXT-ALIGN: justify"&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'"&gt;Logical
- returns .T. if successful or .F. if the operation has failed.&lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Trebuchet MS','sans-serif'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'; mso-bidi-font-size: 11.0pt"&gt;Remarks:&lt;/span&gt;&lt;/b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;o:p&gt;&lt;/o:p&gt;
&lt;/span&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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;/span&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; 
&lt;p class=MsoNormal 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;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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: &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;0
= Text, &lt;/span&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;1
= Header In, 2 = Header Out, 3 = Data In, 4 = Data Out, 5 = SSL Data In, 6 = SSL Data
Out, 7 = End.&lt;/span&gt;
&lt;/span&gt;&gt;
&lt;/span&gt;&gt;&lt;font color=#000000&gt;&lt;/font&gt;&lt;img width="0" height="0" src="http://www.sweetpotatosoftware.com/SPSBlog/aggbug.ashx?id=7c6e5339-8cc5-41c1-8b11-56fb957cdffb" /&gt;</content>
  </entry>
  <entry>
    <title>Virtual Earth Class Library for Visual FoxPro</title>
    <link rel="alternate" type="text/html" href="http://www.sweetpotatosoftware.com/SPSBlog/2008/11/27/VirtualEarthClassLibraryForVisualFoxPro.aspx" />
    <id>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,aeeb57dc-dab4-41d0-9748-5ef40a39757c.aspx</id>
    <published>2008-11-27T04:10:20.094-06:00</published>
    <updated>2008-11-28T06:24:37.9988879-06:00</updated>
    <category term="Information Technology" label="Information Technology" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,InformationTechnology.aspx" />
    <category term="Visual Foxpro" label="Visual Foxpro" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,VisualFoxpro.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>Virtual Earth<br /></strong>Billed as "...the integrated mapping, imaging, search, and data visualization
platform", Microsoft's <a href="http://www.microsoft.com/VirtualEarth/">Virtual Earth</a> (VE)
is an awesome mapping service that can be consumed and manipulated using the VE Map
contol and JavaScript. In order to get a feel for what VE is capabable of, head on
over to the <a href="http://dev.live.com/virtualearth/sdk/">VE Interactive SDK</a> and
try some of the examples provided. There is plenty of documentation, blog
entries and articles available online that provide general VE overviews and detail
the specific features the service provides, so I won't spend a lot of time explaining
what VE is and what it does. I want to explain enough so that you can understand the
goals of the VFP Virtual Earth wrapper class library that I'm presenting in this blog
entry. I figure you can do a few online searches if you're interested in a deeper
or broader understanding of VE and its specific features.
</p>
        <p>
          <strong>Virtual Earth Map Control<br /></strong>In order to understand VE from a developer standpoint you'll need to be familiar
with the <a href="http://msdn.microsoft.com/en-us/library/bb429565.aspx">Virtual Earth
Map Control</a>. The VE Map Control and the JavaScript classes/enumerations that make
it up are provided via a web handler (.ashx file). I find it is more understandable
to think of it as a library rather than a control. The VEMap class (which is part
of the VE Map Control) is what I would consider the actual control that is seen within
a web page. Perhaps I'm splitting hairs here, but I found it to be a helpful distinction
in my mind when first starting to work with VE.
</p>
        <p>
          <strong>Creating Your First VE Web Page<br /></strong>It's pretty simple to add the VE Map Control to a web page and use it to
instantiate an instance of the VEMap class. Here's the basic HTML needed in order
to create such a page...
</p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">&lt;html
xmlns=<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"http://www.w3.org/1999/xhtml"</span>&gt;<br />
    &lt;head&gt;<br />
        &lt;title&gt;Virtual Earth&lt;/title&gt;<br />
        &lt;meta http-equiv=<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Content-Type"</span> content=<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"text/html;
charset=utf-8"</span> /&gt;<br />
        &lt;script type=<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"text/javascript"</span> src=<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.2"</span>&gt;&lt;/script&gt;<br />
        &lt;script type=<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"text/javascript"</span>&gt;<br />
            var map <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">null</span>;<br />
            function startVE()<br />
            {<br />
               
map <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">new</span> VEMap('myMap');<br />
               
map.LoadMap();<br />
            }<br />
            function cleanUp()<br />
            {<br /><span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"><font color="#000000">                </font>if</span> (map
!<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">null</span>)
map.Dispose();<br />
            }<br />
        &lt;/script&gt;<br />
    &lt;/head&gt;<br />
    &lt;body onload=<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"startVE();"</span> onunload=<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"cleanUp();"</span> style=<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"margin:
0px"</span>&gt;<br />
        &lt;div style=<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"overflow:
hidden; width: 100%; height: 100%;"</span> id=<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"myMap"</span> /&gt;<br />
    &lt;/body&gt;<br />
&lt;/html&gt;</span>
        </p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <font face="Verdana" color="#003300" size="2">You
should note that the first script tag specifies the web handler mapcontrol.ashx as
the source. Also, note how an instance of VEMap is created using the body's onload
and is eventually disposed of in the cleanUp() function via the body's onunload. In
any event, it's pretty easy stuff given the results (go ahead and cut and paste that
bit of code into an HTML file and view it in Internet Explorer).</font>
          </span>
        </p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <font face="Verdana" color="#003300" size="2">
              <strong>What
About Desktop Applications?<br /></strong>Obviously, given the architecture and heavy reliance on JavaScript, this
stuff was made for web applications. But what about desktop applications that require
geocoding of addresses, distance measurements, scheduling based on zones, or routing
with turn-by-turn directions? I mean, Virtual Earth would work great if there was
just some way to run an HTML page on a VFP form... Oh wait, Microsoft has provided
us the WebBrowser control! Just drop that ActiveX control on a form and make
a quick call to something like, Thisform.Olecontrol1.Navigate("file:///C:\VETest.html").
Looks like we're </font>
          </span>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <font face="Verdana" color="#003300" size="2">in
business.</font>
          </span>
        </p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <font face="Verdana" color="#003300" size="2">The
only thing that's left to do after that is write all of the JavaScript code that
interacts with the VE Map Control. Awesome! Except that... erm... you may not know
very much JavaScript (even though you're a kick-butt VFP developer), and you may need
VFP code to freely interact with the JavaScript objects (or vice versa), and how the
heck do you get JavaScript to read your database where all of your addresses are stored?
And... And...</font>
          </span>
        </p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <font face="Verdana" color="#003300" size="2">
              <strong>Virtual
Earth Wrapper for VFP<br /></strong>OK, so the previous section outlines the thought process that eventually
lead to the class library that I built to tackle these problems. While working on
a VFP project for a customer that involved VE, I looked at that list of classes and
enumerations for the <a href="http://msdn.microsoft.com/en-us/library/bb429565.aspx">Virtual
Earth Map Control</a> version 6.2 and basically thought, "Wouldn't it be super
cool if those were all VFP classes??!!".</font>
          </span>
        </p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <font face="Verdana" color="#003300" size="2">I needed
a class library (.vcx) wrapper for VE. This would contain all of the same classes
(VFP equivalents) and a few super slick ways to commuicate and convert between VFP
and JavaScript. With those in hand it would simply be a matter of hammering out the 5-10
thousand lines of code and comments to make it happen. I won't go into the particulars
of everything I ended up doing in order to make this work (you can look in the class
library's code yourself if you're interested), but I did end up using the <a href="http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,5f96efd7-f350-4bc8-86c5-caffd9e833eb.aspx">JSON
class</a> I created to handle most of the conversions and transport (data interchange) between
the two languages.</font>
          </span>
        </p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <font face="Verdana" color="#003300" size="2">As
you'll see in the download, the class library wrapper (virtualearth.vcx) is pretty
much a carbon copy of the VE classes. So, most of the documentation and
code that's online for VE is of benefit when using it. In addition
to the virtualearth.vcx, I've also provided a sample project and form (see screenshot
below), so you can try this stuff out right away. The sample project is
also intended to provide a little more information regarding how to do some of the
things that a developer might want to do with VE in a desktop application. I usually
find that learning by example is one of the fastest ways to get up to speed on a technology
I'm not very familiar with.</font>
          </span>
        </p>
        <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
          <font face="Verdana" color="#003300" size="2">
            <p>
              <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
                <font face="Verdana" size="2">
                  <strong>Special
Thank You<br /></strong>Before I wrap this blog entry up, I want to express my appreciation for <a href="http://fox.wikis.com/wc.dll?Wiki~MarcLyon~People"><strong><font color="#3399ff">Marc
Lyon</font></strong></a>'s efforts. He provided me early feedback and testing
for this class library. His enthusiasm for this project was also one of the driving
forces behind my completing it as fast as I did.</font>
              </span>
            </p>
            <p>
              <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
                <font face="Verdana" size="2">I
also want to thank my client (you know who you are) who has been kind enough to allow
me to share this work with the VFP Community. You're about as generous and kind as
they come.</font>
              </span>
            </p>
            <p>
              <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
                <font face="Verdana" size="2">
                  <strong>What's
Next<br /></strong>Just have fun with Virtual Earth in VFP and see if virtualearth.vcx is useful
to you and your applications. In a perfect world, you'd report back to me with any
bugs you find, create some examples of your own and blog about them, or
seek to improve the library in some way. If you do improve virtualearth.vcx,
I'd appreciate it if you would contact me and share the improvements you've implemented.
Thank you in advanced to those of you that decide to follow any of the above
suggestions.</font>
              </span>
            </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">
                <font face="Verdana" size="2">
                  <a href="http://www.sweetpotatosoftware.com/files/VirtualEarth.zip">Download
VirtualEarth.vcx and Sample (approx. 222 KB)</a>
                </font>
              </span>
              <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
                <font face="Verdana" size="2">
                  <br />
                </font>
              </span>
            </p>
            <p>
            </p>
          </font>
        </span>
        <img src="http://www.sweetpotatosoftware.com/SPSBlog/content/binary/virtualearth1.jpg" border="0" />
        <p>
          <strong>Figure 1:</strong> A sample form provided in the download. It gives developers
a starting point when beginning to work with the virtualearth.vcx.
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.sweetpotatosoftware.com/SPSBlog/aggbug.ashx?id=aeeb57dc-dab4-41d0-9748-5ef40a39757c" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Visual FoxPro Grid Enhancements</title>
    <link rel="alternate" type="text/html" href="http://www.sweetpotatosoftware.com/SPSBlog/2008/11/25/VisualFoxProGridEnhancements.aspx" />
    <id>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,d6d71562-1655-4518-9341-527932970583.aspx</id>
    <published>2008-11-24T18:00:52.991-06:00</published>
    <updated>2008-11-24T18:13:38.4668208-06:00</updated>
    <category term="Information Technology" label="Information Technology" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,InformationTechnology.aspx" />
    <category term="Visual Foxpro" label="Visual Foxpro" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,VisualFoxpro.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>The Visual FoxPro Grid Control<br /></strong>I've often been heard to say that Visual FoxPro's grid is one of the greatest
controls ever devised. I still feel that way, but wouldn't it be nice if some of the
functionality that our customers want implemented in the grid came stock? You know, features
like: sorting, filtering, incremental search, saving user preferences, and exporting
to Excel. It'd be even cooler if this type of functionality could be implemented on
any Visual FoxPro grid (regardless of the recordsource) by simply dropping a class
on a form, setting a single property and writing a single line of code. Well, that's
what I have set out to create with the class I present in this blog entry.
</p>
        <p>
          <strong>First Shown at Southwest Fox 2008<br /></strong>At <a href="http://www.swfox.net/home.aspx"><strong><font color="#3399ff">Southwest
Fox 2008</font></strong></a>, I presented a session entitled "Creating a Professional
VFP Application from Start to Finish" in which I showed an earlier version of GridExtras.
I've improved on it since then, so if you attended Southwest Fox 2008 you may want
to get the control and sample from here rather than the session download. For those
of you that didn't attend Southwest Fox 2008 (you should have - it was a blast!),
you can see the basic functionality provided by GridExtras in the screenshots provided
at the bottom of this blog entry.
</p>
        <p>
          <strong>How to Use the Class<br /></strong>I've provided a sample.exe application in the download so you can try it
out and see how it's implemented. However, the basic steps are:
</p>
        <ul>
          <li>
Drop an instance of the gridextras onto your form or container (one gridextras for
each grid you want to enhance). 
</li>
          <li>
Set the GridExtras' GridExpression property to a string that will evaluate at runtime
to the grid you are enhancing - "Thisform.Grid1" is the default value for this property. 
</li>
          <li>
Call the GridExtras' Setup() method whenever your grid is ready to go. I have no way
of knowing if you are setting the recordsource at runtime, or whether you are adding
columns in code, so this method is provided as a way for you to control when GridExtras
will begin interacting with the grid.</li>
        </ul>
        <p>
That's all there is to getting GridExtras up and running for a grid in your application.
As I say, I've included a sample in the download, so if you have any questions about
how this is done just review the sample or you can post a comment here on my blog
and I'll do my best to answer it.
</p>
        <p>
          <strong>Other Properties of Note<br /></strong>There are a few other GridExtras properties you may want to take note of
and use, such as:
</p>
        <ul>
          <li>
CompanyName and ProductName - these properties are used to determine where to save
the user's grid preferences file which is profile isolated (C:\Users\Craig\AppData\Roaming\MyCompany\MyProduct\gridprefs.tmp
on Vista or  C:\Documents and Settings\Craig\Application Data\MyCompany\MyProduct\gridprefs.tmp
on Windows XP) 
</li>
          <li>
AllowGridExport, AllowGridFilter, AllowGridPreferences, AllowGridSort - these properties
allow you to turn certain features of the class off or on depending on your needs. 
</li>
          <li>
TemplateTable - this property determines where GridExtras looks for the gridextras.dbf
which is used to save the grid templates the user creates (user can save their filters
and sorts to be able to easily recreate them at a later time). This property may need
to be set if you plan to keep the gridextras table out on a network path such as with
the shared database folder for your application.</li>
        </ul>
        <p>
          <strong>What's Next<br /></strong>Just have fun with GridExtras and see if it's useful to you and your applications.
In a perfect world, you'd find some way to improve it (add additional export formats,
provide a column lock feature, etc.). If you do improve GridExtras, I'd
appreciate it if you would contact me and share the improvements you've implemented.
Thank you in advanced to those of you that decide to do so.
</p>
        <p>
Until next time... Visual FoxPro Rocks!
</p>
        <p>
          <a href="http://www.sweetpotatosoftware.com/files/GridExtras.zip">Download GridExtras
and Sample (approx. 170 KB)</a>
        </p>
        <p>
          <img src="http://www.sweetpotatosoftware.com/SPSBlog/content/binary/gridextras11.png" border="0" />
        </p>
        <p>
          <strong>Figure 1:</strong> GridExtras provides sorting, incremental search, and filtering
capabilities to any Visual FoxPro grid.
</p>
        <p>
 
</p>
        <p>
          <img src="http://www.sweetpotatosoftware.com/SPSBlog/content/binary/gridextras21.png" border="0" />
        </p>
        <p>
          <strong>Figure 2:</strong> GridExtras has additional features such as the ability
to go semi-transparent and the ability to save the user's preferences (column order
and width).
</p>
        <p>
 
</p>
        <p>
          <img src="http://www.sweetpotatosoftware.com/SPSBlog/content/binary/gridextras31.png" border="0" />
        </p>
        <p>
          <strong>Figure 3:</strong> In addition to the features provided by GridExtras through
a grid's column headers, there is also an icon added to the bottom right of the grid
that allows the user to access the "Grid Templates and Export" screen seen in Figure
4.
</p>
        <p>
 
</p>
        <p>
          <img src="http://www.sweetpotatosoftware.com/SPSBlog/content/binary/gridextras41.png" border="0" />
        </p>
        <p>
          <strong>Figure 4:</strong> The grid templates help the user save grid views so they
can recreate them quickly in the future. The export feature of GridExtras can create
XLS, XLSX, XLB, and XLM Excel formats. The grid's header captions are used to name
the Excel columns when data is exported.
</p>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.sweetpotatosoftware.com/SPSBlog/aggbug.ashx?id=d6d71562-1655-4518-9341-527932970583" />
      </div>
    </content>
  </entry>
  <entry>
    <title>JSON for Visual FoxPro</title>
    <link rel="alternate" type="text/html" href="http://www.sweetpotatosoftware.com/SPSBlog/2008/11/24/JSONForVisualFoxPro.aspx" />
    <id>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,5f96efd7-f350-4bc8-86c5-caffd9e833eb.aspx</id>
    <published>2008-11-24T06:38:28.652-06:00</published>
    <updated>2008-11-24T15:48:57.1017204-06:00</updated>
    <category term="Information Technology" label="Information Technology" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,InformationTechnology.aspx" />
    <category term="Visual Foxpro" label="Visual Foxpro" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,VisualFoxpro.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>What is JSON?<br /></strong>If you are unfamiliar with JSON, you can dig into the particulars about it <a href="http://www.json.org/">here</a> and <a href="http://en.wikipedia.org/wiki/JSON">here</a>.
The short explanation is that JSON provides a format for serializing and deserializing
variables, arrays, and class instances. For those of you that may not know what serializing
and deserializing are, think of <strong>serializing</strong> as turning a cursor into
XML and then think of <strong>deserializing</strong> as turning XML back into a cursor.
Basically the process of turning an instance of MySomething into a string and
then turning that string back into an instance of the same MySomething.
</p>
        <p>
Now, besides the obvious advantages of being able to serialize and deserialize VFP
values and objects (persisting them on disk or passing them across the wire, just
to name a couple), it becomes really useful when you find that you have to interact
with Javascript from your Visual FoxPro application. I ran into this while working
with <a href="http://dev.live.com/virtualearth/sdk/">Virtual Earth</a> in a webbrowser
control (more on that in an upcoming blog entry). I wanted to use JSON as part of
my solution because it would allow me to easily move values, instances, and data back
and forth between Visual FoxPro and the Javascript that was running inside a page
being displayed in the webbrowser control. I could have done without it, but it's
a lot more slick when using JSON.
</p>
        <p>
          <strong>JSON for VFP</strong>
          <br />
If you visited the first "<a href="http://www.json.org/">here</a>" in my first paragraph
in the section above you may have noted that they have a rather impressive
list of languages that provide support, in some manner, for JSON at the bottom of
the page. You may have also noted that Visual FoxPro was absent from that list. Now,
that doesn't mean that no one has ever done this sort of thing before. In fact, Rick
Strahl provides VFP/JSON support through his <a href="http://www.west-wind.com/webconnection/wwClient_docs/_1wu18owba.htm">wwJSONSerializer</a> class
and FoxWeb provides similar functionality through it's <a href="http://www.foxweb.com/document/index.htm?page=/document/fwJSONObject.htm">fwJSON</a> object.
And, here in this blog entry, I'm going to provide you with another class that provides
JSON support. So, hopefully someday we can get this class and the others listed
on the json.org site (anyone know who to call or write to?).
</p>
        <p>
          <strong>Why Another JSON Class?<br /></strong>So, if Rick and FoxWeb already provide classes, it begs the question, "Why
did I decide to write one too?". Well...
</p>
        <ul>
          <li>
When I started working on this I didn't know that Rick even provided such a class
in web connect. As for FoxWeb, I've never used it, so I don't know what their object
does. Heck, for all I know there are other classes out there besides these two. If
you know of any others, please feel free to comment on this blog entry with a link. 
</li>
          <li>
My JSON class provides additional support for some things when compared to the functionality
of wwJSONSerializer: 
<ul><li>
Multi-dimensional array support 
</li><li>
Replacer support on stringify 
</li><li>
Reviver support on parse 
</li><li>
Beautification/indetation support 
</li><li>
Performance enhancements via FLL 
</li><li>
A few other things, but those are the main ones</li></ul></li>
          <li>
The implementation of my JSON class is patterned after <a href="http://www.json.org/json2.js">json2.js</a> (by <a href="http://en.wikipedia.org/wiki/Douglas_Crockford">Douglas
Crockford</a>), which means: 
<ul><li>
The main methods are Stringify() and Parse() 
</li><li>
It supports datetimes in ISO8601 format (other formats available) 
</li><li>
Provides the same default escaping of characters (other modes available).</li></ul></li>
          <li>
Because I wanted to try my hand at this?</li>
        </ul>
        <p>
There's no better way that I know of to learn something than to write a wrapper or
even a class that directly interacts with another library or API. So, I wrote a top-notch
JSON class library. I am using it in a production project at this end (my customer
was kind enough to give me permission to share it) and I am blogging about it in the
hopes some of you may find it useful.
</p>
        <p>
          <strong>How to Use the JSON Class<br /></strong>In the class, I have provided lots of comments in the code to help document
this thing. Also, provided in the download is a jsontests.prg that provides some sample
use code you can look at to get started. For the sake of blog brevity... in order
to serialize a Visual FoxPro object to JSON you'd do the following:
</p>
        <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
          <p>
            <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">m.loJSON <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> CREATEOBJECT(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"JSON"</span>)<br />
SET CLASSLIB TO (LOCFILE(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"JSON.VCX"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"VCX"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Locate
JSON Class Library"</span>)) additive<br />
m.loObjectIn <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> CREATEOBJECT(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Custom"</span><br />
m.lcObjectJSON <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> m.loJSON.Stringify(m.loObjectIn, <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">null</span>,
CHR(9))<br />
?m.lcObjectJSON<br /></span>
          </p>
        </span>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <font face="Verdana" size="2">...and
then to deserialize that JSON string you'd do this:</font>
          </span>
        </p>
        <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
          <font face="Verdana" size="2">
            <p>
              <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">m.loObjectOut <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> m.loJSON.Parse(m.lcObjectJSON)<br />
?m.loObjectOut.Class</span>
            </p>
          </font>
        </span>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <font face="Verdana" size="2">As
I say, the code is heavily commented (so check it out) and I'll be doing a blog entry
in the near future regarding a Virtual Earth class library I've written for VFP that
shows some real world uses for JSON within VFP.</font>
          </span>
        </p>
        <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
          <p>
            <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
              <font face="Verdana" size="2">
                <strong>Special
Thank You<br /></strong>I sincerely appreciate the efforts of those of you that have already
been providing valuable feedback, such as <a href="http://stevenblack.com/">Steven
Black</a> and <a href="http://fox.wikis.com/wc.dll?Wiki~MarcLyon~People">Marc Lyon</a>.
Also, <a href="http://www.west-wind.com/Weblog/">Rick Strahl</a>, who provided help
and sage advice to me via <a href="https://twitter.com/craigboyd">Twitter</a> as I
worked through the particulars of this class. It's always nice to have someone advising
you who has already "been there, done that".</font>
            </span>
          </p>
        </span>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <font face="Verdana" size="2">
              <strong>What's
Next<br /></strong>I'm hopeful that those of you that download this class will take the time
to provide me feedback and any suggestions you may have for further improving it.</font>
          </span>
        </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">
            <font face="Verdana" size="2">
              <a href="http://www.sweetpotatosoftware.com/files/JSON.zip">Download
the JSON class library (approx. 52 KB)</a>
            </font>
          </span>
        </p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">
            <font face="Verdana" size="2">The
download contains the JSON class in both VCX and PRG format. Use whichever one you
are more comfortable with (they are the same).<br /></font>
          </span>
        </p>
        <img width="0" height="0" src="http://www.sweetpotatosoftware.com/SPSBlog/aggbug.ashx?id=5f96efd7-f350-4bc8-86c5-caffd9e833eb" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Professional Error Handling for VFP Applications</title>
    <link rel="alternate" type="text/html" href="http://www.sweetpotatosoftware.com/SPSBlog/2008/11/24/ProfessionalErrorHandlingForVFPApplications.aspx" />
    <id>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,58979f42-99c9-4038-82fc-59b6516a71ea.aspx</id>
    <published>2008-11-24T05:07:36.154-06:00</published>
    <updated>2008-11-24T15:41:26.1954704-06:00</updated>
    <category term="Information Technology" label="Information Technology" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,InformationTechnology.aspx" />
    <category term="Visual Foxpro" label="Visual Foxpro" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,VisualFoxpro.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>Same Old, Same Old<br /></strong>Far too often developers will either not implement error handling in their
applications (allowing VFP's default error handler to prevail) or they will
display a simple messagebox containing a few pieces of error information such as the
values returned from Visual FoxPro's Error(), Message() and Lineno() functions. In
either case, this type of error handling is usually woefully inadequate. Not only are
these approaches of little use to the user, it is probably disconcerting (if
not a little frightening) to them. The possible end result of these approaches: bugs
go unreported, error information is not captured, and the user's overall confidence
in the application is shaken.
</p>
        <p>
          <strong>A Possible Approach to Error Handling<br /></strong>At <a href="http://www.swfox.net/home.aspx">Southwest Fox 2008</a>, I presented
a session entitled "Creating a Professional VFP Application from Start to Finish"
in which I showed the error handler that I use in a number of applications I have
developed. That error handler is presented here as one possible approach you can take when
implementing error handling in your Visual FoxPro applications. There is sure
to be room for improvement, but the state informaiton it gathers is pretty extensive and
I've found that most users find the error screen (see screen shots below) to
be non-threatening/reassuring when exceptions arise.
</p>
        <p>
          <strong>How to Use the Error Handler<br /></strong>In order to implement the error handler in your own applications, you'll
need the functions and the ON ERROR command that are in the main.prg of the sample
application (provided in the download below). You'll also want to include the issues.scx
form in your project and set the MyCompany, MyProduct, MyTechEmailAddress, and
MyTechPhoneNumber properties of the issues form with your information. That's about
all there is to it. I have included an FLL with the sample, but this is merely used
to facilitate the transmittal of the error information via email. If you implement
another method of transmission (such as a post to a <a href="http://www.west-wind.com/webconnection/">Web
Connection</a> web application), then you needn't include the FLL.
</p>
        <p>
To try the error handler out you can download the sample below and, after setting
the issues form properties as noted above, simply build the project provided and run
the executeable you've built. A form is provided that allows you to submit an issue
manually as a customer would and also to throw an error to see how the error handler
works in an exception situation.
</p>
        <p>
          <strong>Due Credit<br /></strong>Most of the code that you'll find in the main.prg for collecting error information
came from the book "<font face="Courier New"><font face="Verdana"><a href="http://docs.rinet.ru/GlyadiLisu/ch23/ch23.htm">Special
Edition Using Visual FoxPro 6</a>". And, the code that is used to terminate the process
after the exception has occured is from work done by <a href="http://doughennig.blogspot.com/">Doug
Hennig</a>. So, special thanks to those two sources.</font></font></p>
        <p>
          <strong>What's Next<br /></strong>Just have fun with the error handler and see if it's useful to you and your
applications. In a perfect world, you'd find some way to improve it (add screenshot
ability, refactor the code, etc.). If you do improve the error handler, I'd appreciate
it if you would contact me and share the improvements you've implemented. Thank you
in advanced to those of you that decide to do so.
</p>
        <p>
Until next time... Visual FoxPro Rocks!
</p>
        <p>
          <a href="http://www.sweetpotatosoftware.com/files/errorhandler.zip">Download Error
Handling Sample (approx. 41 KB)</a>
        </p>
        <p>
          <img src="http://www.sweetpotatosoftware.com/SPSBlog/content/binary/errorhandler1.png" border="0" />
        </p>
        <p>
          <strong>Figure 1:</strong> The screen the user sees when an exception occurs.
</p>
        <p>
 
</p>
        <p>
          <img src="http://www.sweetpotatosoftware.com/SPSBlog/content/binary/errorhandler2.png" border="0" />
        </p>
        <p>
          <strong>Figure 2:</strong> Respecting the user's privacy, they are allowed to view
what the error report contains before it is sent.
</p>
        <p>
 
</p>
        <p>
          <img src="http://www.sweetpotatosoftware.com/SPSBlog/content/binary/errorhandler3.png" border="0" />
        </p>
        <p>
          <strong>Figure 3:</strong> The screen also allows the user to provide additional information
before submitting the error report.
</p>
        <img width="0" height="0" src="http://www.sweetpotatosoftware.com/SPSBlog/aggbug.ashx?id=58979f42-99c9-4038-82fc-59b6516a71ea" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Longitude and Latitude from Address String</title>
    <link rel="alternate" type="text/html" href="http://www.sweetpotatosoftware.com/SPSBlog/2008/09/30/LongitudeAndLatitudeFromAddressString.aspx" />
    <id>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,5020a8e3-9e9b-4988-b8d7-ba9b88857e32.aspx</id>
    <published>2008-09-30T06:31:17.6054943-05:00</published>
    <updated>2008-09-30T06:31:17.6054943-05:00</updated>
    <category term="Information Technology" label="Information Technology" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,InformationTechnology.aspx" />
    <category term="Visual Foxpro" label="Visual Foxpro" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,VisualFoxpro.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>Getting the Longitude and Latitude for an Address<br /></strong>Just finished answering a question out on <a href="http://www.universalthread.com/">UniversalThread</a> regarding
how to get the Longitude and Latitude from an address. Following is the Visual FoxPro
code I came up with for doing it. I'm posting it here simply so I can find it
later (maybe a few readers will find it interesting or useful too). In any event,
here's the code...
</p>
        <p>
          <span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">LOCAL
lcAddress, lcLongitude, lcLatitude<br />
m.lcAddress <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">"7651
209th Street North,Forest Lake,MN"</span><br />
GetLongLatFromAddress(m.lcAddress, @m.lcLongitude, @m.lcLatitude)<br />
MESSAGEBOX(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Longitude:
"</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">+</span> m.lcLongitude <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">+</span> CHR(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">"Latitude:
"</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">+</span> m.lcLatitude,
64, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"Geo
Information"</span>)<br /><br />
************************<br />
FUNCTION GetLongLatFromAddress(tcAddress, tcLongitude, tcLatitude)<br />
************************<br />
LOCAL lcAddress, lcURL, loXMLHTTP <span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">as</span> MSXML2.XMLHTTP,
lcReturn<br />
m.loXMLHTTP <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> CreateObject(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"MSXML2.XMLHTTP"</span>)<br />
m.lcAddress <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> UrlEncode(m.tcAddress,
.F.)<br />
m.lcAddress <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> HandleUnsafeChars(m.lcAddress)<br />
m.lcURL <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">"http://rpc.geocoder.us/service/rest?address="</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">+</span> m.lcAddress<br />
m.loXMLHTTP.open(<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"GET"</span>,
m.lcURL, .F.) &amp;&amp; third parameter needed to avoid need to check readyState<br />
m.loXMLHTTP.send()<br />
m.lcReturn <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> m.loXMLHTTP.responseText<br />
m.tcLongitude <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> STREXTRACT(m.lcReturn,<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"&lt;geo:long&gt;"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"&lt;/geo:long&gt;"</span>,1,1)<br />
m.tcLatitude <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> STREXTRACT(m.lcReturn,<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"&lt;geo:lat&gt;"</span>, <span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"&lt;/geo:lat&gt;"</span>,1,1)<br />
RETURN m.lcReturn<br />
ENDFUNC<br /><br />
************************<br />
FUNCTION UrlEncode(tcString, tlNoPlus)<br />
    ************************<br />
    LOCAL lcReturn, lcChar, lnCounter<br />
    m.lcReturn=<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">""</span><br />
    FOR m.lnCounter <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> 1
TO LEN(m.tcString)<br />
        m.lcChar <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> SUBSTR(m.tcString,
m.lnCounter, 1)<br />
        IF ATC(m.lcChar,<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"</span>)
&gt; 0<br />
            m.lcReturn <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> m.lcReturn <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">+</span> m.lcChar<br />
            LOOP<br />
        ENDIF<br />
        IF ASC(m.lcChar) <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> 32
AND !m.tlNoPlus<br />
            m.lcReturn <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> m.lcReturn <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">"+"</span><br />
            LOOP<br />
        ENDIF<br />
        m.lcReturn <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> m.lcReturn <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">"%"</span><span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">+</span> RIGHT(TRANSFORM(ASC(m.lcChar),<span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4">"@0"</span>),2)<br />
    ENDFOR<br />
    RETURN m.lcReturn<br />
ENDFUNC<br /><br />
************************<br />
FUNCTION HandleUnsafeChars(tcString)<br />
    ************************<br />
    LOCAL lcReturn, lcBuffer, lnBufferSize<br />
    #DEFINE ICU_BROWSER_MODE 0x2000000<br />
    DECLARE INTEGER InternetCanonicalizeUrl IN wininet;<br />
        STRING sURL, STRING @sBUFFER, INTEGER
@nLength, INTEGER nFlags<br />
    m.lnBufferSize <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> 250<br />
    m.lcBuffer <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> REPLICATE(CHR(0),
m.lnBufferSize)<br />
    IF InternetCanonicalizeUrl (m.tcString, @m.lcBuffer, @m.lnBufferSize,
ICU_BROWSER_MODE) !<span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> 0<br />
        m.lcReturn <span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent">=</span> LEFT(m.lcBuffer,
m.lnBufferSize)<br />
    ELSE<br />
        m.lcReturn <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">""</span><br />
    ENDIF<br />
    RETURN m.lcReturn<br />
ENDFUNC</span>
        </p>
        <img width="0" height="0" src="http://www.sweetpotatosoftware.com/SPSBlog/aggbug.ashx?id=5020a8e3-9e9b-4988-b8d7-ba9b88857e32" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Using Excel 2007 File Formats in VFP 9.0</title>
    <link rel="alternate" type="text/html" href="http://www.sweetpotatosoftware.com/SPSBlog/2008/09/30/UsingExcel2007FileFormatsInVFP90.aspx" />
    <id>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,6b9d4c6f-76bb-4444-8d5b-9e321c605534.aspx</id>
    <published>2008-09-30T04:08:09.279-05:00</published>
    <updated>2008-09-30T05:06:48.1957921-05:00</updated>
    <category term="Information Technology" label="Information Technology" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,InformationTechnology.aspx" />
    <category term="Visual Foxpro" label="Visual Foxpro" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,VisualFoxpro.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>The Problems<br /></strong>Visual FoxPro 9.0's APPEND FROM and COPY TO commands are incompatible with
the new Excel 2007 file formats (XLS, XLSX, XLSB, and XLSM). You may have noticed
that I included XLS which you would think is supported, but just try saving your Excel
97-2003 XLS workbook in compatibility mode in Excel 2007 and then using the APPEND
FROM command on it. VFP will complain about the validity of the file - in short, it
doesn't work. And, the COPY TO command is simply stuck in the dark ages with XLS and
XL5 available. OK, so all of that is the first problem.
</p>
        <p>
The second problem with the APPEND FROM and COPY TO commands is that they don't allow
you to specify the columns/fields, a where/for clause, or specify a target range/printable
region. We're pretty much stuck with specifying a workbook. APPEND FROM does allow
for an optional SHEET parameter, but that's merely adequate not super cool.
</p>
        <p>
The third problem is that the usual workaround suggested for the problems above is
to use automation, and automation is super slow due to the COM overhead incurred.
It also introduces an additional dependency on having Excel 2007 installed on the
machine on which the code is executing. The 'slow' is never acceptable (VFP applications can
be a number of things, but slow is not one of them) and the additional dependency,
while acceptable in certain instances, is a show-stopper if you are running these
types of operations on say a web server that doesn't have Excel 2007 installed on
it.
</p>
        <p>
          <strong>The Solution<br /></strong>I was working on a solution for a client of mine that required that I consume
and create XLS, XLSX, XLSB, and XLSM files without the user needing to have Excel
2007 installed. After throwing a proof-of-concept together, I enlisted the help of
my friend <a href="http://blog.moxiedata.com/">Bo Durban</a>. The code provided in
a zip at the end of this post is what we came up with after a couple intense coding
sessions. Special thanks to my client for allowing me to share it.
</p>
        <p>
          <strong>The Code</strong>
          <br />
The code includes 2 main functions: <strong>AppendFromExcel()</strong> and <strong>CopyToExcel()</strong>.
There are also 4 helper functions: AWorkSheets(), AWorkSheetColumns(), CreateExcelTemplate(),
and EmptyFieldToNull() that you might find useful or interesting. The code:
</p>
        <ul>
          <li>
Does not require Office 2007 
</li>
          <li>
Can append from xls, xlsx, xlsm, and xlsb file formats 
</li>
          <li>
Can create and copy to xls, xlsx, xlsm, and xlsb file formats 
</li>
          <li>
Supports all Excel tables (worksheets, ranges, and printable regions) 
</li>
          <li>
Allows target worksheet columns and table fields to be specified 
</li>
          <li>
Allows header row in worksheet to have spaces in the names of the columns by enclosing
them in standard brackets, for instance [My Column #1] 
</li>
          <li>
Provides support for SQL Where clause or VFP For clause expressions 
</li>
          <li>
Is super fast 
</li>
          <li>
Probably does a few other things I'm not thinking of right now :)</li>
        </ul>
        <p>
In any event, download/extract the prg, uncomment/modify the Sample Usage code
at the top of the prg to suit, and have fun! I orginally included the code at
the bottom of this post, but the code made this blog entry crazy wide because of some
very long lines of binary in it. So, here's the download link for the prg file that
contains the stuff you need...
</p>
        <p>
          <a href="http://www.sweetpotatosoftware.com/SPSBlog/content/binary/VFPExcel2007Functions.zip">VFPExcel2007Functions.zip
(19.14 KB)</a>
        </p>
        <p>
          <em>
            <font color="#ff0000">Note:</font> Additional refactoring is still needed and this
definitely cries out for a class to be built, but the code works fully as-is. If you
have any problems running the code (especially if a Select Data Source dialog pops
up) you might want to check the OLEDB provider comments and alternatives provided
in the code.</em>
        </p>
        <img width="0" height="0" src="http://www.sweetpotatosoftware.com/SPSBlog/aggbug.ashx?id=6b9d4c6f-76bb-4444-8d5b-9e321c605534" />
      </div>
    </content>
  </entry>
  <entry>
    <title>Tornado less than 10 miles from our home...</title>
    <link rel="alternate" type="text/html" href="http://www.sweetpotatosoftware.com/SPSBlog/2008/05/26/TornadoLessThan10MilesFromOurHome.aspx" />
    <id>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,aa75782c-bab3-47bc-90c5-72bad6894a7a.aspx</id>
    <published>2008-05-26T18:26:47.241-05:00</published>
    <updated>2008-05-27T01:27:29.8764612-05:00</updated>
    <category term="General" label="General" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,General.aspx" />
    <category term="Personal" label="Personal" scheme="http://www.sweetpotatosoftware.com/SPSBlog/CategoryView,category,Personal.aspx" />
    <content type="xhtml">
      <div xmlns="http://www.w3.org/1999/xhtml">
        <p>
I'm sure you've seen it on the news by now or somewhere else on the internet, but
if not then here is a link...
</p>
        <p>
          <a href="http://www.todayszaman.com/tz-web/detaylar.do?load=detay&amp;link=143041">http://www.todayszaman.com/tz-web/detaylar.do?load=detay&amp;link=143041</a>
        </p>
        <p>
I was on my way back from my daughter's baby shower while Claire and my two youngest
children sought saftety in the basement of our home in Forest Lake, MN. It was a scarey
deal. We were fortunate in that everyone is safe and the power was only
off for about 12 hours which we sat out at a motel across from the Mall of America.
Others in Hugo (just south of us) were not as fortunate. Our prayers are with everyone
effected by this severe weather event.
</p>
        <p>
I've been through Hugo, MN twice since the tornado went through. There are lots of
downed trees and houses that are completely demolished as if a bomb struck them. The
local authorities have most of Hugo roped off with Police tape and are detouring traffic
around it. All-in-all it makes a person so grateful for what they've got.
How blessed most of us are.
</p>
        <p>
Here are some pictures of the devastation...
</p>
        <u>
          <font color="#0000ff" size="2">
            <p>
              <a href="http://www.startribune.com/galleries/19251959.html?location_refer=East%20Metro">http://www.startribune.com/galleries/19251959.html?location_refer=East%20Metro</a>
            </p>
            <p>
 
</p>
          </font>
        </u>
        <p>
 
</p>
        <img width="0" height="0" src="http://www.sweetpotatosoftware.com/SPSBlog/aggbug.ashx?id=aa75782c-bab3-47bc-90c5-72bad6894a7a" />
      </div>
    </content>
  </entry>
</feed>