<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:pingback="http://madskills.com/public/xml/rss/module/pingback/" version="2.0">
  <channel>
    <title>The SPS Weblog</title>
    <link>http://www.sweetpotatosoftware.com/SPSBlog/</link>
    <description>Visual FoxPro Programming</description>
    <language>en-us</language>
    <copyright>SweetPotato Software, Inc.</copyright>
    <lastBuildDate>Sat, 01 Mar 2008 15:31:35 GMT</lastBuildDate>
    <generator>newtelligence dasBlog 1.9.6264.0</generator>
    <managingEditor>craig@sweetpotatosoftware.com</managingEditor>
    <webMaster>craig@sweetpotatosoftware.com</webMaster>
    <item>
      <trackback:ping>http://www.sweetpotatosoftware.com/SPSBlog/Trackback.aspx?guid=45d9db38-f852-4a47-b1b7-47b281c9565e</trackback:ping>
      <pingback:server>http://www.sweetpotatosoftware.com/SPSBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,45d9db38-f852-4a47-b1b7-47b281c9565e.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.sweetpotatosoftware.com/SPSBlog/CommentView,guid,45d9db38-f852-4a47-b1b7-47b281c9565e.aspx</wfw:comment>
      <wfw:commentRss>http://www.sweetpotatosoftware.com/SPSBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=45d9db38-f852-4a47-b1b7-47b281c9565e</wfw:commentRss>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <b>Incomplete Directions<br /></b>If you read the contents of the Readme.txt that comes with Sedna, you would think
that the DDEX Provider can be registered for Visual Studio 2005 by simply shelling
out to the command prompt and running the included RegDDEX.exe. Unfortunately, following
the outlined steps to the letter will result in very little. In short, the "Microsoft
FoxPro Database File (FoxClient)" will not show up in the list when attempting to
add a connection from the Server Explorer or when adding a new using the Add New Data
Source from the Data menu provided in Visual Studio. Another frustration that many
are bound to run into is that the RegDDEX.exe will not even run if you don't have
Visual Studio 2005 installed... I don't know about you, but I'm using Visual Studio
2008.<br /><br /><b>Some Directions That Will Work<br /></b>We have the source code for RegDDEX.exe and a few quick searches on MSDN will
provide a wealth of information on how to install a DDEX Provider. So, what's wrong
with what we were given? Well, first off when installing Sedna's DDEX Provider the
RegDDEX.exe is responsible for a few basic tasks.<br /><ul><li>
Verify that it can find the Fox Client (Microsoft.Data.FoxClient.dll)<br /></li><li>
Verify that Visual Studio 2005 is installed (more on this in a moment)</li><li>
Modify the machine.config file (located in C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG)</li><li>
Copy Microsoft.Data.FoxClient.dll to the installdir for Visual Studio (such as C:\Program
Files\Microsoft Visual Studio 8.0\Common7\IDE)</li></ul><b>Machine.config Modification<br /></b>Near the bottom of the machine.config file you will find a DbProviderFactories
node that has a bunch of &lt;add&gt; elements underneath it. The RegDDEX.exe simply
adds another element to this list. The element that it adds looks like the following:<br /><p><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">&lt;add
name=<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"FoxPro
Data Provider"</span> invariant=<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"Microsoft.Data.FoxClient"</span> description=<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">".Net
Framework Data Provider for FoxPro"</span> type=<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"Microsoft.Data.FoxClient.FoxClientFactory,
Microsoft.Data.FoxClient, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c45cdbf5d603d993"</span> /&gt;</span></p><b>What to Change for Visual Studio 2008<br /></b>If you are using Visual Studio 2008 then you will need to either do the preceding
steps manually or modify the RegDDEX project and recompile it. To do the following
steps manually, you would copy the Microsoft.Data.FoxClient.dll to C:\Program Files\Microsoft
Visual Studio 9.0\Common7\IDE and then add the preceding element to the machine.config
file. If you wish to modify the RegDDEX as I did, then go to the source (C:\Program
Files\Microsoft Visual FoxPro 9\Sedna\DDEXProvider\Source) and open up the project
in Visual Studio. Open the MainModule.vb and modify line 44 to read...<br /><p><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">Console.WriteLine(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"
Unable to detect Microsoft Visual Studio 2008."</span>)<br /></span></p>
... and modify line 76 to read...<br /><p><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">key <span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span> My.Computer.Registry.LocalMachine.OpenSubKey(<span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;">"SOFTWARE\Microsoft\VisualStudio\9.0"</span>)<br /></span></p>
Then, recompile the RedDDEX (I renamed mine to RegDDEXVS2008.exe) and run it 
<br /><br /><b>After Running RegDDEX<br /></b>As previously stated, after running RegDDEX the DDEX provider still doesn't show
up in the list. Well, the problem is that the Registry still doesn't have all the
information it needs. Luckily, this is pretty easy to remedy. In the provided source
for Sedna's DDEX Provider there is a file named microsoft.data.foxclient.design.reg.
This file is located in the C:\Program Files\Microsoft Visual FoxPro 9\Sedna\DDEXProvider\Source\Microsoft.Data.FoxClient.Design
folder. Now, don't run that reg file as-is because there are some problems with it.
You'll need to first open it up and note that near the bottom of the file are a bunch
of paths that appear to have come from Milind's development machine. You probably
don't have Visual FoxPro installed on your D:\ drive and Sedna's install certainly
doesn't install the DDEX Provider component's into the VFP 9.0 install directory anyways.
So, to fix this registry file you will want to modify the last two entries in it so
they read as follows...<br /><p><span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;">[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\Packages\{63FBC6D5-9E89-44a0-8C03-3734328EEEB4}]<br />
@<span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span>"Microsoft.Data.FoxClient.Design.FoxDataProviderPackage"<br />
"InprocServer32"<span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span>"C:\\Windows\\System32\\mscoree.dll"<br />
"Class"<span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span>"Microsoft.Data.FoxClient.Design.FoxDataProviderPackage"<br />
"CodeBase"<span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span>"C:\\Program
Files\\Microsoft Visual FoxPro 9\\Sedna\\DDEXProvider\\Microsoft.Data.FoxClient.Design.dll"<br /><br />
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\Packages\{63FBC6D5-9E89-44a0-8C03-3734328EEEB4}\SatelliteDll]<br />
"DllName"<span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span>"Microsoft.Data.FoxClient.DesignUI.dll"<br />
"Path"<span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;">=</span>"C:\\Program
Files\\Microsoft Visual FoxPro 9\\Sedna\\DDEXProvider"</span></p><b>What to Change for Visual Studio 2008<br /></b>Those of you running Visual Studio will need to perform the above step and the
additional step of searching and replacing all occurrences of "VisualStudio\8.0" with
"VisualStudio\9.0".<br /><br /><b>Add the Information to Registry<br /></b>Once you've completed the above steps, regardless of your version of Visual Studio)
you will then need to run the microsoft.data.foxclient.design.reg file to add the
information to your registry.<br /><br /><b>Whew - All Done!<br /></b>If you've followed the steps as outlined here, you should now be able to open
up your copy of Visual Studio and add a connection to a Visual FoxPro database. There
are lots of cool features provided by Visual Studio's Server Explorer and using the
DDEX Provider that is provided with Sedna makes working with VFP data sources a joy.
I'm a little disappointed in the RegDDEX and the lack of documentation provided to
VFP developers trying to install the DDEX Provider, but it gave me an opportunity
to post a cool blog entry and when I get a chance I'll fix this all up by modifying
the DDEX Provider project provided out on VFPX. That's one of the things I love about
VFP... the VFP Community can provide for themselves.<br /><br />
Until next time... VFP Rocks!<br /><br /><img src="http://www.sweetpotatosoftware.com/SPSBlog/content/binary/ddexprovider1.png" border="0" /><br /><br /><img src="http://www.sweetpotatosoftware.com/SPSBlog/content/binary/ddexprovider2.png" border="0" /><br /><br /><img src="http://www.sweetpotatosoftware.com/SPSBlog/content/binary/ddexprovider3.png" border="0" /><br /><br /><hr />
This weblog is sponsored by <a href="http://www.sweetpotatosoftware.com">SweetPotato
Software, Inc.</a></body>
      <title>Properly Registering Sedna's DDEX Provider</title>
      <guid isPermaLink="false">http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,45d9db38-f852-4a47-b1b7-47b281c9565e.aspx</guid>
      <link>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,45d9db38-f852-4a47-b1b7-47b281c9565e.aspx</link>
      <pubDate>Sat, 01 Mar 2008 15:31:35 GMT</pubDate>
      <description>&lt;b&gt;Incomplete Directions&lt;br&gt;
