Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Articles
Recherche: 

Overview of Cryptor, Refox, COMPAxiON, FoxFix and XiLights
Michel Fournier, January 1, 2001
Xitech (Europe) produces tools for the Windows software developer. They specialize in FoxPro Developer tools, data and code recovery and security. In this article, we will see an overview of 5 of their tools. You will find more details about each of them from Xitech documentation. To get Xitech cont...
Xitech (Europe) produces tools for the Windows software developer. They specialize in FoxPro Developer tools, data and code recovery and security. In this article, we will see an overview of 5 of their tools. You will find more details about each of them from Xitech documentation. To get Xitech contact information, see their entries in the Universal Thread Visual FoxPro forum Classified Software & Products section.

Cryptor

Cryptor prevents unauthorised access to your application files via encryption. It then allow seamless access to your files in your application by adding a couple of lines of code. Multiple encryption levels are supported. Once a Visual FoxPro table encoded, it cannot be access from Visual FoxPro nor any other environment unless you have loaded the Cryptor registration function and password in memory. An encoded table with Cryptor will have little impact, depending on algorithm chosen and specific operation, on the performance of your application.

In some applications, mainly those being distributed on the Internet or any other aplication that require your data to only be readable from your application, the use of Cryptor is recommended. This is a small investment but surely one of the most important ones you will have to do for your application.

The use of Cryptor to protect your data is extremely powerful. However, it requires some considerations from your application. A few lines of code may be added in your application startup to load in memory all Cryptor registration to your files. You can also use various passwords for each file you wish to encode. From the Visual FoxPro command prompt or from the development environment, you should also consider you may have a need to load the Cryptor registration in memory if you wish to have access to your tables.

Load the library in memory

SET LIBRARY TO CRYPTOR
Encode a file

When you encode a file, it should not be in used. It is recommended to always include the full path of the file you are encoding. It is recommended to encode the CDX and FPT files as well. Most of the Cryptor functions will return 0 is the operation was completed successfully.

Encode('test.dbf','mypassword',.F.)
Once the file encoded, any access to it should not work. From Visual FoxPro, this message should be returned:

Access an encoded file

To access an encoded file, we need to load the Cryptor registration in memory. Once done, we are now ready to access the file.

Cryptor('test.dbf','mypassword')
Decode an encoded file

The Decode() function remove the encoded access from a table. A table should not be in use before attempting a decode on it.

Decode('test.dbf','mypassword',.F.)
Unload a Cryptor registration

The Cryptoff() function removes a specific registration previously created by the Cryptor() function. A table should not be in use before attempting a decode on it. The act of un-registering a table means that future access to the file will be direct and not through Cryptor.

Cryptoff('test.dbf')
Distribution

Cryptor is not royalty free. A special runtime version of Cryptor for specific number of users is available. There is also an unlimited number of users licence available. You may use that version of the library with your distributed application. That library can only be used from your EXE and not from Visual FoxPro.

Refox

ReFox is a decompiler for FoxPro. It supports all versions of FoxPro. With Refox, fully formatted source code retrieval is a snap. It can split FoxPro EXE's and APP's into their components to recover embedded Reports, Labels, etc. It also allows you to Brand your code to prevent unwanted decompilation. This is a lifesaver if your source files are damaged or lost.

Not only do you require protection to your source code from an EXE, but if you have encoded your data with Cryptor, for example, where the Cryptor password is inside the EXE, you will certainly want to protect your EXE as well to avoid someone to decompile it to get access to the password. There is no use to encode your data if you do not protect your EXE. However, in some applications, some techniques are used to avoid having the Cryptor password inside the EXE. One of them is to get that password from the Internet.

Despite the fact that it is illegal to decompile an EXE, unless you are the owner of it, there is always a chance someone will want to do it.

You may consider that investment to be another important one. It requires additional processing before preparing your install setup but it is well worth it.

Refox offers two levels of protection for your EXE called Branding. The branding does not interfere with Visual FoxPro performance.

Level I will still allow recovery of source code with Refox by supplying a password. Also, you will need to add some code in your files for Refox.

Level II is not decompilable by Refox. It also does not require you to add some code in your files. It consist of branding your EXE with the runtime files. So, only running the EXE with those runtime files will work.

