For the dUFLP LIBRARY Files (attached)
(dUFLP = dBASE Users' Function Library Project)
Version PLUS_F
for dBASE Plus
December, 2003

Librarian: Ken Mayer

The dUFLP is provided in WinZip archive format.  To use it, you must extract the contents.  Clicking on the link below will open the self-extracting archive.  You may then specify the location in which you wish the contents to be stored.

Click here to install the library

This library system is freeware (no charge). This file (README.TXT) is small description for the attached files. This library started as a simple procedure file in dBASE IV, 1.1. It has grown over the years to a fairly substantial library of code.


This has been updated for dBASE Plus -- the latest version of dBASE from dBASE, Inc. Note that code that runs in VdB 7.x should run fine in dBASE Plus. However, some code written for dB2K or dBASE Plus may not run in VdBASE 7.5 or earlier (in other words, not everything is backward compatible). Please read WHATS.NEW for details on updates from earlier versions


Much of the code in this release of the dUFLP has been modified
to take advantage of dBASE Plus's Source Aliasing capabilities.

In order to take advantage of functionality in dBASE Plus, the dUFLP has been (painstakingly) modified to use source aliasing wherever possible. The default dUFLP source alias is "dUFLP". This means that in order to use code in this version of the dUFLP, you need to create a new source alias in dBASE PLUS, named "dUFLP", and pointing to wherever you installed this library of code.


Installed to: c:\dUFLP
Start dBASE Plus
Select the Properties menu
Select the "Desktop Properties" menu
Select the "Source Alias" tab
In the "Alias" entryfield at the bottom, enter
Select the path so that it points to:
Click on the "Add" button
Click on "OK" or "Apply"

That's it. From that point on, your code will work properly for the dUFLP source alias.

** Note, it's possible I missed an alias somewhere, if you find one, please drop me a note ...

Another method, starting with version dUFLPdB2KH of this library, is to run the program SetupSourceAlias.prg from the folder that you want the source alias for dUFLP to be pointing to. The program will handle making the change for you in the PLUS.ini file.

Also note, that at this time, Source Aliasing doesn't work for #INCLUDE and other pre-processor functionality, which makes sense as these are "pre-processor" -- they take effect before the regular processing occurs. R&D at dBASE, Inc. is aware of this, and may change this at some point, so that pre-processor functionality works with source aliasing, but not yet.

In addition to the above, you may call programs in the dUFLP library from your own code using the source alias in the following fashion:

   do :dUFLP:someprogram
   do :dUFLP:someform.wfm
   set procedure to :dUFLP:someclass.cc additive


Yes, you can use DEO (Dynamic External Objects) with these files. However, if you do not deploy all related files (example below) to somewhere in your DEO path structure, then your application will not be able to run. The Source Aliasing is IGNORED in a compiled executable ...

An example:
You want to deploy an application using INI.CC. You include INI.CC in one of the folders defined by a DEO path. You run the application but when it starts, it complains that it can't find:


That's because Source Aliases are ignored in the runtime environment, and it sees this as a path to a non-existant file. Even if the machine your are testing this on has the Source Alias "dUFLP", it will be ignored. What you need to do is copy the file "SetProc.prg" to one of the folders defined by a DEO path (see online help for more details on this). In addition, you will want to deploy to one of these paths the file StringEx.cc.

To assist, the heading comments of most or all of the source files in the dUFLP library should list all files that they use and should be deployed.

Visual dBASE, dB2K, dBASE SE and dBASE Plus
are registered trademarks(tm) of dBASE Inc.

Contributors to the Library

Please read CONTRIB.TXT and DHUNG2.TXT for details. This is very important to all of us. Thank you.


All code in this library is public domain. We ask that if you use any of these routines with your systems, you include in your source code ALL of the header at the beginning of each routine, including (ESPECIALLY) the name of the programmer (Credit should go where it's due, after all). 

Where to find updates to this library

Updates are published whenever I can get around to it. Life being busy, hectic, and uncertain at the best of times ... It can be found at:


OR see the dBASE, Inc. website in the knowledgebase, as well as the CD for your product if you have purchased Visual dBASE 7.5, dB2K, dBASE SE or dBASE Plus.

This of course assumes that I haven't changed my internet service provider, but at the time of the latest modifications to this file, this site is correct.

In the dBASE, Inc. Knowledgebase (on the website, and when a new release of dBASE ships, on the dBASE CD).

In all cases, the name of the file should be DUFLPPLUS_x.EXE where 'x' is a letter. (I.e., the first version of this library would be dUFLPPLUS_A.exe) (Versions before dBASE Plus was released were named differently, such as dUFLPdB2Kx.exe)

NOTE: WHATS.NEW (a text file in this library) -- describes (hopefully) the additions and/or updates to the library from the previous release ...

Also run the form LIBRARY.WFM for details on what is available in the library (this is searcheable) ...

How to Reach the Librarian

This is a set of dynamic files -- they're always changing. Please feel free to send me comments and/or suggestions on ways to better it (which includes new code, and suggestions to make the code here better). Try the following email address (this is current as of this posting of the library): ken@goldenstag.net

If you have problems with the code here, please attempt to contact the author (not the librarian), or use the dBASE, Inc. FREE newsgroups, specifically the dbase.codelib newsgroup.


This library of code is provided "as is" -- no guarantees are implied that it will work for any specific situation, and the author(s) and librarian are not responsible for any data-loss incurred by the use of code contained in this library. (In addition, the librarian has not tested all of the code in this library to ensure functionality.)


Problems with individual classes and/or methods of classes should be addressed, if possible, to the author (note the 'Programmers' listed in the internal documentation for each routine). If you cannot reach them, contact the librarian as noted above and he will see what he can do, or post a query in the Visual dBASE newsgroups. The author may be visiting the newsgroups on a regular basis (hopefully) and you can get help from them there. NOTE: Please do not use an author's name in the subject of a message posted in the newsgroups -- instead mention the routine you are having problems with ...

You can also ask for assistance in the dBASE.codelib newsgroup provided by dBASE Inc.


The instructions for these custom classes are in the headers of each class.

In the case of the Non-UI classes, you should instantiate the class, and when done using it, you should issue the explicit release() method for these classes. The release method for these will release any other classes that were loaded when you created an instance of the first. As an example, the Table class will load an instance of the FileEx class, and the Index class. The release method will handle releasing these instances, unless they had already been instantiated.

        oTable = NULL   // releases the object reference,
                        // but leaves the property "Table"
                        // set to "NULL" ... no way to completely
                        // remove it, but at least the reference
                        // is gone.

In addition, detailed instructions for each method in the Non-UI classes are given in the headers for each of the methods.

In the case of the UI classes, the .CC file contains a set of related classes. Check the instructions in the header for what is there, and instructions in the header for each class on how to use that class.

In all cases, check the header of the files for instructions, I have attempted to include any instructions that I can, based either on author feedback, or having tinkered with the files myself ... -- KJM


*** A method of seeing *all* objects and classes in the library is to double-click on the LIBRARY.WFM file in the Navigator, or type in the Command Window:   DO LIBRARY.WFM

This form accesses the table "LIBRARY.DBF" ... it is a "read-only" form, but allows you to view descriptions of each object, method, program, form, etc. in the library.

Note that the listing that used to be contained in this document has been removed. This is to avoid having to try to keep information in more than one location -- use the LIBRARY form noted above to find a specific routine, control, etc.


The dBASE Developers Bulletin (a free online developer's newsletter, updated when enough articles are available, and the 'publisher' has time to get it out the door ...) is available from a few sites world-wide:

Canada http://pages.infinit.net/jpmartel/bulletin.html
France http://www.fghoche.com/dbulletin/bulletin.html
Sweden http://www.sakia.se/dbulletin/bulletin.html
United States http://www.staubassociates.com/dbase/bulletin.html


dBASE, Inc. has a set of technical support news groups. For details on these you should use the dBASE, Inc. web site. The newsgroups are at news.dbase.com

Note that most, or all, of these web pages can be found via the dBASE Webring hosted by Francois ...   

Michael Nuwer's Tutorials Michael Nuwer is updating tutorials, and adding items for tutorials at his own website, you may want to try to keep up with these at:

There is a "Hands-on project" designed to reinforce your skills: http://www.chelseadata.ca/dLearn/tutorial/HandsonIndex.html

There are three Tutorial add-ons designed to add features to the Tutorial application: http://www.chelseadata.ca/dLearn/tutorial/Session11.html

And there is a "Case Study" designed to move beyond the Tutorial: http://www.chelseadata.ca/dLearn/misc/DiveShop.html

Please note: For assistance with these, as well as the dBASE Tutorial(s) in the Knowledgebase, please use the dbase.getting-started newsgroup ...
Francois Ghoche Some of this is in French, but Francois' English is very good, and he does have some of it in English.

In addition to his own dBASE pages, Francois is the driving force behind the dBASE Webring.  Details can be gotten at his site. You are encouraged to join:

Some of the websites listed here should be on this ring now, and hopefully more will be joining it ...


dBVIPS member pages

Romain Strieff  
Dan Howard Lots of code and such here ...
Jim Sare  

Former dBASE TeamBer Web Pages:

Ken Mayer

(see also http://www.goldenstag.net/dbase)

Ken Mayer -- Golden Stag Productions Some source code ... (some of it is fairly esoteric, but it's useful for the situations it was designed ...)


Special Thanks

To dBVIPS and dBASE TeamB members (past and present) for specific assistance/advice (not to mention code):

Romain Strieff (dBVIPS -- TeamB (JBuilder))
Paul Franks (dBVIPS -- TeamB (JBuilder))
Geoff Wass (dBVIPS)
Dan Howard (dBVIPS)
Peter Rorlick (dBVIPS)
Todd Kreuter (dBVIPS)
Marko Mihorko (dBVIPS)
Jim Sare (dBVIPS -- TeamB emeritus)
Alan Katz (TeamB emeritus -- CEO of dBASE, Inc.)
Bowen Moursund (TeamB emeritus -- VP of Online Resources for dBASE, Inc.)
Ken Mayer (TeamB emeritus -- now an employee of dBASE, Inc.)
Jay Parsons (TeamB emeritus -- retired)
Angus Scott-Fleming (TeamB emeritus -- retired)
Keith Chuvala (TeamB emeritus -- retired)
Ken Chan (TeamB emeritus -- employee of Inprise/borland.com)
Marilyn Price (TeamB emeritus -- retired)
David Love (TeamB emeritus -- retired)
Rachel Holmen (TeamB emeritus -- retired)
Gary Thoenen (TeamB and dBVIPS emeritus -- retired)
Gary White (dBVIPS emeritus -- retired)

Finally, to all those who have donated code to the library over the years -- without you, this library wouldn't exist, and wouldn't have evolved ...