&lt;/b&gt;If you read the contents of the Readme.txt that comes with Sedna, you would think
that the DDEX Provider can be registered for Visual Studio 2005 by simply shelling
out to the command prompt and running the included RegDDEX.exe. Unfortunately, following
the outlined steps to the letter will result in very little. In short, the "Microsoft
FoxPro Database File (FoxClient)" will not show up in the list when attempting to
add a connection from the Server Explorer or when adding a new using the Add New Data
Source from the Data menu provided in Visual Studio. Another frustration that many
are bound to run into is that the RegDDEX.exe will not even run if you don't have
Visual Studio 2005 installed... I don't know about you, but I'm using Visual Studio
2008.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Some Directions That Will Work&lt;br&gt;
&lt;/b&gt;We have the source code for RegDDEX.exe and a few quick searches on MSDN will
provide a wealth of information on how to install a DDEX Provider. So, what's wrong
with what we were given? Well, first off when installing Sedna's DDEX Provider the
RegDDEX.exe is responsible for a few basic tasks.&lt;br&gt;
&lt;ul&gt;
&lt;li&gt;
Verify that it can find the Fox Client (Microsoft.Data.FoxClient.dll)&lt;br&gt;
&lt;/li&gt;
&lt;li&gt;
Verify that Visual Studio 2005 is installed (more on this in a moment)&lt;/li&gt;
&lt;li&gt;
Modify the machine.config file (located in C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG)&lt;/li&gt;
&lt;li&gt;
Copy Microsoft.Data.FoxClient.dll to the installdir for Visual Studio (such as C:\Program
Files\Microsoft Visual Studio 8.0\Common7\IDE)&lt;/li&gt;
&lt;/ul&gt;
&lt;b&gt;Machine.config Modification&lt;br&gt;
&lt;/b&gt;Near the bottom of the machine.config file you will find a DbProviderFactories
node that has a bunch of &amp;lt;add&amp;gt; elements underneath it. The RegDDEX.exe simply
adds another element to this list. The element that it adds looks like the following:&lt;br&gt;
&lt;p&gt;
&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;&amp;lt;add
name=&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"FoxPro
Data Provider"&lt;/span&gt; invariant=&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Microsoft.Data.FoxClient"&lt;/span&gt; description=&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;".Net
Framework Data Provider for FoxPro"&lt;/span&gt; type=&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"Microsoft.Data.FoxClient.FoxClientFactory,
Microsoft.Data.FoxClient, Version=1.0.0.0, Culture=neutral, PublicKeyToken=c45cdbf5d603d993"&lt;/span&gt; /&amp;gt;&lt;/span&gt;
&lt;/p&gt;
&lt;b&gt;What to Change for Visual Studio 2008&lt;br&gt;
&lt;/b&gt;If you are using Visual Studio 2008 then you will need to either do the preceding
steps manually or modify the RegDDEX project and recompile it. To do the following
steps manually, you would copy the Microsoft.Data.FoxClient.dll to C:\Program Files\Microsoft
Visual Studio 9.0\Common7\IDE and then add the preceding element to the machine.config
file. If you wish to modify the RegDDEX as I did, then go to the source (C:\Program
Files\Microsoft Visual FoxPro 9\Sedna\DDEXProvider\Source) and open up the project
in Visual Studio. Open the MainModule.vb and modify line 44 to read...&lt;br&gt;
&lt;p&gt;
&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;Console.WriteLine(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"
Unable to detect Microsoft Visual Studio 2008."&lt;/span&gt;)&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
... and modify line 76 to read...&lt;br&gt;
&lt;p&gt;
&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;key &lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt; My.Computer.Registry.LocalMachine.OpenSubKey(&lt;span style="color: rgb(102, 102, 102); background-color: rgb(228, 228, 228); font-family: Courier New; font-size: 11px;"&gt;"SOFTWARE\Microsoft\VisualStudio\9.0"&lt;/span&gt;)&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
Then, recompile the RedDDEX (I renamed mine to RegDDEXVS2008.exe) and run it 
&lt;br&gt;
&lt;br&gt;
&lt;b&gt;After Running RegDDEX&lt;br&gt;
&lt;/b&gt;As previously stated, after running RegDDEX the DDEX provider still doesn't show
up in the list. Well, the problem is that the Registry still doesn't have all the
information it needs. Luckily, this is pretty easy to remedy. In the provided source
for Sedna's DDEX Provider there is a file named microsoft.data.foxclient.design.reg.
This file is located in the C:\Program Files\Microsoft Visual FoxPro 9\Sedna\DDEXProvider\Source\Microsoft.Data.FoxClient.Design
folder. Now, don't run that reg file as-is because there are some problems with it.
You'll need to first open it up and note that near the bottom of the file are a bunch
of paths that appear to have come from Milind's development machine. You probably
don't have Visual FoxPro installed on your D:\ drive and Sedna's install certainly
doesn't install the DDEX Provider component's into the VFP 9.0 install directory anyways.
So, to fix this registry file you will want to modify the last two entries in it so
they read as follows...&lt;br&gt;
&lt;p&gt;
&lt;span style="color: Black; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\Packages\{63FBC6D5-9E89-44a0-8C03-3734328EEEB4}]&lt;br&gt;
@&lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt;"Microsoft.Data.FoxClient.Design.FoxDataProviderPackage"&lt;br&gt;
"InprocServer32"&lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt;"C:\\Windows\\System32\\mscoree.dll"&lt;br&gt;
"Class"&lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt;"Microsoft.Data.FoxClient.Design.FoxDataProviderPackage"&lt;br&gt;
"CodeBase"&lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt;"C:\\Program
Files\\Microsoft Visual FoxPro 9\\Sedna\\DDEXProvider\\Microsoft.Data.FoxClient.Design.dll"&lt;br&gt;
&lt;br&gt;
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\Packages\{63FBC6D5-9E89-44a0-8C03-3734328EEEB4}\SatelliteDll]&lt;br&gt;
"DllName"&lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt;"Microsoft.Data.FoxClient.DesignUI.dll"&lt;br&gt;
"Path"&lt;span style="color: Red; background-color: transparent; font-family: Courier New; font-size: 11px;"&gt;=&lt;/span&gt;"C:\\Program
Files\\Microsoft Visual FoxPro 9\\Sedna\\DDEXProvider"&lt;/span&gt;
&lt;/p&gt;
&lt;b&gt;What to Change for Visual Studio 2008&lt;br&gt;
&lt;/b&gt;Those of you running Visual Studio will need to perform the above step and the
additional step of searching and replacing all occurrences of "VisualStudio\8.0" with
"VisualStudio\9.0".&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Add the Information to Registry&lt;br&gt;
&lt;/b&gt;Once you've completed the above steps, regardless of your version of Visual Studio)
you will then need to run the microsoft.data.foxclient.design.reg file to add the
information to your registry.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Whew - All Done!&lt;br&gt;
&lt;/b&gt;If you've followed the steps as outlined here, you should now be able to open
up your copy of Visual Studio and add a connection to a Visual FoxPro database. There
are lots of cool features provided by Visual Studio's Server Explorer and using the
DDEX Provider that is provided with Sedna makes working with VFP data sources a joy.
I'm a little disappointed in the RegDDEX and the lack of documentation provided to
VFP developers trying to install the DDEX Provider, but it gave me an opportunity
to post a cool blog entry and when I get a chance I'll fix this all up by modifying
the DDEX Provider project provided out on VFPX. That's one of the things I love about
VFP... the VFP Community can provide for themselves.&lt;br&gt;
&lt;br&gt;
Until next time... VFP Rocks!&lt;br&gt;
&lt;br&gt;
&lt;img src="http://www.sweetpotatosoftware.com/SPSBlog/content/binary/ddexprovider1.png" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;img src="http://www.sweetpotatosoftware.com/SPSBlog/content/binary/ddexprovider2.png" border="0"&gt;
&lt;br&gt;
&lt;br&gt;
&lt;img src="http://www.sweetpotatosoftware.com/SPSBlog/content/binary/ddexprovider3.png" border="0"&gt;
&lt;br&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.sweetpotatosoftware.com"&gt;SweetPotato
Software, Inc.&lt;/a&gt;</description>
      <comments>http://www.sweetpotatosoftware.com/SPSBlog/CommentView,guid,45d9db38-f852-4a47-b1b7-47b281c9565e.aspx</comments>
      <category>Information Technology;Visual Foxpro</category>
    </item>
    <item>
      <trackback:ping>http://www.sweetpotatosoftware.com/SPSBlog/Trackback.aspx?guid=50f7f4b6-f16f-42de-9802-b8412cbc7dd7</trackback:ping>
      <pingback:server>http://www.sweetpotatosoftware.com/SPSBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,50f7f4b6-f16f-42de-9802-b8412cbc7dd7.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.sweetpotatosoftware.com/SPSBlog/CommentView,guid,50f7f4b6-f16f-42de-9802-b8412cbc7dd7.aspx</wfw:comment>
      <wfw:commentRss>http://www.sweetpotatosoftware.com/SPSBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=50f7f4b6-f16f-42de-9802-b8412cbc7dd7</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>Windows RSS Platform</strong>
        </p>
        <p>