That level offers your EXE maximum protection but includes some disavantages.

  • In your setup, you will have to make sure the icon command line of your EXE will call the appropriate runtime files. This mean if the user changes the icon command line or try to run the EXE from Windows Explorer, it will not work.

  • Since the command line will include a call to the appropriate runtime files, you may have a problem with directory name containing some space as it is not possible to use the -d parameter with a directory path containing a space.
However, one advantage of that level is that, if you are installing your application on a workstation where Visual FoxPro is already installed for development or for another application, you will never have a chance to interfere with the runtime files as we are using our own version.

Here's a scenario to use Refox to protect your EXE with branding level II. To be able to use this scenario, you need to ensure Refox options shows Level II Branding.

  1. From the Refox directory, run Refox
  2. Select your Visual FoxPro EXE
  3. Press Enter
At this point, you should get the Visual FoxPro project files:

Now, we need to brand the EXE:

  1. From Visual FoxPro, build your EXE
  2. From the Refox directory, run Refox
  3. Select your Visual FoxPro EXE
  4. Press F6 to brand
  5. Select the directory to place the branded EXE
  6. Enter the branded password
  7. Proceed with the branding
Your EXE should now be branded. Press Enter on it and you should see the following:

Now, you have branded your EXE with Refox branding Level II. However, it won't run if it does not run with the Visual FoxPro runtime branded with Level II as well. You may proceed with the same steps to brand your VFP500.DLL as well. Once completed, you should now be able to run your EXE with the following command assuming your EXE name is MAIN, the directory is D:\MFUG and that the VFP500.DLL branded version is in the same directory

D:\MFUG\MAIN.EXE -DD:\MFUG\VFP500.DLL
There is also another approach you may use which consist of setting some entries in the registry to avoid passing the -D parameter. You can get that information from Refox documentation.

COMPAxiON

COMPAxiON is a 32 bits software that provides developers with a mechanism not only to compress files, but to retain normal random access to them while still compressed. This will function on any readable storage media including CD-ROM's, floppy disks, etc.

COMPAxiON will allow you to compress a DBF file and get access to it without having to decompress it entirely first. Only the portions being read will be decompressed seamlessly in memory. In some situations, this can be really useful. For example, you may open a 3 MB compressed DBF file from a floppy disk, make some changes and add some records to it.

The current version supports single user operation only for read/write access and shared access to read-only volumes.

COMPAxiON is a powerful tool but may not be recommended if you are doing intensive maintenance on a table. For example, if your application constantly update your table by doing batch processes or any other kind of operations, the performance may suffer a little bit as this is not a direct DBF file access. However, for those kind of operations, this may still be acceptable if performance is not really a factor. When being used in an application which is not doing data intensive maintenance or is mostly a read only application, this may be an interesting tool especially if you deal with large tables and/or if disk space is a factor.

Load the library in memory

SET LIBRARY TO CPAXFLL
Creating a COMPAxiON file

Assuming we have a clients table including a memo and a CDX files, the following would add those 3 files in a COMPAxiON file called CLIENT.CXI in the current directory. We assume that the clients table is located in D:\DATA and no other file are beginnig with D:\DATA\CLIENT*.*.

Cpax_Add('CLIENT.CXI','D:\DATA\CLIENT.*')
Getting the files list from a COMPAxiON file

The function Cpax_List() will create an array with the files list description from a COMPAxiON file. The second parameter is used for the array name.

Cpax_List('CLIENT.CXI','laFiles')
The array created is having the following format:

ElementTypeDescription
1StringFilename
2IntegerOriginal file size
3IntegerCompressed file size
4IntegerCompression ratio achieved
5StringAttributes:
A Archive
H Hidden
R Read Only
S System

Adding a file to an existing COMPAxiON file

Once a COMPAxiON file has been created, you can add more files to it. We can use the same function we used when we created the file. If the name of the COMPAxiON file is an existing file, the new file will be added to it. Otherwise, a new COMPAxiON file will be created.

The following will add the invoices files to the existing CLIENT.CXI file. Note here that we are still passing the * parameter to specify all files having INVOICE as the file name. We could have passed INVOICE.DBF to only add the invoices table to CLIENT.CXI.

