================================================================================ From: kcochran@nyx10.cs.du.edu (Keith "Justified And Ancient" Cochran) Newsgroups: comp.databases.xbase.fox,comp.answers,news.answers Subject: FoxPro Databases FAQ #0: Welcome To The Machine Followup-To: comp.databases.xbase.fox Date: 29 Aug 1994 15:22:18 -0600 Message-ID: <33tjia$18k@nyx10.cs.du.edu> Archive-name: databases/foxpro/hello Posting-frequency: Every two weeks to c.d.x.f, monthly to c.a and n.a [This is FAQ version 1.0.0.0 - Last Updated 06/02/94. New sections or altered text are marked with ">" in the left hand column. Please send all questions, comments, and whatnot to kcochran@nyx.cs.du.edu] I'd like to express my deepest gratitude to Peter Kruckenberg for putting together the original of this FAQ. ============== FoxPro FAQ #0: Welcome To the Machine =============== HOW TO POST TO COMP.DATABASES.XBASE.FOX: A quick guide to USENET etiquette INTRODUCTION Thank you for taking a minute (OK, a few minutes) to read this. In order to make this newsgroup an effective source of information for FoxPro users and programmers, this brief list of guidelines has been compiled. It will be well worth your time to read it, and to help make others aware of it. This document is in the public domain, so please quote from it, publish it, or whatever you need to do to make everyone in this newsgroup aware of its contents. If you have suggestions or corrections to make to this document, please send them to kcochran@nyx.cs.du.edu. WHAT TO DO IF YOU'RE NEW TO THE NET First, spend a few minutes of time acquainting yourself with the newsreader you're using, particulary the commands to subscribe to a newsgroup, to post a new or follow-up article, and to search through article headers. The few minutes it takes to learn these commands will help to make USENET a much more enjoyable experience for you and others. You should take some time to subscribe to and read the newsgroups news.answers and news.announce.newusers. These two groups contain a wealth of information on newsgroups and etiquette. This might take a few hours, but again, its well worth the time. WHAT IS COMP.DATABASES.XBASE.FOX (C.D.X.F)? The newsgroup comp.databases.xbase.fox is a forum for anyone who is interested in the FoxPro database management system (for more information on what FoxPro is, please read the c.d.x.fox Frequently Asked Questions list, posted here monthly, or available via anonymous FTP from ftp.rahul.net as pub/coneill/foxfaq.zip). The newsgroup is presently unmoderated, meaning that anyone can post anything without any type of moderation being done. This means that posting is very simple and quick, but that it can result in many posts which are difficult to understand, are repeatedly-asked questions, or have nothing to do with FoxPro. Please read on for information about how this can be avoided. HOW TO PREPARE FOR POSTING TO THE NEWSGROUP The beauty and power of the USENET newsgroups is that they are available to everyone at little or no cost (depending on who provides your Internet access). Presently, there are very few people who are paid to contribute to the newsgroups. This means that the answers you get are coming from people just like you. This doesn't mean that you shouldn't use the newsgroup as your primary source of help for FoxPro questions; just that you should be careful not to waste other people's time. If you can, try to find the answer yourself, using the sources listed below. But don't feel that your questions are not worth the attention of the rest of the newsgroup readers; there are probably many other readers who are having or will have the same question you have. Here are some possible sources for answers to your questions. Some of them are interesting reading even if you don't have questions, and will help acquaint you with some of the powerful features FoxPro has to offer: The FoxPro manuals. They have excellent indices if you don't know exactly which page to look on. The manuals are also on-line in all versions of FoxPro on every platform, and are organized by topic with links between related topics. Many of your questions can be answered right in the manuals (surprise, surprise!). However, the manuals are not always clear, and many parts are difficult even for experienced FoxPro users, so if you aren't able to find your answer in the manuals, please use the newsgroup! The Frequently Asked Questions (several parts) list from this newsgroup. This document contains answers to most of the questions that come up more than a few times here, or are considered to be of general inter- est to FoxPro users. The FoxPro FAQ is posted here (c.d.x.f) and to news.answers monthly, and is available from ftp.rahul.net as pub/coneill/foxfaq.zip, or from rtfm.mit.edu. You may also send email to the FAQ administrator at kcochran@nyx.cs.du.edu to request a copy. Every reader of the newsgroup owes it to him/herself to read this document, just to be aware of what questions have already been asked and answered here on the newsgroup. The Microsoft FoxPro KnowledgeBase, available from ftp.microsoft.com in the directory /developer/devtools/fox/kb (get the README.TXT file for information on how to access the KnowledgeBase). A .DBF-format version is available as /developer/devtools/fox/FOXPRO.EXE. The KnowledgeBase is what Microsoft uses to answer most questions on the tech-support lines, and you can access that same information for free! If you do find something in the KB that solves a problem you're having, there are probably many readers who would like to see a summary of the problem and the solution you find. HOW DO YOU FORMULATE AN EFFECTIVE POST? If you've followed the newsgroup regularly, you've probably already seen some good examples of both how TO and how NOT to post. For those of you who are new (and maybe some of you who are not so new), here are some guidelines that will help to get the answer you need. The Subject Most people will decide to read your post simply from the subject you choose. It is in your best interest to choose a subject that is pertinent and useful to the reader. Subjects such as "HELP: New user" give the reader absolutely no information about what your post is, and give lots of information about who the poster is. A subject like "[Q] How to optimize queries" tells in a few words that the post is a question, and summarizes what the question is about. Some good words to start your post with are: [Q]: A how-to type question Request: A where-is or how-do-I-get type question Summary: A summary of information of interest to the newsgroup This could be a compilation of answers to a question Announcement: News on new products, company news, uploaded files, bug fixes, etc Discussion: A question/topic of a more general nature than [Q]. If you have room, please try to fit the FoxPro platform and version number (including any patch level if applicable) in the subject. The Body The body of your message should be concise, but give enough information to help a reader answer your question. Posts that say "Problem with xxx - how do I fix" will not generally result in answers you can use. Posts that include a short description of the problem, relevant table/index structures and code, and the results of different attempts that have failed will almost always yield many useful suggestions. Be sure to state the platform (DOS, Windows, Mac, etc) and complete version (including patch level) in your post. Many times problems you're having may have fixes in a patch release or upgrade. When writing your post, keep in mind that this is an international forum, and though you don't have to translate to every language, you should try to write in clear English without using any region-specific idioms or jargon (except FoxPro jargon, of course). If you're posting a follow-up to another article, please quote enough of the previous article to provide a reader with an understanding of what you are answering, but try not to quote extensively. Follow-up posts can become extremely long and difficult to read when unnecessary parts of previous posts are quoted. As I've stated above, all of the people who answer your questions are doing so (solely) to contribute to the newsgroup. For this reason, posts that ask people to email results are taboo. There are many people who are interested in both answering and reading the answers to your post, and to remove that by asking that answers be emailed defeats the purpose of the newsgroup. If you don't have time to read the newsgroup, please don't waste our time, either. CONCLUSION The newsgroup is starting to get a lot of traffic, and there are several very knowledgeable FoxPro users who frequent the group. Let's make this newsgroup a beneficial source of information for everyone who wants to use it! This message is split into the following sections: 0.0 - What is an FAQ? 0.1 - What is comp.databases.xbase.fox? 0.2 - What is FoxPro? 0.2.1 - What are FoxBase, FoxBase+, and the rest? 0.3 - How do I get information? 0.3.1 - What other FAQ's are available? 1.0 - I just bought FoxPro; now what? 1.1 - The FoxPro books. 1.2 - Third-Party books. 1.3 - Database and FoxPro magazines. 1.4 - MicroSoft technical support. 1.5 - FTP locations. 1.6 - Other locations for information. 2.0 - What are the parts of FoxPro? 2.1 - The Developers kit. 2.2 - The Distribution kit. 2.3 - The Library Construction kit. 2.4 - The Connectivity kit. 2.5 - FoxPro 2.6 "Standard Edition"/"Professional Edition" 3.0 - I'm having a problem... 3.1 - Problems of "general" nature. 3.2 - Problems of "specific" nature. 3.3 - Problems with third-party add-ins. [Note: Users have requested that we compile a "standard problem - solution" list for inclusion in this section. I'll be keeping that as a seperate FAQ.] [Note: Sections are split with "******".] Before we begin, I'd like to thank the following people not already mentioned in the FAQ for their assistance in putting this together: 1092143@MAINE.maine.edu (Donna Foster) blank@silver.ucs.indiana.edu (Doug Blank) davec@wsti.demon.co.uk (David Churcher) Garrett@heidi.demon.co.uk (Garrett Trant) kruckenb@sal.cs.utah.edu (Pete Kruckenberg) OB71216@IBMH1.ORL.MMC.COM (Steve) pgoudswa@etc.cln.bc.ca (Peter Goudswaard) peace@world.std.com (Jeremy Stark) russel@atl.sofkin.ca (Paul Russell) tdh@dweebus.telemax.com (Thomas D. Halter) tonemb@mtfs.unit.no (Tone Merethe Berg) ****** 0.0 - What is an FAQ? FAQ is short for "Frequently-asked-questions". Over the course of the net, especially in the technical areas, a lot of questions get asked over and over and over ("How do I get my foo to bar in green instead of red?"). These questions get collected into a single message that is then posted to the newsgroup at regular intervals (usually about once a month). In the case of c.d.x.f, there are about a half-dozen FAQ's floating around in various stages. As I get approval to archive these at rtfm.mit.edu and rahul.net, I'll be including them in my postings. FAQ's also tend to have a lot of background information about the newsgroup in question, information about the newsgroup, historical persons important to the newsgroup, and I've even seen some that have court cases in them. Basically, FAQ's are a lot of things for a lot of different people. If you have an idea for an FAQ, write it up and mail it to me at kcochran@nyx.cs.du.edu. I'll be more than happy to maintain the FAQ for you or to accept updates as needed. You, of course, would receive full credit for authorship. ****** 0.1 - What is comp.databases.xbase.fox? comp.databases.xbase.fox (or c.d.x.f for short) is a newsgroup for discussion about the Fox database management packages. Technical questions about Rushmore, the power tools, FoxBase, and other issues are all relevant to c.d.x.f. General questions that relate specifically to FoxPro or the related products (NetLib, dGE, etc) or technical questions about these items are certainly relevant to the newsgroup. General questions about databases in general (I'm looking for a good database package; How do I normalize my tables) should probably be addressed in either comp.databases.xbase.misc or comp.databases.misc. If you have a question of a general nature, you should also look around the newsgroups list to see if there isn't a more relevant group. c.d.x.f is not an advocacy group; please do not start discussions about whether your Mac is better than the next guys IBM box. Also, you should avoid general slamming of products. A conversation about the differences between the FoxPro and Paradox screen builders would be extremly informative; a post stating that "Paradox Sucks" is in poor taste. ****** 0.2.1 - What are Foxbase, Foxbase+, and those other things? The Fox database management packages are available for many different operating systems and environments. The various packages are: Microsoft: FoxPro 2.5 (DOS) FoxPro 2.5 (Windows) FoxPro 2.5 (Macintosh) FoxPro 2.6 "Standard Edition" (DOS) FoxPro 2.6 "Professional Edition" (DOS) FoxPro 2.6 "Standard Edition" (Windows) FoxPro 2.6 "Professional Edition" (Windows) FoxPro 2.6 "Standard Edition" (Macintosh) FoxPro 2.6 "Professional Edition" (Macintosh) FoxPro 2.5 (Unix, to be released in 1994) [Anybody know if this is going to be 2.5 or 2.6? Is there going go be the Standard/Professional split?] Fox Software*: FoxBASE+ (DOS) FoxBASE+ (Macintosh) FoxPro 1.1 (DOS) FoxPro 2.0 (DOS) SCO (Santa Cruz Operation): SCO FoxBASE+ (Unix) *Fox Software has been bought by Microsoft. Their products are no longer available, but are included here since many of their products are still in use. ****** 0.3 - How do I get information? This depends on what sort of information you need. One of the best places to get information is from the manuals. If they don't give you what you want, there are a wide variety of magazines, books, FTP sites, and comp.* groups that may be able to provide you with the information you need. ****** 0.3.1 - What other FAQ's are there? Welcome To The Machine (FAQ #0, archived at rtfm.edu under databases/foxpro/hello) This FAQ contains a quick introduction to usenet etiquette, pointers on how to compose posts, and pointers to some additional newsgroups where you may be able to find information. Originally written by Pete Kruckenberg, and maintened by Keith Cochran. You Say You Want A Revolution: (FAQ #1, archived at rtfm.edu under databases/foxpro/general) This FAQ contains information of a general nature about c.d.x.f It also contains address information for Microsoft, third-party books about the Fox database management products, how to get information from Microsoft, compuserve, and information about FTP. See Fox. See Fox Run. Run, Fox, Run: (FAQ #2, archived at rtfm.edu under databases/foxpro/rushmore) This FAQ contains information of both a general and a specific nature about the Rushmore technology. Things Your Mamma Never Told You About: (FAQ #3, archived at rtfm.edu under databases/foxpro/misc) This FAQ contains information about functions and commands in FoxPro that "should" do something, but "don't", and those commands that "shouldn't" do something, but "do". Variations On A Theme: (FAQ #4, currently in "development" stage) I'm still collecting information on other database packages vs FoxPro for this FAQ. If you have anything, contact me at kcochran@nyx.cs.du.edu. Don't bother asking for this FAQ. WHERE resource = onthenet > (FAQ #5, archived at rtfm.edu under databases/foxpro/resource) This FAQ contains an exhaustive listing of FoxPro resources available through the net. FTP sites, mailing lists, and newsgroups are all covered. I'd like to extend my deepest gratitude to Pete Kruckenberg (kruckenb@sal.cs.utah.edu) for developing this listing. SET LIBRARY TO (FAQ #6, currently in "development" stage) This FAQ contains information on third-party add-ons for FoxPro such as the FoxFire! report writer, or the GPLib shareware Netware library. If you'd like to include your favorite add-in, mail a short description along with the address/phone of the company to kcochran@nyx.cs.du.edu. ****** 1.0 - I just bought FoxPro; now what? The *FIRST THING TO DO* is to fill our your registration card, and mail it off to Microsoft. This will give you the ability to call Microsoft Technical Support with your problems. Calling Microsoft support is a mixed blessing. It may get your question answered, but you may have no hair left by the time it works. Then again, MicroSoft support is _the place_ to make sure that you are not working against a program bug. ****** 1.1 - The FoxPro books. One of the best places to find information is within the FoxPro books that you got when you brought your package. The Language Reference Manual is the first place you should look when a command doesn't work the way you expected it to. The Developer's Guide also has a lot of information on things that they don't really mention in the language reference. If you are having problems getting your procedures to work correctly in your screens, try taking a look there. ****** 1.2 - Third-Party books. There are many, many books on how to develop and program in FoxPro. Some of the ones you may find useful are: [Note: Your milage may vary.] peace@world.std.com (Jeremy Stark) recommends: "FoxPro 2.5 Developing Full-Scale Applications For Windows" Written by Nelson King, and published by MIS:Press. "It's actually a beginners book and includes sections on table normalization, project planning, and other topics related to the consulting end of database design." It comes with a disk, costs $34.95, and also has a cute fox on the cover. pgoudswa@etc.cln.bc.ca (Peter Goudswaard) recommends: "FoxPro 2.5 - Programmer's Reference" by John Hawkins, Editor-In-Chief of Data-Based Advisor Magazine, published by Que, ISBN 1-56529-210-3. "Programming FoxPro 2.5" by Miriam Liskin, by Ziff-Davis Press, ISBN 1-56276-164-1. tonemb@mtfs.unit.no (Tone Merethe Berg) Recommends: Using FoxPro 2.5 for Windows, by Lisa Slater and Steven Arnott. ISBN 1-56529-002-X. "This is an excellent book for people like me, starting close to zero, as well as for some like me, getting closer to 'experienced'. As for you guru's, I guess it isn't too bad, either." FoxPro 2.5 Advanced Developers Handbook. Brady Publishing, 1993. ISBN 0-13-325341-4. According to the author, it includes "undocumented secrets, strategies, and tips from the experts, and is especially written for those developing applications for a network. Data security and corruption protection, as well as error-handling, user-interfaces, UDF-creation and other programming techniques are main chapters." ****** 1.3 - Database and FoxPro magazines. In addition to the books available, there are several magazines that deal with xbase products, and some that deal exclusivly with FoxPro. FoxPro Advisor: Advisor Communications International, Inc. (The same people that do Data Based Advisor, Clipper Advisor, dBase Advisor and Access Advisor). Published monthly. $4.95/issue, or yearly subscription for $65.00 FoxPro Advisor Subscription Dept PO Box 469032 Escondido CA 92046 (800) 336-6060 FoxTalk Magazine: FoxTalk Pinnacle Publishing, Inc. PO Box 888 Kent, WA 98035-0888 COMPUSERVE Address: 72600,140 Editorial Hotline: (800) 788-1900 BBS (2400) (206) 251-6217 BBS (9600) (206) 251-6218 As of March, 1993 the numbers for Pinnacle Publishing are: Pinnacle Publishing 18000 72nd Avenue South Suite 217 Kent, WA 98032 Shipping and Receiving: 18030 72nd Avenue South Kent, WA 98032 Mailing Address: PO Box 888 Kent, WA 98035-0888 Phone Numbers: General Line: (206) 251-1900 (Weekdays 8am - 5pm PACIFIC time) Sales: (800) 788-1900 Fax: (206) 251-5057 Tech Support: (206) 251-3513 (Weekdays 8am - 5pm PACIFIC time) BBS: (206) 251-6218 (9600 Baud) (206) 251-6217 (2400 Baud) They can also be reached on Compuserve by GO PINNACLE. ****** 1.4 - Microsoft technical support. Microsoft technical support is available from 6am to 6pm pacific time monday through friday, except for holidays. In the US, call: (206) 635-7191 (FoxPro/DOS and FoxPro/Windows) (206) 635-7192 (FoxPro/Macintosh) In Canada, support engineers are available at (905) 568-3503. Microsoft FastTips is available 24 hours a day, 7 days a week at (800) 936-4300 with a touch-tone phone. You can receive automated answers to common questions and problems, or access a library of technical notes, all delivered by recording or fax. Microsoft can also be reached via compuserve. Their "wish line" on the net is foxwish@microsoft.com ****** 1.5 - FTP locations. You can FTP anonymously to microsoft.com, and look in the directory /developer/devtools/fox for support and patch files, upgrade information, and other stuff. The IP address is 198.105.232.1 There is also an FTP site at rahul.net, in the /pub/coneill/ directory. The IP address is 192.160.13.1 This FTP site contains lots of useful information, including GENSCRNX and GENMENUX. ****** 1.6 - Other sources of information. COMPUSERVE: At any ! prompt, type "go microsoft" to access the Microsoft forums, "go mskb" to access the Microsoft Knowledge Base, or "go foxforum" to access FoxPro specific information. There is an existing FoxPro mailing list: To subscribe to the FoxPro mailing list, send the following in a mail message to fileserv@polarbear.rankin-inlet.nt.ca: JOIN FOXPRO-I kcochran@nyx.cs.du.edu QUIT [Note that you would use your e-mail address to subscribe, not mine.] [Note: That's "I" as in "GHIJ", not "1" as in "1234". You can also get a digest version of the list by doing a JOIN FOXPRO-D instead of JOIN FOXPRO-I. The list is archived at rahul.net, in the /pub/coneill directory. To get help for this mailing list, send email to foxpro-help@polarbear.rankin-inlet.nt.ca. The subject and message are unimportant. You can also contact the list administrator at coneill@polarbear.rankin-inlet.nt.ca. Responses may take 48-72 hours because polarbear is on a daily dial-up connection. And there may be a second list forming: foxpro-l@ukanvm.cc.ukans.edu For information on subscribing, send email to LISTSERV@UKANVM.BITNET with "HELP" as the first word of the message to receive a help file. If anybody has any additional information on mailing lists or FTP sites, please contact me. The BCNN FoxPro electronic newsletter is published monthly in comp.databases.xbase.fox. The newsletter is archived at ftp.rahul.com as bcnn*.zip. Subscriptions are free, and the information on how to subscribe is included at the bottom of each newsletter. ****** 2.0 - What are the parts of FoxPro? There are many different parts to FoxPro, even within FoxPro itself. Just because you have a compiled application doesn't mean that it will work correctly. For example, if your application uses printer drivers, then you will have to include genpd.app as part of your project. Some of the other external parts of FoxPro are: genscrn.prg - Generates your .spr file from the screen database. genmenu.prg - Generates your .mpr file from the menu database. beautify.app - Used to beautify applications brought over from other platforms. It is not yet available for the DOS platform. foxdoc.app - Documentation generator. This is known as foxdoc.exe in the DOS platform. gengraph.app - Graph generator. spellchk.app - Spell checker. genxtab.prg - Generation cross-tabulations from a database. transport.prg - Used to migrate applications across platforms. ****** 2.1 - The Developers kit. This is the "best known" of the FoxPro parts. This the set that gives you the "command window", and allows you to create applications, databases, compile them, etc. ****** 2.2 - The Distribution kit. In order to run a FoxPro application, you have to have FoxPro, right? Wrong. Instead of forcing everybody to spend the $$$ to buy the development kit just so they can run their accounting software, you can purchase the Distribution Kit. The distribution kit allows you to distribute and run an application without providing the full FoxPro interface (command window, filer, etc). This distribution is done ROYALTY-FREE. Once you have brought the distribution kit, and compiled your executable, you do not have to pay MicroSoft anything in order to sell your application to another person. Note that the Distribution Kit does not actually compile your FoxPro code into machine language. Instead, it produces an .EXE file containing a copy of the FoxPro interpreter and your program compiled into pseudo-code. ****** 2.3 - The Library Construction kit. Found something that FoxPro won't do? Want it to be able to do it? Purchase the Library Construction kit, and teach FoxPro new tricks! The LCK allows you to write your own functions in C, and then link them into FoxPro as a .plb file. The functions have _NONE_ of the limitations of .bin files (used by LOAD and CALL), and can take full advantage of FoxPro's memory management, windowed i/o, and other features. You can even call FoxPro commands from within your external function. The LCK covers DOS and Windows platforms (Windows files have the extension .fll instead of .plb). A C compiler is not included. The supported C compilers are Microsoft C v8 and Watcom C v8.5. It is possible to use Borland C++ v3.1 to produce Windows .FLL files, but this is not officially supported. ****** 2.4 - The Connectivity kit. What's that? Human Resources has 10 years of information stored on the server in SYBASE format, and they want you to analyze it? With the connectivity kit, this is no problem. Just attach to the server, log yourself into the database, and start analyzing. The connectivity kit comes in two "flavors". DOS and Windows. The DOS version is a .plb file that allows you to attach to Sybase and Oracle servers. No other servers are supported. The Windows .fll driver allows you to connect via ODBC to a wide range of database servers. In order to use the Windows version, you must also buy the ODBC Desktop Drivers from Microsoft. Data access is performed by using a CK function to register yourself to your data source, and then using other CK functions to pass and retrieve SQL statements to the server. ***** 2.5 - FoxPro 2.6 "Standard Edition"/"Professional Edition" Versions of FoxPro prior to 2.6 came in many different "sections" (described above). FoxPro/MAC 2.5, and FoxPro/DOS 2.6, and FoxPro/Windows 2.6 only come in two "flavors". These are: Standard Edition: This contains what used to be called the Development Kit. Professional Edition: This contains: Development Kit Distribution Kit Library Construction Kit Connectivity Kit Windows for WorkGroups Extensions (FP/WIN only) Also, the "Standard Edition" and "Professional Edition" only come as one license/package. No bundling. ****** 3.0 - I'm having a problem... Join the club. Fortunatly, the kind folks of c.d.x.f will be more than happy to help solve your FoxPro problems. SOME RULES TO MAKE YOUR LIFE EASIER: (1)Please be sure to mention what VERSION and ENVIRONMENT of Fox* you are using. Some of the things you can do in FoxPro 2.5 will not work at all under FoxBase+, or on the Unix flavors. (2)Please be sure to mention anything odd that you are doing. Specifically, .plb files and SQL tends to cause "strange" things to happen. If you have the files in a project, please be sure to mention that. If you are using the distribution kit, and the problem only appears when you are running it under the distribution kit, please mention that. IF YOU ARE MIGRATING AN APPLICATION FROM ANOTHER XBASE PRODUCT, MENTION IT! (3)Do _NOT_ end your question with "Please e-mail me the answer, as I don't read this newsgroup". I mention this for a couple of reasons: (1)Not everybody has the ability to cc: people on postings. The problem you are having may be the same problem that many other people are having. (2)The problem that I have next week is something that you might be able to solve for me in an instant. I don't think it's really fair for you to get help from us if we have no chance of getting help from you. ****** 3.1 - Problems of "general" nature. These problems are generally of a "how do I..." nature, and are probably most quickly solved by reading the manual. I cannot emphasis enough that the manuals and on-line help should be your first defense against problems. For example, we recently had a poster ask "how do I generate a random number between x and y?" This problem can be solved by looking at the RAND() function in the Language Reference Manual. ****** 3.2 - Problems of "specific" nature. If you've got specific problems, please be sure provide enough detail with your post to allow us to help you. Code samples are always nice, as is a short (or long) description of what it is you are trying to do. If you have databases linked with SET RELATION, please be sure to mention this. ****** 3.3 - Problems with third-party add-ins. Probably the best place to solve problems with .plb files is with the company that produces it. But you may be able to get better response by fishing in c.d.x.f ****** 4.0 What is an "optimizable expression"? An optimizable expression is any expression that Rushmore can attempt to use. How well Rushmore can work with the expression determines if the expression is fully, partially, or non-optimizable. All of the examples used up to now were either fully optimizable, or non optimizable. Expressions that may be partially optimizable generally take the format of: LOCATE FOR lname = "Cochran" AND ssn = 987654321 ****** 4.1 Fully optimizable expressions. In order for our last LOCATE statement to be fully optimizable, we would have to: INDEX ON lname TAG lname INDEX ON ssn TAG ssn This is the "best" solution, and will allow Rushmore to find the records the fastest. ****** 4.2 Partially optimizable expressions. If we had the index on ssn, but no index on lname, then our expression would partially optimizable. Rushmore would activate to locate the records which matched our ssn, and then treat the rest of the expression as a non-optimizable search. Note that Rushmore is smart enough that it will solve for the optimizable portions first, and then perform the rest of the search on the subset of records it already has. ****** 4.3 Non-optimizable expressions. A non-optimizable expression is one that Rushmore can't help. You want to avoid these expressions in all but the most extreme cases. The reason is that FoxPro will search every record in the database, starting at RECNO() = 1. ****** 5.0 Rushmore and the SEEK statement. Basically, the SEEK statement, and the SEEK() function don't interact with Rushmore at all. This can be both a blessing and a curse. For simple indexes, you can get faster results out of SEEK than you can out of Rushmore. But SEEK will not allow you to search on multiple fields... 5.1 Rushmore and the LOCATE and SCAN statements. Rushmore will almost always speed up your queries when using LOCATE FOR or SCAN FOR statements. To get the best use of Rushmore in these statements, you should build simple indexes on the fields you will most often search through. 5.2 Rushmore and the SET ORDER TO statement. [Many thanks to Evan Simpson (evan@access.digex.net) for helping clear up a misconception about the SET ORDER TO statement for me.] (1)The speed of the search will be slower. This is true whether you are using Rushmore or not. (2)The first record Rushmore locates (i.e. LOCATE FOR foo = "bar") will be the lowest numbered record in the database [RECNO()] that matches the search criteria, regardless of the SET ORDER TO clause. For example, let's assume we have: RECNO() FOO BAR 1 AAA BBB 2 AAA CCC 3 AAA DDD 4 AAA CCC If you: SET ORDER TO BAR LOCATE FOR bar = "CCC" Rushmore will locate RECNO() 2, and then RECNO() 4. If you: SET ORDER TO bar LOCATE FOR foo = "AAA" Then Rushmore will locate records in the following order: RECNO() 1 RECNO() 2 RECNO() 4 RECNO() 3 Of course, you shouldn't program with this in mind, because Microsoft may change it in future releases. 5.3 Rushmore and the SET RELATION TO statement. Beware of attempting to use Rushmore along with SET RELATION. Due to the constraints of the SET RELATION statement, Rushmore will either not work at all, or will only work in very limited cases. 5.4 Rushmore and the SET DELETED statement. Rushmore can optimize a query for deleted() IF you index on deleted(). If your database contains a large number of deleted records, you can help Rushmore out by either indexing on deleted(), or by using the SET DELETED OFF statement before you invoke Rushmore. ************************************************************************* This FAQ assumes that you have anything from a passing knowledge of xBase languages in general to an intense knowledge of FoxPro event programming in C. Sections in this FAQ are seperated with "*****", but are not numbered, because the FAQ itself is in alphabetical order based on title. If you have discovered a new trick in FoxPro, feel free to submit it to me at kcochran@nyx.cs.du.edu. EDITORIAL DISCLAIMER: I have taken the liberty of editing the entries in this FAQ slightly. Mostly, I have reworded the occasional awkward sentence, and done such cosmetic changes as putting all FoxPro commands in ALL CAPS, reworded them into FoxPro format (i.e SELECT - SQL instead of an SQL SELECT statement), and other such stuff. POLICY DISCLAIMER: Most of the information in this FAQ is unsupported by Microsoft. I make no guarantees of any sort about the information contained in this FAQ. If you use something you find here and wind up clobbering all your data, it's your problem, not mine. WHAT'S IN THIS FAQ: Abnormal Program Termination in Extended FoxPro kruckenb@sal.cs.utah.edu (Joseph Kruckenberg) Diagonal Lines In FoxPro/Windows blank@silver.ucs.indiana.edu (Doug Blank) Generating Complex Indexes On Numeric Fields Getting Rid Of The Microsoft FoxPro Screen And Title Outer Joins In FoxPro davec@wsti.demon.co.uk (David Churcher) Source Code Wanted - Only Singles Need Apply martin@convext.csd.uwm.edu (Martin A. Miller) Unsupported Trick To Get Blank (Not Zero) Fields wsd@world.std.com (Rorschach) Writable SQL Cursors! lotridge@charlie.ccd.bnl.gov (Charlie Lotridge) ***** Abnormal Program Termination in Extended FoxPro kruckenb@sal.cs.utah.edu (Joseph Kruckenberg) So, you're running along in the Extended Version of FoxPro when all of a sudden you see: abnormal program termination: page fault. cs:eip=000ch:0007791fh (Note: cs:eip may point to pretty much anywhere. If you don't know 386 assembler, don't worry about what the numbers mean.) Now what? You can fire FoxPro back up and hope and pray that it doesn't happen again, or you can add the following line to your AUTOEXEC.BAT file: SET FOXPROX=-saveregs (Note: No spaces between the equals and minus signs.) This command tells FoxPro to preserve any registers in use and not to overwrite them while running (given the limited explanation I recieved). ***** Diagnoal Lines In FoxPro/Windows blank@silver.ucs.indiana.edu (Doug Blank) Is there any way to draw lines that are neither horizontal or vertical in FoxPro? I am trying to make line graphs from data without using Microsoft Graph. Any ideas? Yes, it is sad but true: you cannot draw a diagonal line. I did try dropping down to the windows API, and you can in fact draw any thing that you want in the fox window --- but Fox doesn't "know" about it. Therefore, if you close the window and reopen it your line is gone. Any time that you cover your line, it won't be redrawn. So, I finally ended up with the solution below. It does a pretty good job on arbitrary lines. You may have to adjust x and y dotsize. These parameters exist because of translation problems from real-valued points to screen coordinates (welcome to the world of GUI's!) To use, call with: =drawline(1,5,11,30,.T.) && to produce a color line from @ 1,5 to 11,30 or =drawline(1,5,11,30) && to produce a black line Using this method, you can draw circles, splines, etc. Put the function below in your program, or comment out the first line and place in a file named DRAWLINE.PRG. It's not real fast nor smooth, but it works. You probably can't make the line any thinner due to related problems with real-valued vs. screen coordinates, so pensize and penlength probaly can't be changed. You can change the RGB() funtion to make any colors you want, or even add a CASE statement to do them all, add shadows, etc. FUNCTION drawline PARAMETER x1,y1,x2,y2,color PRIVATE x,y,B,slope #DEFINE xdotsize (.2) #DEFINE ydotsize (.5) #DEFINE pensize (3) #DEFINE penlen (.7) IF m.y1 = m.y2 && vertical line IF x1 < x2 IF color @m.x1,m.y1 to m.x2,m.y1 pen pensize color ; RGB(0,255,0,255,255,255) style "T" ELSE @m.x1,m.y1 to m.x2,m.y1 pen pensize color ; RGB(255,0,255,255,255,255) style "T" ENDIF ELSE IF color @m.x2,m.y1 to m.x1,m.y1 pen pensize color ; RGB(0,255,0,255,255,255) style "T" ELSE @m.x2,m.y1 to m.x1,m.y1 pen pensize color ; RGB(255,0,255,255,255,255) style "T" ENDIF ENDIF ELSE m.slope = (m.x1 - m.x2)/(m.y1 - m.y2) m.B = m.x1 - (m.slope * m.y1) IF ABS((m.x1 - m.x2) / xdotsize) > ABS((m.y1 - m.y2) / ; ydotsize) FOR m.x = m.x1 TO m.x2 STEP xdotsize * ; IIF( m.x1 > m.x2, -1, 1) m.y = (m.x - m.B) / m.slope IF color @m.x,m.y to m.x,m.y+penlen pen ; pensize color RGB(0,255,0,255,255,255) ; style "T" ELSE @m.x,m.y to m.x,m.y+penlen pen ; pensize color RGB(255,0,255,255,255,255) ; style "T" ENDIF ENDFOR ELSE FOR m.y = m.y1 TO m.y2 STEP ydotsize * IIF( m.y1 > ; m.y2, -1, 1) m.x = (m.slope * m.y) + m.B IF color @m.x,m.y to m.x,m.y+penlen pen ; pensize color RGB(0,255,0,255,255,255); style "T" ELSE @m.x,m.y to m.x,m.y+penlen pen ; pensize color RGB(255,0,255,255,255,255) ; style "T" ENDIF ENDFOR ENDIF ENDIF RETURN ***** Generating Complex Indexes On Numeric Fields There's an interesting "feature" that the FoxPro manuals don't tell you about in the information on indexes. Let's say you have a database: ACCOUNT N(6,0) SSN N(9,0) On first glance, if you wanted to sort the database by social security number, and then account, you can just: INDEX ON SSN+ACCOUNT TAG myorder SET ORDER TO myorder This, of course, doesn't work. What happens is that FoxPro just adds the values together, causing: SSN = 076541111 ACCOUNT = 999999 (Key value = 77541110) To appear AFTER SSN = 076541122 ACCOUNT = 000333 (Key value = 76541455) Note: Microsoft assures me that this problem doesn't occur if you are working with N(x,y > 1) fields, date fields, or logical fields. What can you do to sort properly? There are several schools of thought: (1)You can add a digit after the decimal point. Microsoft assures me that this will solve the problem. (2)If you're working with fixed length fields, you can shift one set of digits over so that your math is correct. In the above example, you would want to: INDEX ON ssn*1000000+account TAG myorder (3)Convert the numerics into strings, and concatenate them: INDEX ON STR(ssn)+STR(account) TAG myorder or: INDEX ON TRANSFORM(ssn,"#########")+TRANSFORM(account,"######") TAG myorder ***** Getting Rid Of The Microsoft FoxPro Screen And Title The first thing to do if you're tired of seeing "Microsoft FoxPro" every time you start your application is to use the -T command line option to prevent it from showing up. This looks like this: FOX -T If you're using FoxPro/Windows or FoxPro/MAC, and want to get rid of the "Microsoft FoxPro" title in the bar of the main screen, you can do several things. After your application starts, you can MODIFY WINDOW ... TITLE "My Title" (Anybody know what the window's called?) and the window name will change to whatever your title is. You can also put the following line in your config.fpw/config.fpm file: Title=My Title Note the lack of quotes. This will cause the main window to be listed as "My Title" as soon as FoxPro starts up. For some reason, there are differences in the way this works depending on whether you are running your application from the development kit or the distribution kit. ***** Outer Joins In FoxPro davec@wsti.demon.co.uk (David Churcher) I give up, I RTFM (and I got FAQ'd) and did not find the syntax. Using the foxpro Select command, I wish to join two or more tables inclusivley. By this I mean : To join Table A and B, if there is no join then include the records from table A and place blanks in the fields from table B. In previous versions of foxpro I would have used "Set relation to" and it would have just happened. Oh no, it's the dreaded Left Outer Join! This is an SQL construct which FoxPro doesn't currently support, so you have to simulate it using a UNION of two selects: one for all the records with matches in table B, and one for all the records without. Here's an example: SELECT a.keyfield, ; a.datafield1, ; b.datafield2, ; b.datafield3 ; FROM a,b ; WHERE a.keyfield = b.keyfield ; UNION ; SELECT a.keyfield, ; a.datafield1, ; 000.00, ; 000.00 ; FROM a ; WHERE a.keyfield NOT IN ; (SELECT b.keyfield ; FROM b) Couple of points: 1. The numeric and string constants in the second SELECT (000.00 in this example) have to exactly match the length of the fields in the second database, because FoxPro requires both sides of a UNION to exactly the same structure. 2. SET RELATION TO and SET SKIP TO may be faster and easier if it's only a simple query. **** Source Code Wanted - Only Singles Need Apply martin@convext.csd.uwm.edu (Martin A. Miller) There are two companies who provide software to generate source code from compiled Fox* applications/programs. 1) Xitech Inc. Toledo, Ohio (407) 292-8629; FAX: (407) 292-8652 Product name: ReFox Restores FoxBASE, FoxBASE+, FoxPro 1.x, FoxPro 2.0, FoxPro 2.5 (including Windows). Cost: $299 + S&H 2) HILCO Software Sebastopol, CA (707) 829-5011; FAX: (707) 829-5710 Product Names: dCRYPTR for dBASE III Run-Time DECODE for dBASE II Run-Time deFOX for FoxBase II (early dBASE II compatible) OutFOX for Foxbase+ Cost: $149.95 + $5.00 S&H ***** Unsupported Trick To Get Blank (Not Zero) Fields wsd@world.std.com (Rorschach) I been pulling my hair out for hours trying to figure this out. Is is possible to exclude records from an average that are blank? DOCUMENT:Q97647 14-DEC-1993 [B_WFOXPRO] TITLE :INF: How Exclude Blanks, but Not Zeros, from an Average PRODUCT :FoxPro For Windows PROD/VER:2.50 2.50a | 2.00 2.50 2.50a OPER/SYS:WINDOWS | MS-DOS KEYWORDS: -------------------------------------------------------------------- The information in this article applies to: - Microsoft FoxPro for Windows, versions 2.5 and 2.5a - Microsoft FoxPro for MS-DOS, versions 2.0, 2.5, and 2.5a -------------------------------------------------------------------- SUMMARY ======= FoxPro's AVERAGE command sums numeric fields and divides the summed result by the number of records summed. In some cases, you may want to determine the AVERAGE only for fields that are not blank. Since there is no command in the FoxPro language that can distinguish between a numeric field that is blank and one that contains a zero, you must write a user-defined function similar to the one below in order to accomplish this task. MORE INFORMATION ================ The following function requires two parameters, the database name and field name. An example of calling this function is as follows: ave = ave_nobl("test","num") The above command shows "test" as the name of the database file and "num" as the numeric field to be averaged. Sample Code ----------- FUNCTION ave_nobl PARAMETERS dbfname,fld_name PRIVATE blank,skipbytes,i,numofblanks skipbytes=0 numofblanks=0 IF USED(dbfname) SELECT (dbfname) ELSE SELECT 0 USE (dbfname) ENDIF headersize = HEADER(dbfname) no_records = RECCOUNT() rec_size = RECSIZE() fld_width = FSIZE(fld_name) * Place the database structure information in an array to * determine the field's position. The position is equal to * the row number of the field in the array, which is returned * by ASUBSCRIPT(). =afields(afld_pos) fld_pos = ASUBSCRIPT(afld_pos,ASCAN(afld_pos,UPPER(fld_name)),1) FOR i=1 TO (fld_pos-1) skipbytes=skipbytes+FSIZE(FIELD(i)) ENDFOR USE blank = REPLICATE(" ",fld_width) m.file = FOPEN(dbfname+".dbf") IF m.file<0 RETURN "Error opening database "+dbfname+"." ELSE * The numeric field begins on the first byte following the * header and any preceding fields (headersize+skipbytes+1). m.move = FSEEK(m.file,headersize+skipbytes+1) * Read the value of the numeric field and compare it to * the variable blank. m.num = FREAD(m.file,fld_width) DO WHILE .NOT. FEOF(m.file) IF m.num = blank numofblanks = numofblanks+1 ENDIF * Move to the beginning of the numeric field in the next * record, read the next value, and compare it to the variable * blank. m.move = FSEEK(m.file,(rec_size-fld_width),1) m.num = FREAD(m.file,fld_width) ENDDO m.move = FCLOSE(m.file) USE (dbfname) SUM EVAL(fld_name) TO sub_result USE * Divide the sum by the number of records that are not blank. result = sub_result/(no_records-numofblanks) * Return the result to the program that called ave_nobl(). RETURN result ENDIF Additional reference words: 2.00 2.50 2.50a null blank ============================================================================= THE INFORMATION PROVIDED IN THE MICROSOFT KNOWLEDGE BASE IS PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. MICROSOFT DISCLAIMS ALL WARRANTIES, EITHER EXPRESS OR IMPLIED, INCLUDING THE WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO EVENT SHALL MICROSOFT CORPORATION OR ITS SUPPLIERS BE LIABLE FOR ANY DAMAGES WHATSOEVER INCLUDING DIRECT, INDIRECT, INCIDENTAL, CONSEQUENTIAL, LOSS OF BUSINESS PROFITS OR SPECIAL DAMAGES, EVEN IF MICROSOFT CORPORATION OR ITS SUPPLIERS HAVE BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. SOME STATES DO NOT ALLOW THE EXCLUSION OR LIMITATION OF LIABILITY FOR CONSEQUENTIAL OR INCIDENTAL DAMAGES SO THE FOREGOING LIMITATION MAY NOT APPLY. Copyright Microsoft Corporation 1993. ***** Writable SQL Cursors! By Charlie Lotridge (lotridge@charlie.ccd.bnl.gov) We've all had this problem: You go to extract some temporary data from a few tables using a SELECT - SQL statement. You set up the SELECT to output into a cursor so that you have the flexibility and efficiency of a table without having to be concerned about cleaning up after yourself. THen you decide you'd like to add a record to this cursor or change a value in it and BOOM! - "Cannot Write To A Read-Only File". So what do you do? In one of their FastTips, Microsot suggests that you first do your SELECT into an array, then create your cursor with the same structure, and finally use the APPEND FROM ARRAY command to move the data into the cursor. For example: SELECT cust_name ; FROM customers ; INTO ARRAY temp CREATE CURSOR cust_curs ; (cust_name C(30)) SELECT cust_curs APPEND FROM ARRAY temp RELEASE temp But this solution is less than ideal for at least two reasons that I can think of. First, the cost in memory for the array can be quite large if the SELECT - SQL statement generates a lot of data. The second reason is more substantial - you must know the exact structure of the data being generated by the SELECT; both the order of the fields and their respective sizes. This is at best an inconvenience, since if you change the structure of any of the source DBF's, you may also have to change the program code, and at worst impossible if you're trying to write some generalized routine which doesn't know much about the data it is operating on. [Question from the peanut gallery: Can't you COPY STRUCTURE TO ARRAY, and then create your cursor from that array?] So what's the solution? It's simple, really. I came upon this idea when I was trying to change the alias of a cursor (don't ask why). At the temporary expense of an extra work area, you can rename the alias of your cursor (or any open table for that matter) and at the same time make it writable!!! For example: PROCEDURE rename_table PARAMETERS m.fromalias, m.toalias * Open the table in another work area. * USE (dbf(m.fromalias)) IN 0 ALIAS (m.toalias) AGAIN * Close the old alias. * USE IN (m.fromalias) * And you're done! * RETURN And that's all there is to it. The beauty of this solution is that your cursor's new alias has all the appearances of a regular DBF (it shows up in all caps in the View Window, and you can even use the SETUP button on it), yet it retains that most attractive quality of a cursor - it goes away when you close it! If the original alias or workarea of the cursor is important for some reason, with a little extra work rename_table can be make to preserve these characteristics with no loss of functionality. ***WARNING*** In some circumstances, the cursor you create is actually ***WARNING*** just a view of the table, not a seperate table in itself. ***WARNING*** In this case, appending, deleting, or altering records ***WARNING*** in your "cursor" will also alter data in the database. ====================================================================== Foxpro archives --------------- Foxpro archives are available by using a File Transfer Protocol program (usually called "ftp"). For help on retrieving files from these sites, see "How to retrieve files from archive sites" below. Please try to use the FTP site nearest you to conserve bandwidth. Freely-distributable (freeware, shareware, or public-domain) files can be uploaded (and you are encouraged to contribute) to ftp.rahul.net in the directory pub/incoming. After uploading, send email to Chris O'Neill at coneill@polarbear.rankin-inlet.nt.ca with the file's name and a description. He will move the file to pub/coneill within a few days. SITE: ftp.rahul.net (this is the primary Foxpro archive) IP ADDRESS: 192.160.13.1 DIRECTORY: /pub/coneill INDEX: /pub/coneill/index ADMIN: Chris O'Neill SITE: lenti.med.umn.edu IP ADDRESS: 128.101.81.1 DIRECTORY: /pub/foxpro INDEX: /pub/foxpro/index ADMIN: Gerald Skerbitz SITE: nstn.ns.ca IP ADDRESS: 137.186.128.11 DIRECTORY: /pub/pc-stuff/foxpro INDEX: not available at this time ADMIN: Paul Russell SITE: ftp.microsoft.com IP ADDRESS: 198.105.232.1 DIRECTORY: developer/devtools/fox INDEX: index.txt in each subdirectory ADMIN: SITE: mercurio.univr.it (mirrors nstn, lenti, and rahul sites) IP ADDRESS: 157.27.1.2 DIRECTORY: pub/msdos/foxpro INDEX: pub/msdos/foxpro/00INDEX and pub/msdos/foxpro/index.txt ADMIN: Germano Rossi Mailing Lists ------------- Polar Bear Heaven : (most active of the lists) Send email to foxpro-help@polarbear.rankin-inlet.nt.ca to receive a help file with instructions on how to subscribe, unsubscribe, and additional mailing list options. The subject and message body are not specified for this service--any messages sent to this address will be replied to with the help file. This mailing list is archived at ftp.rahul.net in pub/coneill. Administrator: Chris O'Neill (coneill@polarbear.rankin-inlet.nt.ca) (Note: replies may take up to 72 hours because of Polarbear's dial-up connection to the Internet) University of Kansas : send email to LISTSERV@UKANVM.CC.UKANS.EDU (or LISTSERV@UKANVM.BITNET) with "HELP" as the first word of the message. You will receive back a message containing instructions on how to subscribe to or unsubscribe to the mailing list. This list is archived at the List Server. The help file you will receive explains how to retrieve information from the archive. See "MORE INFORMATION" below for instructions on how to subscribe to each of these mailing lists. USENET Newsgroup ----------------- comp.databases.xbase.fox is an unmoderated USENET newsgroup currently receiving about 150-200 messages per week. A Frequently Asked Questions list in several parts is posted regularly and is also available from ftp.rahul.net as file foxfaq.zip. If your Internet provider doesn't have this newsgroup, ask your system administrator to add it to the groups your system receives. Newsletter ---------- The Boston Computer Society publishes a free electronic Foxpro newsletter monthly. This newsletter is posted to the USENET group comp.databases.xbase.fox and is archived at ftp.rahul.net (filenames bcnn*.zip). If you would like to receive the newsletter via email, contact Les Squires at 73020.3435@compuserve.com. Unless email is absolutely necessary (it costs money to mail from Compuserve), try to get the newsletter from these other locations. Technical Support ----------------- Microsoft does not officially support Foxpro on the Internet, though there are MS employees who are on the Polarbear mailing list, and they do have an ftp archive (see above). The Foxpro Wish List is available by email at foxwish@microsoft.com. MORE INFORMATION ================ Subscribing to Foxpro mailing lists ----------------------------------- To subscribe to the Polar Bear Heaven mailing list, send email to fileserv@polarbear.rankin-inlet.nt.ca with the line JOIN FOXPRO-I Your Full Name (substitute your name here) to join the interactive list (messages sent as they are posted), or JOIN FOXPRO-D Your Full Name to join the digested list (messages are compiled and only sent periodically). To post a message to the Polar Bear Heaven mailing list, send it to FOXPRO-L@polarbear.rankin-inlet.nt.ca To subscribe to the University of Kansas mailing list, send email to LISTSERV@UKANVM.CC.UKANS.EDU (or LISTSERV@UKANVM.BITNET) with the line SUBSCRIBE FOXPRO-L Your Full Name (substitute your name here) To post a message to the University of Kansas mailing list, send it to FOXPRO-L@UKANVM.CC.UKANS.EDU (or FOXPRO-L@UKANVM.BITNET) After subscribing to either of these mailing lists, you will receive a response confirming your subscription to the mailing list and explaining how to properly use the mailing list. The mailing list will send messages to the email address you sent the subscription request from. Remember not to send mailing list service requests (subscribes, unsubscribes) to the posting address. Doing so wastes a lot of time, money, and other resources, and usually upsets a lot of people who don't want to read your "SUBSCRIBE FOXPRO-L John Doe" requests. How to retrieve files from archive sites ------------------------------------------ All of the Foxpro archive sites use the File Transfer Protocol to upload and download files. The program that you will use to do this is usually called "ftp". To access an FTP site, start ftp with the name or IP address of the site as a command-line parameter (eg "ftp ftp.rahul.net" or "ftp 192.160.13.1"). Once connected, you will be asked for a login ID. Use "ftp" or "anonymous" as your login ID, then your full email address (eg "joebob@xyz.com") as your password. To list a directory, use the "ls" command; to change to a directory, use the "cd" command (eg "cd /pub/coneill"). Before retrieving a file, you should usually turn on the binary transfer mode using the "bin" command. Then, use the "get" command to retrieve a file (eg "get index.txt"). For help, use the "?" or "help" command. Finally, to exit ftp, type "quit" or "bye".