While I could go into detail about the Windows RSS Platform here, it is much easier
for me to point you to the source which says in part...
</p>
        <p>
          <em>"...As part of the RSS support in Internet Explorer 7, users can discover and
subscribe to RSS feeds within the browser. When the user subscribes to a feed, it
is added to the <span>Common Feed List</span>, which is available for clients to use
in addition to or instead of their own list..."<br /></em>
          <em>"...The <span class="clsGlossary" onmouseover="showDef()" onmouseout="clearDef()" g_rid="term_feed_download_engine">Feed
Download Engine</span> downloads feeds and merges the new items with the existing
data in the feed store. Using the Windows RSS Platform, applications can then expose
the feed data to the user..."<br /></em>
          <em>"...The consumption of feed data varies by application; the Windows RSS Platform
makes a variety of scenarios possible by providing easy access to the feed data..."</em>
        </p>
        <p>
To read the whole of the above and get some detailed information regarding the Windows
RSS Platform you can go to "<a href="http://msdn2.microsoft.com/en-us/library/ms686418.aspx">Introducing
the Windows RSS Platform</a>" out on the MSDN. The thing to bear in mind is that just
about everything having to do with the Windows RSS Platform is surfaced through the
msfeeds.dll, a COM dll that you are likely to find in your C:\Windows\System32
directory.
</p>
        <p>
          <strong>FoxFeeds</strong>
        </p>
        <p>
One of the prototypes that I worked on while developing for Sedna was a complete vcx
wrapper for msfeeds.dll and an RSS reader application to show it off. This wrapper
and RSS reader didn't make the Sedna cut for whatever reason, but Microsoft has been
kind enough to give me permission to release it on my own since they didn't use it.
The original idea behind the wrapper was to create something very FFC-like in that
you could certainly program against msfeeds.dll directly in your VFP program, but
a wrapper would make the task much simpler. A wrapper would also provide a wealth
of information regarding msfeeds for VFP developers that took the time to explore
the wrapper classes contained in the library.
</p>
        <p>
          <img src="http://www.sweetpotatosoftware.com/SPSBlog/content/binary/foxfeeds.png" border="0" />
        </p>
        <p>
Since then, I've finished fixing a few more bugs and renamed the project FoxFeeds.
I came up with the name FoxFeeds as it seemed to fit, and though it is not trademarked,
I must tell you that I ran into a few other references to this when I Google
searched it later on. Andrew MacNeill once had (maybe still does) a <a href="http://akselsoft.blogspot.com/2003/11/gator-feature-custom-newspages.html">folder
in NewsGator called "FoxFeeds"</a> that he used to keep his Fox Community oriented
feeds organized, and Calvin Hsia once created an <a href="http://www.craigberntson.com/blog/2005/06/keynoted.asp">RSS
reader that hooked into Outlook</a> that Randy Brown showed at a DevCon keynote. So,
it appears that it is a popular name, but I really like the name so, while
it may be confusing for Andrew and those who attended the DevCon keynote in 2005,
I'm going with it.
</p>
        <p>
          <strong>Machine Code On Purpose</strong>
        </p>
        <p>