Cpax_Add('CLIENT.CXI','D:\DATA\INVOICE.*')
Extracting a file from an existing COMPAxiON file

To extract a file from an existing COMPAxiON file, we will use the Cpax_Extract() function. We will also take care of extracting the file one by one. We need to specify the full path of the file contained in the COMPAxiON file. We will also add another parameter to specify the destination.

Cpax_Extract('CLIENT.CXI','D:\DATA\INVOICE.DBF','D:\INVOICE.DBF')
Cpax_Extract('CLIENT.CXI','D:\DATA\INVOICE.CDX','D:\INVOICE.CDX')
Deleting a file from a COMPAxiON file

The Cpax_Delete() function will allow us to delete a file from a COMPAxiON file. As oppose to the Cpax_Extract() function which only take a copy out of the COMPAxiON file, this function will delete the file from it.

Cpax_Delete('CLIENT.CXI','D:\DATA\INVOICE.DBF')
Cpax_Delete('CLIENT.CXI','D:\DATA\INVOICE.CDX')
More functions

The COMPAxiON library also includes some other nice functions. The function Cpax_Compress() gives the ability to compress a string. The following will compress a 64 bytes character string into 52 bytes.

LOCAL lcCompressText
lcCompressText=''
Cpax_Compress_Str('This is my very long string: AAAAAAABBBBBBCCCCCCCDDDDDDDEEEEEEEE',;
 @lcCompressText)
The following will use Cpax_Decompress_Str() function to decompress the text.
LOCAL lcDecompressText
lcDecompressText=''
Cpax_Decompress_Str(lcCompressText,@lcDecompressText)
Use of COMPAxiON

The COMPAxiON library is extremely powerful. One of its main use is certainly to be able to archive several files in one COMPAxiON file and to be able to only extract a file from it, do some updates and add the file back in it. In the situation where we have an archive of about 20 MB and we only want to update a table in it having about 500 K, this library is the perfect tool for it. We won't have to unarchive the entire files but only the table we need. This will save some processing time and better disk space manipulation.

COMPAxiON is also available as a DLL for other development environments such as Visual C++, Delphi and Visual Basic. You may also download a pre-release version from Xitech's web site.

FoxFix

FoxFix can monitor and repair damage that may occur to Visual FoxPro data files after machine crashes or network errors for example, on both stand alone and networked systems. It can report DBF table and FPT memo headers in a networked environment while they are still being shared. It fixes the files before you get the error messages and minimise further corruptions. It also include additional tools for further internal DBF table and FPT memo files corruption and partial recovery from index files. Foxfix is a small utility that can save you a lot of time to repair your data files.

Load the library in memory

SET LIBRARY TO FOXFIX4
Monitoring and repairing a data file

The FixDbf() function is the only function you will have to use. The first parameter is the name of the table. By the use of the table name, FoxFix will detect if a CDX and FPT files are present. The second parameter is used to tell FoxFix what operation to do. An optional parameter for the FPT block size can be passed. The default is 64.

ValueDescription
NoneDisplay all possible return values
0Returns sum of values detailing problems
See the next table for the description
1Repair
2Display header and derived information

The following table lists all return codes possibilities. A combination of multiple return codes may also be applicable.

ValueDescription
0File is ok
1Header length incorrect
2Record length incorrect
4Record count incorrect
8DBF type ID incorrect
16CDX flag incorrect
32FPT header - next available block incorrect
64FPT block size non standard (not default value)

The following table lists all return codes which represent an error.

ValueDescription
-1Could not open file(s)
-2Could not read file(s)
-3Could not lock
-4Unable to read field descriptor
-5Unable to write to file
-6Invalid filename

Calling FixDbf('TEST.DBF',0) may return 12 (4+8) which means the record count and header ID are incorrect.

Calling FixDbf('TEST.DBF',1,128) will fix the DBF with a FPT blocksize of 128.

FoxFix also includes a variety of other tools for DBF and memo file scanning. Those tools have their own repair enhancements in cases where the header field definitions have been corrupted or offset. FoxFix 5.0 will introduce a complete revamp and whole set of developer tools for recovery and manipulation.

XiLights

XiLights will add a splash of colour to your Visual FoxPro desktop. Make more than just a fashion statement with this colour syntax highlighter which supports FoxPro for Windows and Visual FoxPro 3.0. It helps to identify typos and improve the code readability. Colour assignments to Visual FoxPro code keywords, program flow constructs, comments, string constants, numeric constants and system variables are fully customizable. This can also be applied to the Command and Trace windows.

Load the library in memory

SET LIBRARY TO XILIGHTS
Functions

SetColor() will allow you to customize the environment. It accepts two parameters. The first one is the type to specify the environment you wish to customize.

ValueDescription
1User text
2Visual FoxPro keywords
3String constants
4Numeric constants
5Flow constructs
6Comments
7Compiler directives
8System variables

The second parameter is the color in a RGB() format.

The following will set the Visual FoxPro keywords in red.

SetColor(2,RGB(255,0,0))
ColorMode() will turn XiLights ON or OFF. It accepts one parameter.

ValueDescription
0Off
1On

The following will turn XiLights on.

ColorMode(1)
Michel Fournier, Level Extreme Inc.
Michel Fournier is a professional, visionary, perfectionist, mostly known for his renowned realizations over the years, designer, architect, owner of the « Level Extreme Platform », formerly known as the « Universal Thread », recognized as one of the longest running Web sites of the planet, also known as a precursor to social networking, product manager, Internet serial entrepreneur, practiced Lean Startup techniques long before they were known, out of the box thinker, using the tenth man rule, specializes in building entire virtual data center solutions, has provided high end IT consulting worldwide, has owned and operated three companies, delivered worldwide renowned e-commerce Web sites, designed and architected two world class top level development frameworks, wrote over 100 IT articles for various sources, presented at user groups, conventions and corporations nationwide as well as in the US, has provided his contribution in political and legal issues to provide a better world, Owner and Senior IT Consultant at Level Extreme Inc., former Architect Software/Application & Project Manager, 7 times Microsoft Most Valued Professional for VB.NET, 7 times Microsoft Most Valued Professional for Visual FoxPro, Developers Choice award for best site at VFP DevCon 2000 Connections in New Orleans, featured in Acadie Nouvelle on October 2003.
More articles from this author
Michel Fournier, February 1, 2007
From the Level Extreme .NET Framework, this small class allows a developer to manipulate easily the content of a directory by the use of a dataset. With the setup of a few properties, a call to the method and the access to the object dataset, you can have access to the file properties of the directo...
Michel Fournier, August 1, 2001
It is interesting to see how something new can evolve. This is the case for the Universal Thread Magazine. We are now at our 3rd issue and we are already overbooked by scheduled articles and hot stuff we have to cover for the upcoming issues. Publishers are sending request for book reviews, wri...
Michel Fournier, October 1, 2002
UTMag/RapoZine team Editors Michel Fournier Claudio Lassala Co-editor Martín Salías Translation coordinators Claudio Lassala Martín Salías Translators Eduardo Vidigal Rodolfo Duarte Fábio Vazquez José Cavalcanti Moacyr Zalcman Fábio Vieira M...
Michel Fournier, May 1, 2006
In this article, Michel Fournier is providing a small introduction to manipulating XML data from VB.NET. The use of XML is now widely used for various purposes such as exchanging data between application, platforms and other environments. XML is a simple and very flexibile text format that can be ma...
Michel Fournier, October 1, 2001
In our daily things we do, sometimes we find ourselves in unexpected situations. Such situations, either in our personal life or from our professional work, require some adjustments in order to walk through them. The ability to take some time to take an overall look of what is happening, apply a bas...
Michel Fournier, March 1, 2007
In this small article, Michel discusses a problem he recently encountered when converting a dataset into XML to be used later on with a XSL transformation to export into an Excel sheet. When null values were present in the dataset, this was creating weird result. This article provides a quite alte...
Michel Fournier, February 1, 2006
This article discusses a simple banner fonctionalities function which can ease the display of banners on Web sites. If your Web site displays banners in GIF, JPG of Flash format, this function could be useful to you.
Michel Fournier, January 1, 2006
There are various ways to authenticate a user to a Web Service. This article discusses one way to do it by the use of Cookies. As it could the case with a Web page sending a cookie to the browser, the same can be used from within a Web Service.
Michel Fournier, February 1, 2006
This article is a follow up on the first part of this article which appeared on our January 2006 issue. In this one, Michel discussed further implementation of getting the authentication from a members table as well as setting up a session per user.
Michel Fournier, December 1, 2003
Visual FoxPro and .NET are two great environments to build business applications with. But, fantastic they are when you combine them together in order to increase the strenght of the flexibility to respond to your client needs. In this article, I will demonstrate a case study in regards to a new ser...
Michel Fournier, December 1, 2002
Over the years, I have been involved in several types of desktop and Web applications. Every time you start a new project, there is always something new you will learn. In this article, I would like to detail some of the issues which are to be considered when delivering a Web based application. Thos...
Michel Fournier, January 1, 2003
This article is a follow-up with more advanced details in regards to the first article of this series in our December issue which included a tip on dealing with stylesheets. This one allows you to customize your HTML code based on the user, assuming each user has some ways to setup some specific sty...
Michel Fournier, March 1, 2003
The first two articles of this series have been published in the issues of December 2002 and January 2003. In this one, I will talk about graphic issues, how to negotiate with a form to launch his transaction to either within the same window or a new one, how to gather values from one page to anothe...
Michel Fournier, April 1, 2003
In this article, I will proceed with considerations about HTTP server variables being received from a browser and about considerations for opening new windows in your Web application. Relying on the protocol or not When it first started, we didn't ask that question to ourselves as to know ...
Michel Fournier, April 1, 2009
This articles describes the use of CDO.Message to gain the ability to retrieve a URL as a MHT file. It also covers an interesting approach to retrieve a URL even if this one requires a login.
Michel Fournier, January 1, 2006
Data dictionaries has its use and also for Web applications. I see many developers building Web applications who forget about many structured that used to be in place when developping desktop applications. The same should apply for Web applications as it is no different. This article discusses some ...
Michel Fournier, June 1, 2003
DevTeach was held in Montreal from May 10-13, 2003. It presented a new breed of conference. Sessions included both presentation material and, whenever possible, hands-on training. DevTeach brought under the same roof the best speakers available for .NET, SQL Server and Visual FoxPro as well as Micro...
Michel Fournier, May 1, 2002
The Essential Fox conference was held this weekend in Independence, MO. Once again, the Universal Thread team was on site to do the official coverage of the event. It has been a great success, well planned by Russ Swall, the event owner, and his team and well appreciated by the attendees. A total of...
Michel Fournier, April 1, 2002
UTMag/RapoZine team Editors Michel Fournier Claudio Lassala Translation coordinators Claudio Lassala Martín Salías Translators Eduardo Vidigal Rodolfo Duarte Fábio Vazquez Claudio Rola José Cavalcanti Moacyr Zalcman Ricardo Soares Fábio Vieira ...
Michel Fournier, September 1, 2001
Ever wonder how to successfully and rapidly display HTML lists to your users? Well, we all probably already did. However, its implementation differs a lot from sites to sites as we all have our own different approaches. Delivering Visual FoxPro data to the Web as if you would be in Visual FoxPro is ...
Michel Fournier, November 1, 2001
A lot of things happened recently in the Visual FoxPro world and for related technologies. The Great Lakes Great Database Workshop was being held in Milwaukee from Sunday October 27 to Wednesday October 31. That conference which primaly focused on Visual FoxPro has covered a lot of technologies...
Michel Fournier, December 1, 2002
UTMag/RapoZine team Editors Michel Fournier Claudio Lassala Co-editor Martín Salías Translation coordinators Claudio Lassala Martín Salías Translators Eduardo Vidigal Rodolfo Duarte Fábio Vazquez José Cavalcanti Moacyr Zalcman Fábio Vieira M...
Michel Fournier, November 1, 2002
UTMag/RapoZine team Editors Michel Fournier Claudio Lassala Co-editor Martín Salías Translation coordinators Claudio Lassala Martín Salías Translators Eduardo Vidigal Rodolfo Duarte Fábio Vazquez José Cavalcanti Moacyr Zalcman Fábio Vieira M...
Michel Fournier, January 1, 2003
UTMag/RapoZine team Editors Michel Fournier Claudio Lassala Co-editor Martín Salías Translation coordinators Claudio Lassala Martín Salías Translators Rodolfo Duarte Fábio Vazquez Moacyr Zalcman Martín Salías Antonio Castaño Fabián Belo Rafae...
Michel Fournier, November 1, 2001
I have been following several threads on the Universal Thread recently about FTP from Visual FoxPro. I have used an ActiveX for a while to do such a task. I have found that years after years, the problem is that you have to maintain that ActiveX for your own workstation and for every servers or work...
Michel Fournier, July 1, 2002
UTMag/RapoZine team Editors Michel Fournier Claudio Lassala Co-editor Martín Salías Translation coordinators Claudio Lassala Martín Salías Translators Eduardo Vidigal Rodolfo Duarte Fábio Vazquez José Cavalcanti Moacyr Zalcman Fábio Vieira M...
Michel Fournier, January 1, 2006
With the beginning of the new year, Michel resumes some of the highlights of the Universal Thread and what is coming up for the new season.
Michel Fournier, March 1, 2006
When comes time to display the content of a memo field on a Web page, one common task we have to do is to hyperlink specific content. This article discusses about a technique which can be used to hyperlink various types of links as well as email addresses.
Michel Fournier, April 1, 2009
This article describes some basic techniques to manipulate some images in .NET. It covers image resizing, image cropping and the ability to save an image into a JPG high resolution format.
Michel Fournier, May 1, 2007
This short articles provides an approach of important data from an Excel sheet into your application without having the requirement of having Excel installed on the server.
Michel Fournier, August 1, 2002
UTMag/RapoZine team Editors Michel Fournier Claudio Lassala Co-editor Martín Salías Translation coordinators Claudio Lassala Martín Salías Translators Eduardo Vidigal Rodolfo Duarte Fábio Vazquez José Cavalcanti Moacyr Zalcman Fábio Vieira M...
Michel Fournier, July 1, 2001
Recently, I was having problems while working on several projects on my PC. The problems were happening when I had several applications open at the same time. When the problem occured, I had to reboot my PC and then was able to work for a few hours up to a few days until the next reboot. As I was wo...
Michel Fournier, June 1, 2002
UTMag/RapoZine team Editors Michel Fournier Claudio Lassala Co-editor Martín Salías Translation coordinators Claudio Lassala Martín Salías Translators Eduardo Vidigal Rodolfo Duarte Fábio Vazquez José Cavalcanti Moacyr Zalcman Fábio Vieira M...
Michel Fournier, September 1, 2002
UTMag/RapoZine team Editors Michel Fournier Claudio Lassala Co-editor Martín Salías Translation coordinators Claudio Lassala Martín Salías Translators Eduardo Vidigal Rodolfo Duarte Fábio Vazquez José Cavalcanti Moacyr Zalcman Fábio Vieira M...
Michel Fournier, April 1, 2006
This article discusses the ability to use Visual FoxPro to schedule a list of tasks to be executed at specific intervals. While there could be the approach of using the Windows Scheduler to execute those tasks, it is always interesting to be able to control everything from within VFP. A small VFP sc...
Michel Fournier, April 1, 2006
This article describes an overview of sending an email from VB.NET. It covers the basis of creating the email functionality in a class and using an instance of that class to define and send the email. The class includes the ability to send to multiple recipients as well as sending attachments. Sendi...
Michel Fournier, July 1, 2002
This is a follow up on my previous article on using SOAP protocol for authentication that appeared in our December 2001 issue. That article was mentioning the use of the SOAP header for authentication such as being able to identify the user for any upcoming hit to your Web Service as soon as the Log...
Michel Fournier, May 1, 2002
UTMag/RapoZine team Editors Michel Fournier Claudio Lassala Translation coordinators Claudio Lassala Martín Salías Translators Eduardo Vidigal Rodolfo Duarte Fábio Vazquez José Cavalcanti Moacyr Zalcman Fábio Vieira Martín Salías Antonio Castañ...
Michel Fournier, July 1, 2002
From recent discussions I had, with several persons from my team, about common patterns which occur in the evolution of the Universal Thread, I thought it would be nice to write an article about it. Basically, within the evolution of a product, there are some similitudes which are sometimes interest...
Michel Fournier, June 1, 2001
Welcome to our first issue of the Universal Thread Magazine. We kept receiving many requests to have such a media available on the Universal Thread, so we decided to release our first issue this month. Many people have mentioned an interest to either have such a magazine for the pleasure to read abo...
Michel Fournier, December 1, 2001
The Visual FoxPro Zone evolves As many of you may have seen, the Universal Thread Visual FoxPro Zone is evolving quite fast. In the last month, we added new content in it. As usual, the most popular option is the Toledo Wish List. Several entries are created every day. This is the place to co...
Michel Fournier, January 1, 2002
It's January 3rd, 2002, I am writing this editorial at 20h32 EST. The Christmas break is over but was it really a break? More and more, years after years, I keep seeing a lot of persons online during Christmas day or a few minutes before the new year. And, I mean, they are online as per their own ti...
Michel Fournier, January 1, 2004
In December 1993, a great history started when a small Web site known as the Visual FoxPro Yellow Pages started. Basically, a site providing ads for Visual FoxPro developers such as jobs and consulting services. Known also as the first Visual FoxPro site, it has evolved quite fast during the first t...
Michel Fournier, January 1, 2006
In the recent months, I have been involved in settings various projects at client sites, as well as for Level Extreme Web sites, which involved the support of uploading image files from an Internet browser. The process of supporting that capability in your application, either from a desktop of from ...
Michel Fournier, December 1, 2001
The Microsoft SOAP client provides access to any Web Service. Once the object is instantiated and the location of the WSDL file given, you are ready to go to access any method. Thus, based on what is supported by the Web Service, you can query to obtain various types of content such as string and bo...
Michel Fournier, February 1, 2002
On January 15th, 2002, an important joint took place for our magazine. The Universal Thread Magazine and RapoZine magazine, an online magazine available for the Portuguese developers community, joined to create UTMag/RapoZine. Effective from this issue, both magazines will offer the same technical c...
Michel Fournier, July 1, 2002
Show seconds in a readable format If you need to check elapsed time with seconds() or a datetime value, this function allows you to display the elapsed time in a human-readable format, that is, hours:minutes:seconds, instead of the total number of seconds. Just pass a number of seconds as...
Michel Fournier, September 1, 2002
Getting image width and height Probably the most flexible way to extract the width and height of an image is by the use of the image object. All is needed is to load the image in the object and get the values from the Width and Height properties. LOCAL loImage,lnWidth,lnHeight loIma...
Michel Fournier, August 1, 2002
Updating your DLL on IIS This has been a common question in the recent months on the Universal Thread. More and more, developers have the need to use a DLL under IIS. However, the fun part comes when you need to update it. As soon as it kicks in, you can't update your DLL anymore as it re...
Michel Fournier, November 1, 2002
Use MemLines() to wrap text lines When you need to wrap some text at a given width (say 75 characters per line), you do it easily with: SET MEMOWIDTH TO 75 lcMemo = lcNewMemo = "" _MLINE = 0 FOR i= 1 TO memlines(lcMemo) lcNewMemo = lcNewMemo ; + MLINE(lcMemo,1,_MLINE...
Michel Fournier, October 1, 2002
Extracting BMPs from general fields As a complement with last issue's article on image handling, yo can find useful this little function. If you got convinced that using general fields to handle images is a bad idea, you can decided go back to independent image files. But then you'll...
Michel Fournier, June 1, 2001
It was a year ago. The DevConnections team was holding the Visual FoxPro DevCon 2000, the SQL Server Connections and the DevCon 2000 in New Orleans, Louisiana from May 14 to 18, 2000. For the first time, attendees were able to attend sessions from more than one conference at the same time. This offe...
Michel Fournier, September 1, 2001
Is there a speed limit on the Internet? Probably not, because there is so much things we can do in a short time about delivering various type of content to the community. I remember a week ago we shared an idea about helping the promotion of user group activities around the world. A week ago it was ...
Michel Fournier, March 1, 2002
In the last month, we received dozens of emails from satisfied persons in regards for our initiative of opening the magazine and the Universal Thread in general for additional communities such as the Portuguese and Spanish communities. Regulars members of the Universal Thread, new members, Microsoft...