Some may note some crazy code in the feedevents.prg. While the events of msfeeds can
now be hooked in the normal fashion (using EventHandler without EventHandlerEx), there
was a time when they couldn't. Calvin Hsia was kind enough to get me real close to
the solution in <a href="http://blogs.msdn.com/calvin_hsia/archive/2006/06/14/631604.aspx">one
of his blog posts</a> and you can also see me commenting back to him down in the comments
of his blog post. So, if you care to read how the code came about and was used to
solve the problem, head on over to the above link. I just wanted you to know that
I've left that crazy code in FoxFeeds on purpose because it shows that almost
anything is possible in FoxPro, even a little machine code when needed. (The basic
technique that I believe Calvin used to come up with the proper machine code was to
compile a C\C++ project that did what he wanted and then he decompiled it...
just a guess, but I think that's about right. Pretty damn ingenious, I might add!)
</p>
        <p>
          <strong>In Closing</strong>
        </p>
        <p>
I think the vcx provided in the download when coupled with the RSS reader example
pretty much speaks for itself, so I won't be going into any serious detail about the
wrapper or the Windows RSS Platform in this post. If you want to figure out how it
works, simply put it into debug mode and step through the code. You'll be able to
see that Microsoft did a pretty good job of creating a platform that developers can
leverage when they created msfeeds.dll. While the RSS Platform isn't perfect, I think
you can see that it makes creating an RSS reader a walk in the park.
</p>
        <p>
Perhaps the download serves to enlighten some developers to the existence of the Windows
RSS Platform that hadn't heard of it before (came out with IE 7), or, the very
least, it could make a few programming tasks easier for those needing to work
with msfeeds.dll. Or, conceivably, we could continue adding functionality to FoxFeeds
until we had a first class open-source RSS reader for the Windows platform (the example
was mostly to show how to use the wrapper - and yes, perhaps maybe to show some outside
of the community that a VFP application can not only work great, but look great doing
it). Whatever its worth, I present it here so that you can freely download it.
</p>
        <p>
          <a href="http://www.sweetpotatosoftware.com/files/FoxFeeds.zip">Download FoxFeeds
Wrapper and RSS Reader Example</a> (approx. 205 KB)
</p>
        <p>
Until next time... VFP Rocks!
</p>
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.sweetpotatosoftware.com">SweetPotato
Software, Inc.</a></body>
      <title>FoxFeeds - Windows RSS Platform for VFP</title>
      <guid isPermaLink="false">http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,50f7f4b6-f16f-42de-9802-b8412cbc7dd7.aspx</guid>
      <link>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,50f7f4b6-f16f-42de-9802-b8412cbc7dd7.aspx</link>
      <pubDate>Sat, 23 Feb 2008 13:05:56 GMT</pubDate>
      <description>&lt;p&gt;
&lt;strong&gt;Windows RSS Platform&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
While I could go into detail about the Windows RSS Platform here, it is much easier
for me to point you to the source which says in part...
&lt;/p&gt;
&lt;p&gt;
&lt;em&gt;"...As part of the RSS support in Internet Explorer 7, users can discover and
subscribe to RSS feeds within the browser. When the user subscribes to a feed, it
is added to the &lt;span&gt;Common Feed List&lt;/span&gt;, which is available for clients to use
in addition to or instead of their own list..."&lt;br&gt;
&lt;/em&gt;&lt;em&gt;"...The &lt;span class=clsGlossary onmouseover=showDef() onmouseout=clearDef() g_rid="term_feed_download_engine"&gt;Feed
Download Engine&lt;/span&gt; downloads feeds and merges the new items with the existing
data in the feed store. Using the Windows RSS Platform, applications can then expose
the feed data to the user..."&lt;br&gt;
&lt;/em&gt;&lt;em&gt;"...The consumption of feed data varies by application; the Windows RSS Platform
makes a variety of scenarios possible by providing easy access to the feed data..."&lt;/em&gt;
&lt;/p&gt;
&lt;p&gt;
To read the whole of the above and get some detailed information regarding the Windows
RSS Platform you can go to "&lt;a href="http://msdn2.microsoft.com/en-us/library/ms686418.aspx"&gt;Introducing
the Windows RSS Platform&lt;/a&gt;" out on the MSDN. The thing to bear in mind is that just
about everything having to do with the Windows RSS Platform is surfaced through the
msfeeds.dll, a&amp;nbsp;COM dll that you are likely to find in your C:\Windows\System32
directory.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;FoxFeeds&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
One of the prototypes that I worked on while developing for Sedna was a complete vcx
wrapper for msfeeds.dll and an RSS reader application to show it off. This wrapper
and RSS reader didn't make the Sedna cut for whatever reason, but Microsoft has been
kind enough to give me permission to release it on my own since they didn't use it.
The original idea behind the wrapper was to create something very FFC-like in that
you could certainly program against msfeeds.dll directly in your VFP program, but
a wrapper would make the task much simpler. A wrapper would also provide a wealth
of information regarding msfeeds&amp;nbsp;for VFP developers that took the time to explore
the wrapper classes contained in the library.
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.sweetpotatosoftware.com/SPSBlog/content/binary/foxfeeds.png" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Since then, I've finished fixing a few more bugs and renamed&amp;nbsp;the project&amp;nbsp;FoxFeeds.
I came up with the name FoxFeeds as it seemed to fit,&amp;nbsp;and though it is not&amp;nbsp;trademarked,
I&amp;nbsp;must tell you that I ran into a few other references to this when I Google
searched it later on. Andrew MacNeill once had (maybe still does) a &lt;a href="http://akselsoft.blogspot.com/2003/11/gator-feature-custom-newspages.html"&gt;folder
in NewsGator called "FoxFeeds"&lt;/a&gt; that he used to keep his Fox Community oriented
feeds organized, and Calvin Hsia once created an &lt;a href="http://www.craigberntson.com/blog/2005/06/keynoted.asp"&gt;RSS
reader that hooked into Outlook&lt;/a&gt; that Randy Brown showed at a DevCon keynote. So,
it appears that it is a popular name, but I really like&amp;nbsp;the name&amp;nbsp;so, while
it may be confusing for Andrew and those who attended the DevCon keynote in 2005,
I'm going with it.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Machine Code On Purpose&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
Some may note some crazy code in the feedevents.prg. While the events of msfeeds can
now be hooked in the normal fashion (using EventHandler without EventHandlerEx), there
was a time when they couldn't. Calvin Hsia was kind enough to get me real close to
the solution in &lt;a href="http://blogs.msdn.com/calvin_hsia/archive/2006/06/14/631604.aspx"&gt;one
of his blog posts&lt;/a&gt; and you can also see me commenting back to him down in the comments
of his blog post. So, if you care to read how the code came about and was used to
solve the problem, head on over to the above link. I just wanted you to know that
I've left&amp;nbsp;that crazy code&amp;nbsp;in FoxFeeds on purpose because it shows that almost
anything is possible in FoxPro, even a little machine code when needed. (The basic
technique that I believe Calvin used to come up with the proper machine code was to
compile a C\C++&amp;nbsp;project that did what he wanted and then he decompiled it...
just a guess, but I think that's about right. Pretty damn ingenious, I might add!)
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;In Closing&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
I think the vcx provided in the download when coupled with the RSS reader example
pretty much speaks for itself, so I won't be going into any serious detail about the
wrapper or the Windows RSS Platform in this post. If you want to figure out how it
works, simply put it into debug mode and step through the code. You'll be able to
see that Microsoft did a pretty good job of creating a platform that developers&amp;nbsp;can
leverage when they created msfeeds.dll. While the RSS Platform isn't perfect, I think
you can see that it makes creating an RSS reader a walk in the park.
&lt;/p&gt;
&lt;p&gt;
Perhaps the download serves to enlighten some developers to the existence of the Windows
RSS Platform that hadn't heard of it before (came out with IE 7), or,&amp;nbsp;the very
least, it could&amp;nbsp;make a few programming tasks easier for those needing to work
with msfeeds.dll. Or, conceivably, we could continue adding functionality to FoxFeeds
until we had a first class open-source RSS reader for the Windows platform (the example
was mostly to show how to use the wrapper - and yes, perhaps maybe to show some outside
of the community that a VFP application can not only work great, but look great doing
it). Whatever its worth, I present it here so that you can freely download it.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.sweetpotatosoftware.com/files/FoxFeeds.zip"&gt;Download FoxFeeds
Wrapper and RSS Reader Example&lt;/a&gt; (approx. 205 KB)
&lt;/p&gt;
&lt;p&gt;
Until next time... VFP Rocks!
&lt;/p&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.sweetpotatosoftware.com"&gt;SweetPotato
Software, Inc.&lt;/a&gt;</description>
      <comments>http://www.sweetpotatosoftware.com/SPSBlog/CommentView,guid,50f7f4b6-f16f-42de-9802-b8412cbc7dd7.aspx</comments>
      <category>Information Technology;Visual Foxpro</category>
    </item>
    <item>
      <trackback:ping>http://www.sweetpotatosoftware.com/SPSBlog/Trackback.aspx?guid=44d8bab2-fe4b-4c97-982e-09c10480a962</trackback:ping>
      <pingback:server>http://www.sweetpotatosoftware.com/SPSBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,44d8bab2-fe4b-4c97-982e-09c10480a962.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.sweetpotatosoftware.com/SPSBlog/CommentView,guid,44d8bab2-fe4b-4c97-982e-09c10480a962.aspx</wfw:comment>
      <wfw:commentRss>http://www.sweetpotatosoftware.com/SPSBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=44d8bab2-fe4b-4c97-982e-09c10480a962</wfw:commentRss>
      <slash:comments>4</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p>
          <strong>Backing Up Data</strong>
        </p>
        <p>
One of the most important and simplest things a user of a desktop database application
can do is to maintain a current backup of the application's database. However, if
the user doesn't have some sort of software or hardware that makes an automatic backup
on a schedule it is usually up to the software developer to implement an easy to use
backup feature for the application. 
</p>
        <p>
          <strong>Implementing Data Backup</strong>
        </p>
        <p>
There are a number of things to consider when implementing a database backup for an
application, but usually the VFP developer simply wants the ability to compress VFP
data files from a directory on a schedule (such as every night at 3:00 AM) into
a zip file that is stamped with the date and time. In the interest of meeting these
modest requirements I present an application I call DataBackup.exe.
</p>
        <p>
DataBackup.exe utilizes <a href="http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,07ed8874-8781-4e76-878b-92b3f4cfc8b3.aspx">vfpcompression.fll</a> to
generate a zip file of the Visual FoxPro data files contained in a directory. The
directory to backup is specified by simply modifying the path in DataBackup.ini. And,
with the help of <a href="http://technet.microsoft.com/en-us/windowsvista/aa906020.aspx">Windows
Task Scheduler</a> (yes, it's available on earlier versions of Windows), DataBackup.exe
can easily be run on a schedule. In fact, in the interest of the latter, DataBackup.exe
was designed without any GUI elements, though there is a Progress function that you
can hook into if you want to implement some progress indication when a backup is in
process. In any event, DataBackup.exe is designed to be easily implemented for any
VFP application that uses a directory to contain all of the data files.
</p>
        <p>
So, simply bundle DataBackup.exe with your VFP application install. Then have your
VFP application write out the path to the Data directory into a DataBackup.ini file
where DataBackup.exe resides. Set up a Scheduled Task for it automatically or walk
the user through setting up a Scheduled Task that will run DataBackup.exe on a regular
schedule.
</p>
        <p>
Note: The Backups (datetime stamped zip files) are generated in the same directory
where the DataBackup.exe resides. Also, should DataBackup fail due to an exception
being thrown, DataBackup will save the error message information into a file named
DataBackup.err. This file can prove useful when trying to diagnose problems when the
DataBackup.exe is not generating backups as intended on the user's machine.
</p>
        <p>
          <strong>Possible Improvements</strong>
        </p>
        <p>
There are a number of things that could be done to enhance DataBackup.exe, such as
adding a Restore feature, providing for multiple directories to be specified
in DataBackup.ini, allowing for subfolders, allowing the file mask to be modified
via the DataBackup.ini to provide for backing up other types of files, allow the user
to specify where the backups are created... Any other ideas?
</p>
        <p>
          <a href="http://www.sweetpotatosoftware.com/files/DataBackup.zip">Download the DataBackup
Application (approx. 68 KB)</a>
        </p>
        <p>
Until next time... VFP Rocks!
</p>
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.sweetpotatosoftware.com">SweetPotato
Software, Inc.</a></body>
      <title>VFP Database Backup Made Simple</title>
      <guid isPermaLink="false">http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,44d8bab2-fe4b-4c97-982e-09c10480a962.aspx</guid>
      <link>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,44d8bab2-fe4b-4c97-982e-09c10480a962.aspx</link>
      <pubDate>Fri, 22 Feb 2008 14:08:23 GMT</pubDate>
      <description>&lt;p&gt;
&lt;strong&gt;Backing Up Data&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
One of the most important and simplest things a user of a desktop database application
can do is to maintain a current backup of the application's database. However, if
the user doesn't have some sort of software or hardware that makes an automatic backup
on a schedule it is usually up to the software developer to implement an easy to use
backup feature for the application. 
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Implementing Data Backup&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
There are a number of things to consider when implementing a database backup for an
application, but usually the VFP developer simply wants the ability to compress VFP
data files&amp;nbsp;from a directory on a schedule (such as every night at 3:00 AM) into
a zip file that is stamped with the date and time. In the interest of meeting these
modest requirements I present an application I call DataBackup.exe.
&lt;/p&gt;
&lt;p&gt;
DataBackup.exe utilizes &lt;a href="http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,07ed8874-8781-4e76-878b-92b3f4cfc8b3.aspx"&gt;vfpcompression.fll&lt;/a&gt; to
generate a zip file of the Visual FoxPro data files contained in a directory. The
directory to backup is specified by simply modifying the path in DataBackup.ini.&amp;nbsp;And,
with&amp;nbsp;the help of &lt;a href="http://technet.microsoft.com/en-us/windowsvista/aa906020.aspx"&gt;Windows
Task Scheduler&lt;/a&gt;&amp;nbsp;(yes, it's available on earlier versions of Windows), DataBackup.exe
can easily be run on a schedule. In fact, in the interest of the latter, DataBackup.exe
was designed without any GUI elements, though there is a Progress function that you
can hook into if you want to implement some progress indication when a backup is in
process. In any event, DataBackup.exe is designed to be easily implemented for any
VFP application that uses a directory to contain all of the data files.
&lt;/p&gt;
&lt;p&gt;
So, simply bundle DataBackup.exe with your VFP application install. Then have your
VFP application write out the path to the Data directory into a DataBackup.ini file
where DataBackup.exe resides. Set up a Scheduled Task for it automatically or walk
the user through setting up a Scheduled Task that will run DataBackup.exe on a regular
schedule.
&lt;/p&gt;
&lt;p&gt;
Note: The Backups (datetime stamped zip files) are generated in the same directory
where the DataBackup.exe resides. Also, should DataBackup fail due to an exception
being thrown, DataBackup will save the error message information into a file named
DataBackup.err. This file can prove useful when trying to diagnose problems when the
DataBackup.exe is not generating backups as intended on the user's machine.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Possible Improvements&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
There are a number of things that could be done to enhance DataBackup.exe, such as
adding a&amp;nbsp;Restore feature, providing for multiple directories to be specified
in DataBackup.ini, allowing for subfolders, allowing the file mask to be modified
via the DataBackup.ini to provide for backing up other types of files, allow the user
to specify where the backups are created... Any other ideas?
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.sweetpotatosoftware.com/files/DataBackup.zip"&gt;Download the DataBackup
Application (approx. 68 KB)&lt;/a&gt;
&lt;/p&gt;
&lt;p&gt;
Until next time... VFP Rocks!
&lt;/p&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.sweetpotatosoftware.com"&gt;SweetPotato
Software, Inc.&lt;/a&gt;</description>
      <comments>http://www.sweetpotatosoftware.com/SPSBlog/CommentView,guid,44d8bab2-fe4b-4c97-982e-09c10480a962.aspx</comments>
      <category>Information Technology;Visual Foxpro</category>
    </item>
    <item>
      <trackback:ping>http://www.sweetpotatosoftware.com/SPSBlog/Trackback.aspx?guid=41e05bd6-f856-4837-93f0-b295ff1d2bb6</trackback:ping>
      <pingback:server>http://www.sweetpotatosoftware.com/SPSBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,41e05bd6-f856-4837-93f0-b295ff1d2bb6.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.sweetpotatosoftware.com/SPSBlog/CommentView,guid,41e05bd6-f856-4837-93f0-b295ff1d2bb6.aspx</wfw:comment>
      <wfw:commentRss>http://www.sweetpotatosoftware.com/SPSBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=41e05bd6-f856-4837-93f0-b295ff1d2bb6</wfw:commentRss>
      <slash:comments>3</slash:comments>
      <title>VFPCompression Update - Relative Path Fixes</title>
      <guid isPermaLink="false">http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,41e05bd6-f856-4837-93f0-b295ff1d2bb6.aspx</guid>
      <link>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,41e05bd6-f856-4837-93f0-b295ff1d2bb6.aspx</link>
      <pubDate>Fri, 22 Feb 2008 13:35:29 GMT</pubDate>
      <description>&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;&lt;strong&gt;VFPCompression Update&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;This update contains fixes
to problems surrounding relative paths when compressing folders and files that are
not relative to one another or the zip file being created. Previous to this version
developers needed to send in .T. for the lIgnorePath parameter when calling functions
in order to zip files and folders that were not relative. This was not an acceptable
workaround&amp;nbsp;as the&amp;nbsp;relative pathing for subfolders would then be ignored
as well. This has been a stumbling block for some in implementing this FLL, so I am&amp;nbsp;glad
it is finally fixed and sorry that it took so long for me to address this problem.&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
Special thanks go out to Sergey Berezniker and Elliot Selick. They independently reported
the relative pathing issues and helped with testing once I had addressed the issues.
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" size=2&gt;Sample code for using the
library and the library documentation can be found &lt;a href="http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,07ed8874-8781-4e76-878b-92b3f4cfc8b3.aspx"&gt;in
my previous post&lt;/a&gt;. Here's the customary download link...&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font size=2&gt;&lt;font face="Verdana, Arial, Helvetica, sans-serif"&gt;&lt;strong&gt;VFP Compression
Update:&lt;/strong&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font face="Verdana, Arial, Helvetica, sans-serif" color=#3399ff&gt;&lt;a href="http://www.sweetpotatosoftware.com/files/vfpcompression.zip" ?&gt;&lt;strong&gt;VFPCompression
FLL Download (35 KB approx.)&lt;/strong&gt;&lt;/a&gt;&lt;/font&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;font color=#3399ff&gt;&lt;/font&gt;&amp;nbsp;
&lt;/p&gt;
&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.sweetpotatosoftware.com"&gt;SweetPotato
Software, Inc.&lt;/a&gt;</description>
      <comments>http://www.sweetpotatosoftware.com/SPSBlog/CommentView,guid,41e05bd6-f856-4837-93f0-b295ff1d2bb6.aspx</comments>
      <category>Information Technology;Visual Foxpro</category>
    </item>
    <item>
      <trackback:ping>http://www.sweetpotatosoftware.com/SPSBlog/Trackback.aspx?guid=b71ea97e-8fb8-4401-ace4-b5a536fe0a37</trackback:ping>
      <pingback:server>http://www.sweetpotatosoftware.com/SPSBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,b71ea97e-8fb8-4401-ace4-b5a536fe0a37.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.sweetpotatosoftware.com/SPSBlog/CommentView,guid,b71ea97e-8fb8-4401-ace4-b5a536fe0a37.aspx</wfw:comment>
      <wfw:commentRss>http://www.sweetpotatosoftware.com/SPSBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=b71ea97e-8fb8-4401-ace4-b5a536fe0a37</wfw:commentRss>
      <slash:comments>20</slash:comments>
      <body xmlns="http://www.w3.org/1999/xhtml">
        <p align="left">
          <img src="http://www.sweetpotatosoftware.com/SPSBlog/content/binary/VFPStudioLogo.jpg" border="0" />
        </p>
        <p>
          <strong>VFP Studio<br /></strong>
          <strong>
            <br />
          </strong>Since posting <a href="http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,5264624a-c48a-4292-bb55-40420eb4485f.aspx">the
countdown</a>, I've been fielding lots of questions regarding <a href="http://www.vfpstudio.com">VFP
Studio</a>. Some of the mystery surrounding VFP Studio has been on purpose and some
of it has been because we (Bo Durban and I) are not yet sure what all is possible
working within the framework provided by Microsoft via the <a href="http://msdn2.microsoft.com/en-us/vsx2008/products/bb933751.aspx">Visual
Studio Isolated Shell</a>. However, in order to provide a little more transparency
and begin the process of getting feedback from the community I will be presenting
a series of screencasts in the next few months. Here I present the first screencast
in the series on VFP Studio's Code Editor.
</p>
        <p>
VFP Studio's Code Editor, which is made possible via a Language Service <a href="http://fox.wikis.com/wc.dll?Wiki~BoDurban">Bo
Durban</a> and I created in Visual Studio 2008, provides some significant enhancements
when compared to the editor included in VFP 9.0 including outlining, Quick Info, Intellisense
for user-defined classes, line numbers, word wrap, VS-style navigation bar, improved
Code Snippets and various other features we are implementing in to VFP Studio. In
any event, here's the screencast. Enjoy.
</p>
        <p>
          <strong>Link to View the Screencast Online:</strong>
        </p>
        <p>
          <a href="http://www.sweetpotatosoftware.com/VFPStudio/VFPStudioCodeEditor.htm">VFP
Studio's Code Editor</a> (approx. 9 MB)
</p>
        <p>
          <strong>Link to Download SWF for Offline Viewing:</strong>
        </p>
        <p>
          <a href="http://www.sweetpotatosoftware.com/VFPStudio/VFPStudioCodeEditor.zip">VFP
Studio Code Editor Screencast in Zip Format</a> (approx. 9 MB)
</p>
        <p>
          <img src="http://www.sweetpotatosoftware.com/SPSBlog/content/binary/VFPStudioScreenshot1.jpg" border="0" />
        </p>
        <p>
Until next time... VFP Rocks!
</p>
        <br />
        <hr />
This weblog is sponsored by <a href="http://www.sweetpotatosoftware.com">SweetPotato
Software, Inc.</a></body>
      <title>VFP Studio - Code Editor Screencast</title>
      <guid isPermaLink="false">http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,b71ea97e-8fb8-4401-ace4-b5a536fe0a37.aspx</guid>
      <link>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,b71ea97e-8fb8-4401-ace4-b5a536fe0a37.aspx</link>
      <pubDate>Wed, 20 Feb 2008 16:41:30 GMT</pubDate>
      <description>&lt;p align=left&gt;
&lt;img src="http://www.sweetpotatosoftware.com/SPSBlog/content/binary/VFPStudioLogo.jpg" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;VFP Studio&lt;br&gt;
&lt;/strong&gt;&lt;strong&gt;
&lt;br&gt;
&lt;/strong&gt;Since posting &lt;a href="http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,5264624a-c48a-4292-bb55-40420eb4485f.aspx"&gt;the
countdown&lt;/a&gt;, I've been fielding lots of questions regarding &lt;a href="http://www.vfpstudio.com"&gt;VFP
Studio&lt;/a&gt;. Some of the mystery surrounding VFP Studio has been on purpose and some
of it has been because we (Bo Durban and I) are not yet sure what all is possible
working within the framework provided by Microsoft via the &lt;a href="http://msdn2.microsoft.com/en-us/vsx2008/products/bb933751.aspx"&gt;Visual
Studio Isolated Shell&lt;/a&gt;. However, in order to provide a little more transparency
and begin the process of getting feedback from the community&amp;nbsp;I will be presenting
a series of screencasts in the next few months. Here I present the first screencast
in the series on VFP Studio's Code Editor.
&lt;/p&gt;
&lt;p&gt;
VFP Studio's Code Editor, which is made possible via a Language Service &lt;a href="http://fox.wikis.com/wc.dll?Wiki~BoDurban"&gt;Bo
Durban&lt;/a&gt; and I created in Visual Studio 2008, provides some significant enhancements
when compared to the editor included in VFP 9.0 including outlining, Quick Info, Intellisense
for user-defined classes, line numbers, word wrap, VS-style navigation bar, improved
Code Snippets and various other features we are implementing in to VFP Studio. In
any event, here's the screencast. Enjoy.
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Link to View the Screencast Online:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.sweetpotatosoftware.com/VFPStudio/VFPStudioCodeEditor.htm"&gt;VFP
Studio's Code Editor&lt;/a&gt; (approx. 9 MB)
&lt;/p&gt;
&lt;p&gt;
&lt;strong&gt;Link to Download SWF for Offline Viewing:&lt;/strong&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://www.sweetpotatosoftware.com/VFPStudio/VFPStudioCodeEditor.zip"&gt;VFP
Studio Code Editor Screencast in Zip Format&lt;/a&gt;&amp;nbsp;(approx. 9 MB)
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://www.sweetpotatosoftware.com/SPSBlog/content/binary/VFPStudioScreenshot1.jpg" border=0&gt;
&lt;/p&gt;
&lt;p&gt;
Until next time... VFP Rocks!
&lt;/p&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.sweetpotatosoftware.com"&gt;SweetPotato
Software, Inc.&lt;/a&gt;</description>
      <comments>http://www.sweetpotatosoftware.com/SPSBlog/CommentView,guid,b71ea97e-8fb8-4401-ace4-b5a536fe0a37.aspx</comments>
      <category>Information Technology;Visual Foxpro</category>
    </item>
    <item>
      <trackback:ping>http://www.sweetpotatosoftware.com/SPSBlog/Trackback.aspx?guid=06bb82c3-9e4c-4048-9b3b-87cc8579eb59</trackback:ping>
      <pingback:server>http://www.sweetpotatosoftware.com/SPSBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,06bb82c3-9e4c-4048-9b3b-87cc8579eb59.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.sweetpotatosoftware.com/SPSBlog/CommentView,guid,06bb82c3-9e4c-4048-9b3b-87cc8579eb59.aspx</wfw:comment>
      <wfw:commentRss>http://www.sweetpotatosoftware.com/SPSBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=06bb82c3-9e4c-4048-9b3b-87cc8579eb59</wfw:commentRss>
      <slash:comments>6</slash:comments>
      <title>VFP Application Updating Made Simple</title>
      <guid isPermaLink="false">http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,06bb82c3-9e4c-4048-9b3b-87cc8579eb59.aspx</guid>
      <link>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,06bb82c3-9e4c-4048-9b3b-87cc8579eb59.aspx</link>
      <pubDate>Fri, 15 Feb 2008 10:47:31 GMT</pubDate>
      <description>&lt;p&gt;
&lt;font size=1&gt;&lt;strong&gt;02/16/2008 correction:&lt;/strong&gt; Thanks to &lt;strong&gt;Dave Crozier&lt;/strong&gt; for
finding a bug in the code (see comments below). A new zip file of AppUpdate.zip has
been uploaded to the server. If you previously downloaded the zip you can download
it again or make the change as described in the commments of this blog entry.&lt;/font&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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;Updating
Visual FoxPro Applications&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;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;One
of the things that I tried to do in &lt;a href="http://www.code-magazine.com/article.aspx?quickid=0703072&amp;amp;page=1"&gt;my
article regarding ClickOnce&lt;/a&gt; was to provide Visual FoxPro developers with an understanding
of one of the many solutions available for updating applications once they have been
deployed. While ClickOnce is extremely powerful, there are times when a more home-grown
solution can be more appropriate. Updating applications with applications that the
developer has written and/or has the source code for can also provide a degree of
flexibility and power that just isn't available in solutions such as ClickOnce or
Installshield's update service. So, in this blog entry, I'll be presenting an application
that I created using Visual FoxPro SP2 that can be used to update virtually any Visual
FoxPro application.&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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;AppUpdate.exe&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;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;AppUpdate.exe
is what is known as a 'Loader'. This basically means that it is responsible for checking
for updates, installing them if they exist, and then loading (running) the application
it is in charge of updating. Relying heavily on the use of &lt;a href="http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,07ed8874-8781-4e76-878b-92b3f4cfc8b3.aspx"&gt;vfpcompression.fll&lt;/a&gt; and
the new&amp;nbsp;&lt;a href="http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,e7cccb45-7d99-4c35-85bc-e123c81c8794.aspx"&gt;vfpconnection.fll&lt;/a&gt;,
AppUpdate.exe is designed to allow Visual FoxPro developers to quickly and easily
add update capabilities to their applications. Here's a couple of screen shots of
AppUpdate runnning...&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;img src="http://www.sweetpotatosoftware.com/SPSBlog/content/binary/appupdate1.png" border=0&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;img src="http://www.sweetpotatosoftware.com/SPSBlog/content/binary/appupdate2.png" border=0&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;While&amp;nbsp;I
am including the&amp;nbsp;source code for the AppUpdate project, it is not necessary to
modify AppUpdate in order to configure it to update a particular application. AppUpdate
gets its information from the appupdate.ini file that provides a myriad of sections
and entries that will allow you to specify what application it is supposed to load,
where to check for updates, how to load the application, what to display to the user,
where to copy updates locally so that the same update only needs to be dowloaded once
in a multi-user environment, when to display updates, what VFP code to execute once
the update has been installed, etc. So, as a developer you really only need to modify
the ini to suit and bundle AppUpdate with your VFP applications.&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;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;In
The Download ...&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;
In the download I am including a fully working example of AppUpdate along with the
source. I've included a sampleapp.exe that is version 1.0 and I've placed a live update
for it (version 2.0) on the SweetPotato Software server at this end so you'll be able
to actually try AppUpdate out and see how it works straight out of the box. I've included
copious comments in the appupdate.ini file that you'll want to review and a couple
of ReadMe.txt files. Simply dowload the zip file below, extract it somewhere, read
through the ini file and the included ReadMe.txt files and then run the included AppUpdate.exe.
When you start wanting to create your own updates you can have a look at the ServerUpdate
folder I've included in the download as that contains the files that are up on the
SweetPotato Software server that are updating the sampleapp.exe provided in the download.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;
&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;Let
Me Know What You Think&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;
If you give AppUpdate a try, I'd love to hear what you think of it. If you have any
suggestions for enhancements or find any bugs feel free to leave a comment here and
I'll respond.
&lt;/p&gt;
&lt;p class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: justify; mso-margin-top-alt: auto; mso-margin-bottom-alt: auto"&gt;&lt;?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" /&gt;
Until next time… Visual FoxPro Rocks!&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;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/AppUpdate.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;AppUpdate
Project and Example Download (922 KB approx.)&lt;/span&gt;&lt;/b&gt;&lt;/a&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;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;br /&gt;
&lt;hr /&gt;
This weblog is sponsored by &lt;a href="http://www.sweetpotatosoftware.com"&gt;SweetPotato
Software, Inc.&lt;/a&gt;</description>
      <comments>http://www.sweetpotatosoftware.com/SPSBlog/CommentView,guid,06bb82c3-9e4c-4048-9b3b-87cc8579eb59.aspx</comments>
      <category>Information Technology;Visual Foxpro</category>
    </item>
    <item>
      <trackback:ping>http://www.sweetpotatosoftware.com/SPSBlog/Trackback.aspx?guid=e7cccb45-7d99-4c35-85bc-e123c81c8794</trackback:ping>
      <pingback:server>http://www.sweetpotatosoftware.com/SPSBlog/pingback.aspx</pingback:server>
      <pingback:target>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,e7cccb45-7d99-4c35-85bc-e123c81c8794.aspx</pingback:target>
      <dc:creator>
      </dc:creator>
      <wfw:comment>http://www.sweetpotatosoftware.com/SPSBlog/CommentView,guid,e7cccb45-7d99-4c35-85bc-e123c81c8794.aspx</wfw:comment>
      <wfw:commentRss>http://www.sweetpotatosoftware.com/SPSBlog/SyndicationService.asmx/GetEntryCommentsRss?guid=e7cccb45-7d99-4c35-85bc-e123c81c8794</wfw:commentRss>
      <slash:comments>15</slash:comments>
      <title>VFP Uploading/Downloading Made Simple</title>
      <guid isPermaLink="false">http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,e7cccb45-7d99-4c35-85bc-e123c81c8794.aspx</guid>
      <link>http://www.sweetpotatosoftware.com/SPSBlog/PermaLink,guid,e7cccb45-7d99-4c35-85bc-e123c81c8794.aspx</link>
      <pubDate>Fri, 15 Feb 2008 09:59:47 GMT</pubDate>
      <description>&lt;p class=MsoNormal style="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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;Uploading,
Downloading and More&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;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;I’ve
always wanted some commands in the Visual FoxPro language that would make uploading
and downloading files from websites, FTP sites, and file locations extremely easy.
Oh, and I also wanted progress indication for these uploads and downloads to be easy
to implement as well. Having mucked around with various class libraries and 3&lt;sup&gt;rd&lt;/sup&gt; Party
components for years, I decided it was time to write an FLL that did exactly what
I wanted so I created vfpconnection.fll.&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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;VFPConnection
FLL&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;Internally
vfpconnection.fll is using the &lt;a href="http://curl.haxx.se/libcurl/"&gt;LibCurl&lt;/a&gt; library
(here's &lt;a href="http://curl.haxx.se/docs/copyright.html"&gt;their license&lt;/a&gt;), so there
are tons of other features I can, and will, add to this as it moves forward. For now
it provides VFP developers with what I believe are some of the simplest and easiest
file upload and download functions for Visual FoxPro (FTPGet, HTTPGet, FileGet, FTPPut,
HTTPPut, FilePut, FTPToStr, and HTTPToStr). It also provides the ability to download
files from FTP and HTTP in memory (similar to VFP’s FileToStr function) which avoids
disk IO all together and can prove quite convenient when a developer just wants to
read something off of a server. And, it provides an extremely slick way of implementing
progress indication via a callback function or method.&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'; 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;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;Next
Up ...&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;
I created a pretty cool example of how useful having an FLL like this can be. In my
next blog entry I’ll present a VFP application I created called AppUpdate which you’ll
be able to us as a pretty advanced (though still simple) Loader/Updater for your Visual
FoxPro applications. Special thanks ahead of time go out to a client of mine that
is allowing me to share it with my readers. In any event, until next time… Visual
FoxPro Rocks!&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;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;Here's
the customary download link, some sample code for using the vfpconnection.fll, and
the library documentation...&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;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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;VFP
Connection FLL:&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;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;VFPConnection
FLL Download (90 KB approx.)&lt;/span&gt;&lt;/b&gt;&lt;/a&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;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'"&gt;
&lt;br&gt;
&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style="FONT-SIZE: 10pt; COLOR: black; LINE-HEIGHT: 150%; FONT-FAMILY: 'Verdana','sans-serif'; mso-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;VFP
Connection Sample Code:&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;span style="FONT-SIZE: 8.5pt; COLOR: blue; LINE-HEIGHT: 150%; FONT-FAMILY: 'Courier New'; mso-fareast-font-family: 'Times New Roman'"&gt;
&lt;o:p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt; (LOCFILE(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"vfpconnection.fll"&lt;/span&gt;,&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"FLL"&lt;/span&gt;))&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;?FTPGet(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"FTP://myusername:mypassword@mysite.com/mydir/myfile.zip"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\myfile.zip"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyCommand()"&lt;/span&gt;)&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;?HTTPGet(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"http://www.mysite.com/mypage.htm"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\mypage.htm"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyCommand()"&lt;/span&gt;)&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;?&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;FILEGet&lt;/span&gt;(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"File://C:\MyFile.txt"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\MyFileCopy.txt"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyCommand()"&lt;/span&gt;)&lt;br&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;?FTPPut(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\myfile.zip"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"FTP://myusername:mypassword@mysite.com/mydir/myfile.zip"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyCommand()"&lt;/span&gt;)&lt;br&gt;
&lt;/p&gt;

&lt;/span&gt; 
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;?HTTPPut(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\mypage.htm"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"http://www.mysite.com/mypage.htm"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyCommand()"&lt;/span&gt;)&lt;br&gt;
&lt;/p&gt;
&gt; 
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;?&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;FilePut&lt;/span&gt;(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"C:\myfile.zip"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"File://C:\myfile.zip"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyCommand()"&lt;/span&gt;)&lt;br&gt;
&lt;/p&gt;
&gt; 
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;m.lcString1 &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; FTPToStr(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"FTP://myusername:mypassword@mysite.com/mydir/myfile.txt"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyCommand()"&lt;/span&gt;)&lt;br&gt;
&lt;/p&gt;
&gt; 
&lt;p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: black; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;m.lcString2 &lt;span style="FONT-SIZE: 11px; COLOR: red; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;=&lt;/span&gt; HTTPToStr(&lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"http://www.mysite.com/mypage.htm"&lt;/span&gt;, &lt;span style="FONT-SIZE: 11px; COLOR: #666666; FONT-FAMILY: Courier New; BACKGROUND-COLOR: #e4e4e4"&gt;"MyCommand()"&lt;/span&gt;)&lt;br&gt;
&lt;/p&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&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 style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;SET&lt;/span&gt; LIBRARY &lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;TO&lt;/span&gt;
&lt;br&gt;
&lt;br&gt;
&lt;span style="FONT-SIZE: 11px; COLOR: blue; FONT-FAMILY: Courier New; BACKGROUND-COLOR: transparent"&gt;FUNCTION&lt;/span&gt; MyCommand()&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;?nConnectTotalBytes&lt;br&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;?nConnectBytesSoFar&lt;br&gt;
ENDFUNC&lt;br&gt;
&lt;/p&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;
&gt;
&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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt;VFP
Connection Documenation:&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: 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;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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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[, cCallbackFunction)&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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;cCallbackFunction
- An optional string denoting a function, procedure, or method that you want fired
whenever a read/write occurs, such as "MyCallback()".&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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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 cCallbackFunction 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;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;div class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center" align=center&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;hr align=center width="100%" size=1&gt;
&lt;/span&gt;
&lt;/div&gt;
&lt;p class=MsoNormal style="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: 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;
&lt;/p&gt;
&lt;p class=MsoNormal style="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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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[, cCallbackFunction)&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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;cCallbackFunction
- An optional string denoting a function, procedure, or method that you want fired
whenever a read/write occurs, such as "MyCallback()".&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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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 cCallbackFunction 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;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;div class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center" align=center&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;hr align=center width="100%" size=1&gt;
&lt;/span&gt;
&lt;/div&gt;
&lt;p class=MsoNormal style="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: 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;
&lt;/p&gt;
&lt;p class=MsoNormal style="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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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[, cCallbackFunction])&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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;cCallbackFunction
– An optional string denoting a function, procedure, or method that you want fired
whenever a read/write occurs, such as "MyCallback()".&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;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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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 cCallbackFunction 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;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;div class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center" align=center&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;hr align=center width="100%" size=1&gt;
&lt;/span&gt;
&lt;/div&gt;
&lt;p class=MsoNormal style="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: 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;
&lt;/p&gt;
&lt;p class=MsoNormal style="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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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(cSource,
cDestinationURL[, cCallbackFunction)&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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;cCallbackFunction
- An optional string denoting a function, procedure, or method that you want fired
whenever a read/write occurs, such as "MyCallback()".&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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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 cCallbackFunction 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;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;div class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 10pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center; 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: 'Trebuchet MS','sans-serif'; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&gt; 
&lt;hr align=center width="100%" size=1&gt;
&lt;/span&gt;
&lt;/div&gt;
&lt;p class=MsoNormal style="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: 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;
&lt;/p&gt;
&lt;p class=MsoNormal style="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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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(cSource,
cDestinationURL[, cCallbackFunction)&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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;cCallbackFunction
- An optional string denoting a function, procedure, or method that you want fired
whenever a read/write occurs, such as "MyCallback()".&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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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 cCallbackFunction 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;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;div class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center" align=center&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;hr align=center width="100%" size=1&gt;
&lt;/span&gt;
&lt;/div&gt;
&lt;p class=MsoNormal style="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: 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;
&lt;/p&gt;
&lt;p class=MsoNormal style="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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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[, cCallbackFunction])&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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;cCallbackFunction
- An optional string denoting a function, procedure, or method that you want fired
whenever a read/write occurs, such as "MyCallback()".&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;
&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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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 cCallbackFunction 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;o:p&gt;&lt;/o:p&gt;
&lt;/span&gt;
&lt;/p&gt;
&lt;div class=MsoNormal style="BACKGROUND: white; MARGIN: 0in 0in 0pt; LINE-HEIGHT: 150%; TEXT-ALIGN: center" align=center&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;hr align=center width="100%" size=1&gt;
&lt;/span&gt;
&lt;/div&gt;
&lt;p class=MsoNormal style="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: 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;
&lt;/p&gt;
&lt;p class=MsoNormal style="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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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[,
cCallbackFunction)&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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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;cCallbackFunction
- An optional string denoting a function, procedure, or method that you want fired
whenever a read/write occurs, such as "MyCallback()".&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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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-bidi-font-size: 11.0pt; mso-fareast-font-family: 'Times New Roman'; mso-bidi-font-family: 'Times New Roman'"&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-