Btrieve®

Summer 1995 Developer’s Journal Vol. III No. 2

THE INDEPENDENT SOURCE OF NEWS AND INFORMATION ABOUT BTRIEVE AND SCALABLE SQL Crystal, Smithware Announce Improved Btrieve Report Writer Smithware has made substantial Smithware’s Enhanced Crystal Btrieve Drivers and modifications to the Crystal Reports Btrieve drivers. According to Steve Tools Significantly Improve Crytal Reports’ Btrieve Support Mook, Smithware Vice President for Development, “We have added support in Vancouver, British Columbia — June 1, market potential for Btrieve-specific the Crystal Drivers for the extended field 1995 — Crystal announced today that enhancements to their product.” definition capabilities provided by DDF Smithware will begin shipping Smithware “Crystal’s mission is to provide our Builder: Pascal and COBOL data types, Crystal Reports for Btrieve in July. The customers with a way to access their data and types from the Magic and TAS product, which includes Crystal Reports and turn it into useful information.” said development systems are among those combined with Smithware’s Btrieve Mark Sochan, Manager of Strategic supported. The new drivers will also database definition and setup tools, will Relations. “We recognize that a handle variable length records, data be marketed as a complete reporting significant number of our customers have compression, and password-protected solution for developers and users of their data in Btrieve applications. This files.” The drivers have also been Btrieve-based applications. alliance with Smithware will be a great optimized to improve client/server “We’re very excited to see the benefit to these customers.” Crystal performance. John Kelly, Quality growing industry awareness and third- claims sales of over 1 million copies of Assurance Engineer for Crystal said, party support developing for the huge its Windows report writer, including “We are testing the new drivers and have installed base of Btrieve applications.” direct sales and sales through partnerships been consistently getting results that are said Ron Harris, Btrieve Technologies’ with companies such as Microsoft, more than three times as fast.” President and CEO, “especially when an Borland, Symantec, Delrina, Hewlett industry leader like Crystal recognizes the Packard and others. See Report Writer on page 10...

IN THIS ISSUE BTI Celebrates 1 Year Jim Kyle, Btrieve Developer’s News Editor, talks to BTI officials about their first anniversary: where they have been and where they are headed...... Page 4 Product Analysis We review two data conversion systems that support Btrieve: Tools and Techniques’ Data Junction and IST’s Open Exchange. We also look at Opt-Tech Sort/Merge and its support for Btrieve...... Page 8 Building Btrieve Steve Mook has written a nice little Windows application that reports everything it can on how Btrieve is setup in Windows...... Page 14 Technical Corner Once again, the best-of-the-best in Btrieve Technologies’ Tech Support group gives you the latest technical information...... Page 17

Photographer: Laurie Wisbrun Inside Btrieve Doug Reilly looks into Btrieve file size Btrieve Technologies celebrates its 1-year anniversary with a Texas-style bash at DB/Expo estimation and discovers that it is more of an in San Francisco. BDJ news editor Jim Kyle covers the story beginning on page 4 art than a science...... Page 25 Btrieve Developer’s Journal From the Cockpit... Summer 1995: Volume III, Issue 2 I know you are probably wondering ISSN 1071-7463 about the revised title of my column, and Published quarterly by Smithware, Inc. perhaps about the photograph of the goofy Staff looking fellow to the left. Basically, it’s been a long time (over a month) since BDJ editor Publisher: Scott Smith Editor: Steve Mook Steve Mook and I saw our “corporate News Editor: Jim Kyle aircraft.” We just recieved a replacement for Contributors: Jim Barber, Eric Cohen, the insignificant piece that fell off the wing Randy Goodhew, Doug Reilly, Jon Saunders the last time we flew it, so I decided that Contributors to Technical Corner: Linda while we went through the arduous task of Anderson, Doris Eldridge, Sharon Kimball, Photograph by Bruce Gallassero Diane Klinetob, Cathy Martin, Brett putting together another issue of BDJ Publisher Scott Smith Climbs Inside the McAnally, Rudy McNeese, Chris Ojeda, Rans Coyote Ultra Light Aircraft (instead of flying) I wanted to be constantly Jose Pruneda, Jim Sneary, Laruie Wisbrun reminded that it is waiting for us in the Graphic Design: Arthur Austin hanger the moment that this issue goes to the Design Consultant: Tania Owen Studio Photographers: Dean Dixon, Henry Savage printers! Illustrators: Will Owen, Albrecht Dürer This issue of BDJ sees a lot of changes around here. First of all, we are extremely Advertising Manager: Carolyn Lighty excited to welcome Jim Kyle to the post of BDJ News Editor. Jim, as you may know, is the Assistant Advertising Manager: Jim Perry author of the new Addison-Wessley Btrieve Complete book due out this summer. Jim has Circulation Manager: Cindi Gourley Administrative Assistant: Diane Kugel certainly brought a degree of enthusiasm and proficiency to the job that Steve and I never Collections: Kim Finnell really had the time to give it, and he writes better than we do. I know that everyone will be Subscriptions pleased to see Jim continue our long-standing policy of supporting all Btrieve/Scalable SQL products and services. Annual subscriptions are for four issues per Also, we welcome to our staff Jim Perry as assistant advertising manager. Jim, along year at $49/year for delivery inside the United States and Canada, and $79/year for with advertising manager Carolyn Lighty, will work hard to search for more products and delivery outside the United States. services for you to read about in our publications. Back Issues: Back issues are available for We are rather sad to announce, however, that Mad Poarch has resigned as BTI’s Vice $20.00 per issue. Contact Cindi Gourley at President of Customer Service. She called (615) 386-3100 for additional information. Steve a few weeks back to tell him that she How to Contact BDJ had realized that it was time to move on. I will Btrieve Developer's Journal certainly miss working with Mad and her 2416 Hillsboro Road, Suite 201 assistance with the Technical Corner will be Nashville, Tennessee 37212 missed. Telephone: (615) 386-3100 At any rate, I hope you enjoy this issue. Facsimile: (615) 386-3135 While you’re reading it, Steve and I will be cruising at about 1,000 feet somewhere between CompuServe: 73173,2731 Leiper’s Fork and Hohenwald, Tennessee. Internet: [email protected] Contents... Advertising Btrieve Technologies Turns Technical Corner For information about advertising your One Year Old by Btrieve Technologies...... 17 product or service in Btrieve Developer's BTI celebrates one year of operation Journal, call Carolyn Lighty, Advertising Inside Btrieve Manager, at (800) 685-2403 or (201) 712- since they separated from How Big is that Btrieve File on the Hard 0044. by Jim Kyle...... 4 Drive? Postmaster Product Analysis by Doug Reilly...... 25 Application to mail at Second-Class Tools and Techniques’ Data Junction, postage is Pending at Nashville, Innovative Solutions and Technologies’ Btrieve Based Accounting - Tennessee. OpenExchange, and Opt-Tech Sort Part 3 Copyright 1995 by Smithware, Inc. by Steve Mook and Scott Smith...... 8 Eric Cohen presents the last installment All rights reserved. of his 3-part series on Btrieve-Based With the exception of the “Technical Corner” section, this publication is produced independently of Btrieve Configuring Btrieve for accounting systems Technologies, Inc. No part of this publication may be reproduced in any form by Windows by Eric Cohen...... 29 any means without permission in writing from the publisher. What are allof those DLL's and EXE's? Smithware is a trademark of Smithware, Inc. Guest Review Btrieve and XQL are registered trademarks and Scalable SQL, by Steve Mook...... 12 Xtrieve Plus, and Microkernel Database Engine are Clarion for Windows as a Btrieve trademarks of Btrieve Technologies, Inc.All other names are the trademark of their respective manufacturers. Building Btrieve development front end by Steve Mook...... 13 by Randy Goodhew...... 33

Summer 1995 Btrieve Developer's Journal 2 the product image was a top-priority goal. “It was absolutely our biggest job,” Btrieve Technologies Turns One Year Old Holland recalled. But at DB/Expo in May 1995, BTI Much of the Year Spent on Getting New Products Out the Door and its customer Arctco were honored While Rebuilding the Company’s Presence and Image with the RealWare award for excellence in developing a working client/server By Jim Kyle, News Editor expansion, and entered a joint venture database solution. Industry observers rate agreement with Novell KK, AG Tech, this as one of the most significant awards Austin, Texas — It was a Texas-style and Empower, to form Btrieve a product can receive, since it’s not party this past May 2, even though the Technologies Japan and accelerate Asia sponsored by any individual publishing location was San Francisco’s Sheraton Pacific market development. This month firm and is based primarily upon value to Palace Hotel. Btrieve Technologies also saw completion of cross-platform a real-world customer. Incorporated celebrated its one year development for the Btrieve/Windows “I would have never expected it to anniversary (a few days late: the actual NT Advanced Server engine, cleared for happen this quickly,” Holland admits. A birthday was April 29) while participating shipment in May, and announcement of pair of industry analyst organizations, in DB/Expo ’95. But while parties are fun, SSQL 4.0 to be available later in the both of which had repeatedly downplayed BTI’s first birthday has more significant year. the importance and effectiveness of implications for those of us who use their That’s the tally of major events for Btrieve, did rapid about-faces. “I still products. To put into perspective the the first year of BTI’s existence. We wouldn’t say they’re exactly our biggest events, accomplishments, and progress of asked Holland to pick, if possible, the fans,” says Holland, “but at least they that first year, we spent a couple of hours one most important accomplishment talk to us now, and we understand each chatting with Bo Holland, director of from the list. At first, he found it a bit other much better.” product marketing for BTI. difficult to single out any one of them One of the problems faced at the First, let’s look at the major events of since all are truly major. The “huge outset by BTI was the public perception the first 12 months. On April 29, 1994, the amount of technology” shipped was that Btrieve and the other database deal transferring Novell’s database quite significant, but so was the products had not changed since 1982, and business to BTI was closed. This returned establishment of good relationships with were obsolete technology. Another was a Btrieve and its associated products to the such major industry leaders as Microsoft widespread assumption that Novell had control of the people who originated the and IBM in addition to the long-standing “dumped” the products. The first year’s program in 1982. Just a month after that, relationship with Novell. record would indicate otherwise. in May 1994, Btrieve 6 for Windows We went through the year’s In fact, the top positions at BTI are started shipping. By June, with the accomplishments in some detail, noting held by the same people who led Novell’s company only 60 days old, the ledgers each as “significant.” Then Holland database business from 1987 until 1994, were in the black. picked something that wasn’t on the and who before that created SoftCraft to By 90 days, a second product (Btrieve event list at all, as the most significant market Btrieve in 1982. Rather than being 6 for DOS) was shipping, and in August, happening of BTI’s first year: “We’ve an “old” technology, Btrieve and its Scalable SQL for Windows joined the line made tremendous strides,” he relatives enjoy the benefits of maturity (in of released packages. SSQL for Windows concluded, “in repairing the image of contrast to many more recent innovations, marked the second module based on the Btrieve.” not all of which have been beneficial to MicroKernel Architecture. At the time of BTI’s birth, Novell their users). In fact, Btrieve was totally In September, BTI joined forces with hadn’t announced an upgrade or, indeed, rearchitected when Btrieve version 6 was Microsoft to port Btrieve to the Windows given the product line any publicity for introduced under Novell. They were not NT Advanced Server. The contract will more than two years. Many within the especially eager to turn over control of make it possible to bundle a discount deal computer industry had concluded that the the product line, but agreed to do so only for Btrieve for Windows NT Advanced package was either dead, or dying. on condition that the network giant would Server with both Windows NT Advanced Outside the industry, potential users of always have the right to license and Server and the later Microsoft Back-Office database products were being barraged distribute BTI products. products. by hype for other systems, but not a “Actually,” said Holland, “our The year ended with a bang when the word about Btrieve reached them. The relationship with Novell is closer now Scalable SQL NLM for NetWare shipped consequence was that in many corporate than ever before. Even in the days before in November. In January 1995, IBM information technology departments, BTI, the database division was more like contracted to include Btrieve for OS/2 with developers were being told to replace a separate company within Novell.” the CICS for OS/2 product. By March, the existing Btrieve applications with “more What about future plans? The new Btrieve server for NetWare began modern” ones based on Borland’s company isn’t resting on any laurels. shipping, and a native ODBC solution had Paradox or Microsoft’s Access. They have high hopes for the been announced. At the October 1994 Summit MicroKernel Architecture as the base for In April 1995, BTI obtained venture Conference in Austin, top BTI even greater improvements to come. capital to support aggressive international management recognized that rebuilding See Birthday on page 6... 3 Btrieve Developer's Journal Summer 1995 Birthday... Continued from page 4 to buy licenses directly from BTI or 4.0, Holland said. “These capabilities through their reseller network to get need to be part of the basic toolkit in any First, though, the needs of developers immediate access to upgrades. While event,” he explained. He went on to faced with new Novell will, most probably, eventually indicate that the end-user group can platforms must be met. release the Btrieve for NetWare Server expect upcoming versions of Xtrieve to For instance, on the day we spoke upgrades as part of NetWare, that’s not be simpler in use: “We’ll get it re- with Holland, Microsoft had announced likely to happen until a major NetWare focused on what it should be.” August 24 as the delivery date for change takes place. For the long term, BTI is looking . At the moment, BTI has no Many developers have become upset toward something they call the support for this platform, but they’ve at the thought of having to buy a new Information Management Network, been working on it along with the Server Engine license, for example, to which Holland describes as “really products that have been announced. obtain freedom from preloading important.” The idea is to marry According to Holland, “We’re working BREQUEST.EXE under DOS before application and network services with the with Microsoft on Windows 95 support. going into Windows. With the arrival of goal of providing plug-and-play By early summer we will have at least a Windows 95, where such preloading isn’t interconnection between third-party pre-release version of a Windows 95 allowed by the system, the complaint applications based on mutual linkage to a development kit. This will be based on volume has increased. We asked Holland “super data dictionary.” While it’s an version 6.15 of our engines. Our target whether the new requester DLL would be ambitious idea, BTI is convinced it can for a full Windows 95 package, though, made available as a separate product, to be brought about, and is factoring this will be version 6.5, which is still an meet such criticism. target into all their current product unannounced product. You’d be safe to “How could we price it?” was his planning. say that it’ll appear by the end of the response. “You can upgrade a 5-user For a one-year-old startup firm, they year.” server system for $99 at least through the don’t seem to be doing so badly. That How’s the announced ODBC driver end of 1995, and a 10-user system for may be due, at least in part, to having coming along? The initial release $195. For those prices you get the newest been under the same immediate estimated that beta tests might begin as server and the DLL, plus all the utilities management for all the thirteen-plus early as April, but at the time of our talk needed.” We were floored, since those years the product has been in existence. it was already mid-May and the estimates figures represented the extremes of the Then again, maybe it’s just because had changed to “June or July.” Holland price we had intended to suggest for the they’re following the prescription set said, “We just started testing the Alpha 2 DLL requester as a standalone product, down for all software toolmakers back in version, and haven’t done any special and asked about the discrepancy between 1974 by Brian Kernighan and P. J. tuning on it yet, but it’s only 3 percent these prices and those we had seen Plauger: “Do just one thing, but do it slower than native Btrieve on most bandied about earlier. superlatively well.” operations. Our goal was to be no slower ² “We’re being aggressive in our than 10 percent across the board, and I upgrade pricing strategy,” he responded. don’t think we’ll have any trouble doing “Everybody on the planet is entitled to much better than the goal.” the upgrade prices at this point.” When the ODBC driver beta does He also said the company is planning get underway, it will be conducted in to communicate this strategy more parallel with the beta test for SSQL New Btrieve-Lotus effectively, and to urge third-party Version 4.0. Since ODBC defines an Notes Options developers to become part of BTI’s SQL application interface for both SQL- reseller network so they can bundle the rainstorm Technologies based and navigational file-based data B new engines with their applications. (617.492.3399) in Cambridge, MA access, it has to be built on an SQL Most of the emphasis during the first has announced its DataLink for Lotus foundation for maximum speed. “This is year has gone to Btrieve and SSQL, the Notes 1.2 priced at $1,495 which can where the MicroKernel comes into its stars of the BTI stable, but Xtrieve Plus map many database files into Notes own,” Holland explained. “Instead of hasn’t been forgotten. Plans for its future files and transfer data between the being built on top of the navigational are currently under study, said Holland, two systems. The package supports layer the way that XQL was built on top but “Xtrieve for Windows will still be a Btrieve via ODBC. of Btrieve, now we put the interface requirement.” A survey of current Trinzic Corporation layer directly on the MKD engine itself. Xtrieve users has identified two distinct (312.380.4389) of Chicago, IL has This allows many things to be done more groups: one uses the product as a introduced its InfoPump which can effectively, and gives us a unified development tool, while the other connect between a dozen or more architecture for all kinds of database consists of end users who use Xtrieve for different systems including Btrieve activity.” ad hoc inquiry into the database. and Lotus Notes. The starting price One aspect of BTI’s independence For developers, those parts of of about $30,000 for the server has bothered many developers and end Xtrieve that build data dictionaries, or includes interfaces for any two users, who had become accustomed over edit and repair , will appear as systems. Additional interface the years to receiving the Btrieve server separate utilities to be included in the modules are priced at $2,500 each. as part of NetWare. Now, it’s necessary Developer Kits for Btrieve 6.5 and SSQL 4 Btrieve Developer's Journal Summer 1995 Upgrades to Btrieve 6.15, additional interfaces, INS WARD AT XPO available via CompuServe BTI W A DB/E Upgrade packages for both Btrieve Austin, Texas — Anyone who doubted distributed client/server network for DOS and Btrieve for Windows are Btrieve’s position as a client/server using Tricord ES5000s, Novell available to registered developers from tool should have been in the audience NetWare, Btrieve, Scalable SQL, and the BTI support forum on CompuServe. The latest version as of mid-May was at DB/Expo in San Francisco on May Visual Basic. This provided better 6.15.3. DOS upgrades are in Library 8 9. That’s when a panel of leading performance, significant reduction in (DOS Updates) while Windows upgrades industry experts selected BTI and its training costs, and increased are in Library 9 (WIN Updates). customer Arctco, Inc., for the reliability and data integrity. Ray If you don’t have access to these RealWare Award recognizing Koukari, MIS director for Arctco, areas, but own one of the products, outstanding real-world user noted that the solution allows his firm download the file BTRUPD.TXT from applications. to adapt to rapidly changing business Library 1 (General Information) and read Judging was conducted by a panel needs. The application, supporting it. Follow the instructions to get access including Judith Hurwitz, David 250 on-line users at several sites, was and the appropriate passwords for Kalman, Scott Mace, Barbara Cole, one of several featured at last year’s unzipping the files. Besides the engine upgrade packages, and Alan Alper. All are editors or Summit Conference in Austin. Total self-extracting file BTRXFC.EXE in the publishers of prominent industry time necessary for the conversion was Current Upgrades library adds new C and journals in the client/server area. 18 months. Pascal interfaces to Btrieve for DOS. The They chose BTI’s solution based on “We are extremely proud of the new C interface supports Borland’s innovation, uniqueness, robustness, judges’ recognition,” said Ron PowerPack and Phar Lap’s v6.0 and performance. Harris, president and CEO of BTI. extender. The Pascal interface adds The winning application allowed “This award reinforces the market’s Borland’s Pascal 7.0 protected-mode Arctco, manufacturers of the Arctic belief in the future potential of our compiler to the list of those supported. In Cat line of snowmobiles, to downsize company.”² addition, the README file in this from a UniSys A12 mainframe to a package provides information about support for WIN32S applications. ²

123456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

123456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

123456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

Summer 1995 Btrieve Developer's Journal 5 hearted, it also offers utilities for parsing these definitions from files for which no DDF dictionaries are available. We won’t kid you and tell you that the well-designed parsing screens makes this otherwise loathsome task a lot of fun, but they sure help. Now, everybody knows that there are more types of fields out there in Btrieve databases than the double handful or so that the Btrieve people will admit to. And, chances are, the fields you most need to look at are those other kinds. So we’ll let you in on a little secret - with a list of eighty-four or so data types to choose from for a field in a Data Junction dictionary, chances are that if you can’t find the one you need, you didn’t really need it after all. The program is not without limitations. It does not claim to support Btrieve files containing variable length records, or files by Steve Mook and Scott Smith, Smithware, Inc. which do not have a consistent field structure across all of the Email: [email protected], [email protected] records. But it will open files with Btrieve owner names, and it supports Btrieve version 4.x, 5.x, and 6.x files. Frequently, we are asked whether we know of data Data Junction allows a user to define and store every aspect conversion products that support Btrieve. To help answer that of a data conversion. The first step in creating a new conversion question, we have reviewed three tools that can help you move is to define a source file. If you’re converting from Btrieve, data from one source to another. Data Junction from Tools and DDF definitions can be imported at this step if you have them, Techniques, Open Exchange from Innovative Solutions & otherwise you can define the fields you wish to extract. The next Technologies, and Opt-Tech Sort/Merge from Opt-Tech are three step is quite similar - defining a target file. Once again, the user products that can be used to port data into, or out of, Btrieve files. selects a file type and a file, and has the option to modify the field definitions. The final step involves defining a conversion map to map fields from the source to the target file. At this Data Junction stage the user may add record filtering, data verification, and even expressions to modify the data as it is being converted. There’s a reason that Data Junction from Tools and In short, there don’t seem to be many database conversion Techniques has taken the Data Based Advisor Reader’s Choice problems this program can’t solve. Like any powerful tool, it award for best file conversion tool 5 out of 5 years. This can be complicated to use. But Tools and Techniques has done a program is a hoss. The new version 5.1 for Windows still has a good job of limiting the scope of this application. It converts few kinks in the , but even on the off-chance that data. It will handle simple conversions without much trouble, the company never fixes them, they’d be worth getting used to. and it will also handle very complicated ones. ² In addition to Btrieve, Data Junction will also convert Lotus Notes, DIF, DataEase, Excel 5.0, DataFlex, Oracle, Product: Data Junction v5.0 WordPerfect, SQL Server, and SuperBase, and that’s nothing Company: Tools and Techniques, Inc. close to a complete list. Those are just the new ones added with Address: 2201 Northland Drive the version 5.1 release. In the more complete list of over ninety Austin, Texas 78756 different database formats Phone: 512-459-1308 Fax: 512-459-1309 supported by this product, Toll Free: 800-580-4411 BBS: 512-467-0206 there were a lot more Price: $299 formats we didn’t recognize than those we did, and we couldn’t think of any we might want to use that weren’t already there. Data Junction uses Open Exchange its own data dictionaries and templates to define the data Open Exchange from source and target Innovative Solutions & information for all of its Technologies is a new entry on data sources. It has the the database information ability to import DDF exchange market. Open dictionaries for Btrieve Exchange uses Microsoft’s Tools and Techniques’ Data files, or, for the Access database technology as Junction will move almost any adventurous and stout- implemented in Visual Basic 3.0 data, anytime, anywhere. and Access 2.0 to transfer data to and from sources supported by the Microsoft Jet Engine.

6 Btrieve Developer's Journal Summer 1995 These formats include various databases, including Btrieve. As with any Visual Basic application that uses the Jet Engine, Open Access’ operations on Btrieve files will not Op-Tech Sort win any speed races. In fact, browsing Btrieve tables can get you into a one-on-one match between you and an hourglass mouse pointer for a while. But the ease at which we were Op-Tech Sort from Op-Tech Data Processing is a powerful able to quickly get the product started on a conversion more general data handling and sorting library and utility program. than made up for it. The version we evaluated, Op-Tech Sort version 5.0 for DOS, The installation process of Open Exchange did install the includes input-file support for Btrieve files when used in complete Btrieve Client Engine version 6.15. (In fact, the conjunction with either BTRIEVE.EXE or BREQUEST.EXE. product introduction screen gives credit to Btrieve The thorough and concise documentation included with the Technologies for their copyright) Be careful, though, product made getting started easy, and sample code included because it installed Btrieve in our C:\WINDOWS\SYSTEM examples for linking with just about every C, BASIC, COBOL, directory. If you already have Btrieve installed, you may Pascal, FORTRAN, Prolog, PL/I, dBase II and III, and want to be sure that your installation does not get lost. Assembly Language project imaginable. A linkable library, a The interface to Open Exchange is very well designed TSR library, and a command-line EXE interface are included and intuitive. Our first task was to export a marketing subset to support this wide range of options. database containing about 2,000 records to a comma The product contains functions to sort, merge, and to delimited ASCII text file. We first pointed to the DDF that perform record selection and re-formatting from a number of contained the table to export (you must have accurate DDF’s different input file formats. Op-Tech writes records to to access Btrieve tables), then pointed to the desired table, sequential files which can contain data records, physical and then specified the output file’s type and filename. You record addresses (GetPosition result buffers in the case of are given the option to use the source file’s structure for the Btrieve files), or a output file’s structure or another file’s structure to facilitate combination of record table restructuring. addresses and key values. It We were able to apply a query against our Btrieve table can also be used to create such that the exported records were restricted to those BUTIL -LOAD/SAVE containing only desired records, and we were able to easily format files. adjust the field mappings between the import and export Btrieve developers files. will find this product Open Exchange also offers a developer’s kit that allows particularly useful for you to build custom applications in Visual Basic that use the creating temporary indexes Open Exchange converter. This is accomplished with a into a Btrieve file for message VBX which allows communication between your reporting and query VB application and Open Exchange. Opt-Tech Sort 5.0 is a powerful purposes. Though Btrieve Open Exchange is currently in beta release and will be general-purpose data sorting has the ability to add and shipping their final version later this Summer. For a beta drop indexes, it’s not release, however, it was quite complete and we encountered always practical or desirable to use internally-maintained very few problems with it. In fact, we were impressed that indexes to facilitate short-term or infrequently used lookups. the software and documentation made it very easy to contact Op-Tech Sort gives programmers a flexible and practical a very responsive technical support department.² tool for producing temporary index files or dumping collated snapshots of data from Btrieve database files without having to Product: Open Exchange v16.5 Beta alter the structure of the database file itself. The product Company: Innovative Solutions & Technologies, Inc. functions equally well to produce collated output files from Address: 904 Jefferson Avenue COBOL, dBase, fixed-length-sequential, FORTRAN, ASCII Joplin, Missouri 64801 Text, and several other sources. Phone: 417-781-3282 Fax: 417-781-3299 Programmers who are familiar with the Btrieve API will Email: [email protected] feel most at home with this product, as the data handling concepts are similar. Like Btrieve, Op-Tech Sort deals with Price: Standard Edition: $89, Professional Edition: $189, VBX/Developer’s Kit: $495, VBX License: $295. data on the record level, leaving field-level tasks to the² application programmer. No data dictionary interface is included. Product: Opt-Tech Sort v5.0a Company: Opt-Tech Data Processing Address: Post Office Box 678 Zephyr Cove, Nevada 89448 Phone: 702-588-3737 Fax: 702-588-7576 BBS: 702-588-1076 Price: $149

Summer 1995 Btrieve Developer's Journal 7 12345678901234567890123456789012123456789012345 Report Writer... Continued from page 1

12345678901234567890123456789012123456789012345

12345678901234567890123456789012123456789012345

12345678901234567890123456789012123456789012345

12345678901234567890123456789012123456789012345 The release also coincides with the release of DDF Sniffer,

12345678901234567890123456789012123456789012345 12345678901234567890123456789012123456789012345 Smithware’s new Btrieve database parsing tool, and DDF Builder version 12345678901234567890123456789012123456789012345 12345678901234567890123456789012123456789012345 3.0. Both products will be included in the Smithware Crystal Reports for 12345678901234567890123456789012123456789012345

12345678901234567890123456789012123456789012345

12345678901234567890123456789012123456789012345 Btrieve bundle. “DDF Builder was originally developed to support

12345678901234567890123456789012123456789012345

12345678901234567890123456789012123456789012345 Borland’s ObjectVision back in ’91,” according to Mr. Mook. “Version

12345678901234567890123456789012123456789012345

12345678901234567890123456789012123456789012345 3 has been updated to make it much easier for end-users to understand.

12345678901234567890123456789012123456789012345

12345678901234567890123456789012123456789012345 Enhancements include a new toolbar, improved data editing and viewing

12345678901234567890123456789012123456789012345 12345678901234567890123456789012123456789012345 capabilities, and a look and feel that is consistent with Crystal Reports. 12345678901234567890123456789012123456789012345 12345678901234567890123456789012123456789012345 DDF Sniffer was designed to analyze a Btrieve data file and determine its 12345678901234567890123456789012123456789012345

12345678901234567890123456789012123456789012345

12345678901234567890123456789012123456789012345 field structure for DDF Builder.” Regarding the new tool, Bill Langley,

12345678901234567890123456789012123456789012345

12345678901234567890123456789012123456789012345 Smithware’s DDF Sniffer product manager, said, “Advanced data

12345678901234567890123456789012123456789012345

12345678901234567890123456789012123456789012345 parsing techniques permit DDF Sniffer to be very accurate in determining

12345678901234567890123456789012123456789012345 12345678901234567890123456789012123456789012345 the field structure of most unknown-format files. It is not perfect, of 12345678901234567890123456789012123456789012345 12345678901234567890123456789012123456789012345 course, and that’s why it is so tightly integrated with DDF Builder. DDF 12345678901234567890123456789012123456789012345

12345678901234567890123456789012123456789012345

12345678901234567890123456789012123456789012345 Sniffer’s results can be checked and modified with DDF Builder using

12345678901234567890123456789012123456789012345

12345678901234567890123456789012123456789012345 data from the application.”

12345678901234567890123456789012123456789012345

12345678901234567890123456789012123456789012345 The product bundle will include the most recent version of the

12345678901234567890123456789012123456789012345

12345678901234567890123456789012123456789012345 Btrieve Client Engine and Requesters for Windows, giving it both local

12345678901234567890123456789012123456789012345 12345678901234567890123456789012123456789012345 and client/server access to Btrieve data. Documentation on Btrieve setup 12345678901234567890123456789012123456789012345 12345678901234567890123456789012123456789012345 and configuration is included. All of the Btrieve database setup and 12345678901234567890123456789012123456789012345

12345678901234567890123456789012123456789012345

12345678901234567890123456789012123456789012345 configuration utilities from Btrieve Technologies are also included in the

12345678901234567890123456789012123456789012345

12345678901234567890123456789012123456789012345 package.

12345678901234567890123456789012123456789012345

12345678901234567890123456789012123456789012345 Smithware Crystal Reports for Btrieve will carry a suggested retail

12345678901234567890123456789012123456789012345 12345678901234567890123456789012123456789012345 price of $495. Users who already have Crystal Reports 4.0 can purchase 12345678901234567890123456789012123456789012345 12345678901234567890123456789012123456789012345 the Crystal Reports Btrieve Tools Pack containing all the products from 12345678901234567890123456789012123456789012345

12345678901234567890123456789012123456789012345

12345678901234567890123456789012123456789012345 the full package, except the report writer for $349. Both products are

12345678901234567890123456789012123456789012345

12345678901234567890123456789012123456789012345 expected to ship in July of 1995. Contact Smithware at 800.828.7438 or 12345678901234567890123456789012123456789012345 615.386.3100.²

Summit National Group $395. News Briefs Summit National’s Bruce W. announces Btrieve McDougal says “We feel this is a Intelligent Objects Corporation (800.876.6585) in Cartersville, Components for Delphi significant breakthrough which will GA has announced SQL OLE!, an enable developers to produce quality “intelligent object” that supports Chicago, Illinois — Since the Delphi applications very quickly.” He OLE Automation which can introduction of Delphi, the new visual added that the Btrieve Components provide any Windows application application development tool from package, unlike most other interfaces, with complete access to Btrieve, Borland that was introduced at Software does not require any Data Dictionary Scalable SQL, Sybase, Oracle, Development ’95 in February, one of (DDF) files; they implement native SQL Server, and a host of other the most frequently asked questions on Btrieve functionality and thus preserve database and record managers. the Btrieve support forum of the performance and reliability for Pricing starts at $799 per CompuServe during the past several which Btrieve is noted. However, DDFs platform. months has been, “How can I hook up can be used at design time if they are Btrieve and Delphi?” While Delphi available, to assist in application Btrieve Technologies Inc. (512.794.1719) plans to be a provides facilities to use either VBX development. significant participant in the controls or ODBC, neither approach The components are designed so that a NetWare for PowerPC package. allows an application to achieve the form’s access to Btrieve data can be “Btrieve will be an integral part of tool’s performance promise. managed by dragging and dropping the NetWare version that Apple is One answer has come from Summit components onto the form and setting building,” says Kristin Burkland, National Group, a developer of financial their properties. Other manipulations are BTI’s director of business software systems since 1983. Summit also available through the use of the development. A key promise of National developed a complete set of components and the classes defined in Apple’s future line of PowerPC Delphi components for their own the components. servers is the achievement of an internal use, and are now making the Components included in the optimal price/performance balance toolkit available to other Delphi users. package fall into five groups: Source, for databases. Shipment is expected to begin on July 1, Editing, Driver, Driver/Editing, ²and and the package price has been set at Miscellaneous. For more details, contact Aaron Symanski at (800) 621-9531, or 8 Btrieve Developer's Journal via CompuServe at 73420, 3727. Summer 1995 C-SOFT SHIPS ONE UPGRADE, ONE NEW PRODUCT BTI Development News Lilburn, Georgia — C-Soft, Inc. has may specify whether to create DDFs or New Versions released an upgraded edition of its BTedit not. BTcreate consists of two programs: The procession of microkernel utility package, a powerful Btrieve file BTsource, which creates and maintains engines for additional platforms editor/browser compatible with all file definitions, and BTcreate to create the continues, with shipment of OS/2 and Btrieve files regardless of version. The data files themselves. BTcreate accepts NetWare versions of Btrieve 6.15, and program includes the ability to mark a command line parameters so that an Scalable SQL for DOS, version 3.01. select group of records for deleting or for automatic procedure can be created, Not long after starting shipments of export. It also provides ASCII search and eliminating user interaction. Since the SSQL 3.01, BTI announced version replace, and column data replacement. two programs work independently and 4.0 of the product, scheduled to be Besides the BTedit upgrade, C-Soft can be licensed separately, BTcreate available during the third quarter of has added BTcreate to its product line. provides maximum flexibility in use. 1995. Additional features promised in BTcreate allows definition and For more information and full featured the new version include standard maintenance of Btrieve files (in both 5.x demos contact Andre Larmet, C-Soft, ANSI SQL triggers and stored and 6.x formats). When defining files you Inc., (404) 279-9493. ² procedures. engine pricing starts at $149 per station, SOLUTIONS D IRECTORY D EBUTS IN S AN F RANCISCO while server engine prices will depend on the number of concurrent users San Francisco, California — The Btrieve applications and tools both vertically and allowed. Entry-level server editions Solutions Directory’s first edition made horizontally, allowing a rapid overview of will be a 10-user server, for $995. its public debut at DB/Expo in San the tools available for any specific market Shipment of the Windows NT Francisco. This directory, intended to area in addition to the more usual server engine, which has been in Beta eventually list all applications and tools functional groupings. test most of the year, is also that use Btrieve or Scalable SQL, is The initial printing lists between 400 imminent. Microsoft’s recent preview compiled by BTI primarily for internal and 500 applications, but BTI believes release of Windows NT version 3.51 use by sales and marketing personnel, but this number represents only a fraction of appears to have created a few will also be distributed to the public at the total now in existence. There’s no problems for the engine. No firm trade shows. charge for a listing in the Solutions release date had been set at this While it might appear that the Directory, but software developers must writing; BTI was waiting for Solutions Directory and Smithware’s fill out a Product Profile form for each Microsoft to stabilize the operating Btrieve SourceBook are two solutions to product to be listed. system before committing to a the same problem, BTI’s Amy Billingsley These forms are available via shipment date. says that the publications actually address CompuServe’s BTRIEVE forum, in very different needs. The SourceBook Library 10 (Third Party Developers), or ODBC Driver Still in Development will continue to be packaged with every can be obtained via fax by calling BTI at Despite an initial target date of Btrieve product shipped, while (512) 794-1719 and requesting a copy. April for the start of beta testing, the distribution of the over 400 page You can also contact Ms. Billingsley via native ODBC driver announced by Solutions Directory book will be much Internet E-mail, as [email protected] BTI in early March was still in more limited for obvious reasons. for additional details, or by phone at development by mid-May. Current The Solutions Directory catalogs (512) 794-1471. ² forecasts predict that testing will start in “June or July.” Initially only a 16- MAD POARCH RESIGNS bit driver is in the works, although it’s Dewitt Gimblet will be BTI’s being designed for simple migration to AS BTI’S VP OF Advanced Product Planning Manager. In 32-bit platforms according to BTI. this role, he will identify, define, mange, CUSTOMER SERVICE The new ODBC driver is intended schedule and coordinate production of to take advantage of new features NEW EMPLOYEES ALREADY ON BOARD new database software products based on provided in the next generation of emerging technology. Austin, Texas — Mad Poarch, BTI’s BTI’s database engines. ODBC Mark Marshall, formerly with CRI ² Vice President for Customer Service has compatibility functions are also being of Seattle, Washington, has joined BTI as left BTI to pursue personal interests. added to the MicroKernel Database Vice President of Development and Quickly on the heels of her resignation, Engine to further increase Services and will be responsible for BTI announced several additions to their performance. Existing ODBC drivers directing the activities of software growing staff. for Btrieve have drawn many development and the development of the Brett McAnally has been promoted to complaints from users, who report company's technology vision. SSQL Product Manager and Khrisnan that the drivers forfeit most of the Charles Craft, Formerly with Dell “Kam” Aghoramurthy assumes the role speed advantages gained by using Computer Corporation, has become BTI’s of Btrieve Product Manager. Kam comes Btrieve. to BTI from Tivoli Systems in Austin. new Director of Sales.² Summer 1995 Btrieve Developer's Journal 9 parameters from the [Btrieve] section in WIN.INI. In Btrieve version 5.10 client-server configuration, a requester version of WBTRCALL.DLL interfaces to the application. If, in the NOVDB.INI [Brequest DPMI] section, the “Requester=Yes” option is set, this interface will try to pass API calls to BREQUEST.EXE, which must be running as a TSR underneath Windows. BREQUEST.EXE in turn handles communication over NetWare to and from the Btrieve NLM, which handles the actual file IO. If this DLL is unable to open the file in client-server mode, it checks NOVDB.INI [Brequest DPMI] section for the setting “Local=Yes”, to determine whether or not to attempt to load WBTRLOCL.DLL and open the file using the client engine. The file WBTRLOCL.DLL, which is the exactly the same as the 51K WBTRCALL client Configuring Btrieve engine, renamed, interfaces with WBTRCALL DLL. It reads its initialization parameters from the [Btrieve] section of WIN.INI, for Windows Apps and handles file IO for all Btrieve files which are inaccessible to the NetWare Btrieve NLM. by Steve Mook, Smithware, Inc. In the version 6.15 configurations, the application EXE Email: [email protected] links with WBTRCALL.DLL, which checks BTI.INI for its configuration options. It may then call the client engine loader WBTRLOCL.DLL, which in turn loads the Btrieve client engine. The client engine, the code which handles local file IO Can You Tell Me Where to Get the 51-K DLL? in version 6.15, is the file WBTR32.EXE, a Windows Btrieve version 6.15 represents a new architectural direction executable which is a close cousin to the NetWare Btrieve for Btrieve. The underlying Btrieve file format has changed with NLM. Access to NetWare Btrieve version 6.10 currently uses this release, and previous versions of Btrieve will no longer the same DPMI call to BREQUEST.EXE running under DOS. open and read Btrieve version 6 files. As with earlier version But a DLL-only requester for Windows is currently shipping updates such as this one, version 6 engines will read and update with the Btrieve for NetWare 6.15 Server Edition Upgrade, files created using pre-version 6 Btrieve engines correctly, which will route calls to the NetWare Btrieve process without though some Btrieve version 6 features will not work with older requiring that BREQUEST be loaded in DOS. Plans are to file formats. In addition, BTI has adopted a cross-platform eventually incorporate Windows NT Advanced Server requester architecture roughly based on the Btrieve for NetWare NLM. access in this module as well. All Changes to the Btrieve for Whereas before, individual Btrieve engines were implemented Windows Client Engine version 6.15 configuration are made in differently on different platforms (a TSR in DOS, an NLM in the initialization file BTI.INI, located in the Windows directory. NetWare, a DLL in Windows) the new microkernel database Btrieve Technologies Inc. release notes on Btrieve 6.15 engine for any given platform now has much more in common configuration options are contained in the file BTIINI.WRI. with its cross-platform cousins. The engine is implemented in DOS as a protected-mode executable program with a TSR hook. In Windows, the implementation is a Windows executable called A Brief History of Config Files, or, The Decline WBTR32.EXE, accessed by application programs via loader and and Fall of NOVDB.INI requester DLL’s. Btrieve database engines running on different platforms get To appreciate the changes, we need to look first at the 5.10 their configuration from different places, which can make setup implementation of Btrieve for Windows. Btrieve 5.10 was confusing. Recent changes both in architecture and product implemented as a DLL, about 51K in size, which handled both ownership have confused the matter further. This is a brief look program interface and file IO. Renamed WBTRLOCL, this at important developments, and how they affect Btrieve DLL could be called by the NetWare requester DLL configuration for Windows applications: WBTRCALL (about 13K in size) to handle access to files which were inaccessible to the NetWare Btrieve NLM, giving DOS Engine Configuration Windows applications client-based access to local files via the BTRIEVE.EXE version 5.x for DOS took its parameters as Btrieve for Windows 5.10 DLL, and client-server access to command line arguments. NetWare Btrieve files via the requester DLL and BREQUEST. BTRIEVE.EXE version 6.x for DOS uses BSETUP.EXE to write these to an initialization file. The Thigh Bone’s Connected to the Hip Bone... Since Windows applications cannot access the DOS Btrieve The Btrieve version 5.10 client-only configuration involves engine, these changes do not affect Windows applications an application EXE linked with WBTRCALL.DLL. A Client directly. Since DOS and Windows applications can share the Engine called WBTRCALL.DLL interfaces directly with the same files, however, it is important to be aware of them. application, handling file IO. This engine takes its initialization

10 Btrieve Developer's Journal Summer 1995 CLIENT WORKSTATION NOVELL NETWARE SERVER in use by a network server-based Btrieve process, you really ought to use that server-based process to attach to the files. For Windows Application Using Btrieve example, suppose you have data files for a DOS-based accounting package which reside on a NetWare network. The Windows NetWare Requester Btrieve for NetWare Requester (running in DOS) Server Engine accounting package uses the NetWare Btrieve NLM to service WBTRCALL.DLL BREQUEST.EXE its files, and users on the running the application WBTRVRES.DLL BTRIEVE.NLM attach to the data using BREQUEST. If you want to open those Client Loader files using a Windows application such as Microsoft Access,

WBTRLOCL.DLL you will also want to use an attachment to the server-based Btrieve NLM to open them. Attempting to open those files while Btrieve for Windows Client Engine they are in use by the NLM with a Btrieve Client Engine will SYS:\ WBTR32.EXE result in your being denied access to the files. Conversely, if WBT32RES.DLL you do manage to grab one while someone else isn’t looking, C:\ then they won’t be able to access the file. ²

Figure 1 - Inter-relationship of Btrieve for Windows Modules

Windows Engine Configuration WBTRCALL version 5.x (client) for Windows read its initialization parameters from the [Btrieve] section of WIN.INI. WBTRCALL version 6.10 (requester) for Windows read its configuration (whether or not to attempt local access, whether or not to free DOS memory, etc.) from the [brequest DPMI] section of NOVDB.INI. NOVDB.INI also contained a [btrieve] section, but this was never used; the release of the version 6 client engine for Windows came after transfer of the products to Btrieve Technologies, by which time references to NOVanything had been removed from the products. Building a Windows WBTRCALL version 6.15 (all configurations) read their initialization strings from BTI.INI. But it’s important to Btrieve Diagnostic remember when accessing client-server versions of Btrieve that the actual Btrieve engine, being a server process, is initiallized Over the past few years my trusty 486/66 has run just about when it is loaded at the server, so changes to the engine every version and combination of Btrieve configuration one parameters at the workstation will have no effect on access to might name: Btrieve for Windows, DOS, and NetWare, each files by the server. with its own initialization running in local mode, client/server NetWare Server Engine Configuration mode, peer-to-peer network mode, or combinations thereof. And every now and then a new piece of software or a change in In NetWare Btrieve client-server configuration, all file IO one of the configurations would cause something else on the takes place at the server. The Btrieve engine runs as a NetWare system to simply stop working. After considerable hair loss, I’d Loadable Module, or NLM. The parameters of this process are realize that I was loading the wrong version of one or another of set when the NLM is loaded at the server console, using a file the Btrieve components, which would mean a tedious search of called BSTART.NCF. Changes can be made in this file using hard disk and network to find out where it might be coming the BSETUP.NLM program, but, as with other Btrieve engines, from. initialization changes made to the engine do not take effect until This little program doesn’t do much, but I’ve found it to be the engine process is re-started. These settings may directly very useful in situations like these. It uses Btrieve’s version call affect the operation of Windows applications which access to determine what Btrieve Client Engine and Requester versions Btrieve files on the file server using the client-server engine. are being loaded by Windows applications, and it uses the Windows TOOLHELP.DLL to determine the path from which Mixed-Mode Access and the Difference Between each of the component modules is loading. Requesting and Demanding A slightly zippier version of this application (one with a Save option and an About box) is available for download from Client-server Btrieve engines, like NetWare Btrieve, CompuServe in the BTRIEVE and MSACCESS forum libraries. require exclusive access to the data files they open. This can Now that Btrieve Technologies has begun adding version info cause conflicts if workstations on a network loading Btrieve resources to their Windows modules, one useful addition might client engines, and other workstations using requesters for be to include this information in the display. Other possible server-based Btrieve engines try to open the same files at the improvements suggest themselves as well, such as a listing of same time. If you are attempting to attach to data files which are the options selected at initialization. ² Source Listing on page 14... Summer 1995 Btrieve Developer's Journal 11 unsigned dlen; Building Btrieve Source: File WBC.C char pblk; char kbuf; #define WIN31 HGLOBAL hText; #include LPSTR lpText; #include MODULEENTRY mod; #include “wbc.h” hText = GlobalAlloc (GHND, 16384); ////////////////////////////////////////////////////////////////////////////// lpText = GlobalLock (hText); // Function: WinMain - Program entry point dlen = sizeof (BTVERSION); // int PASCAL WinMain ( HANDLE hInstance, HANDLE hPrevInstance, // Get status information from Btrieve LPSTR lpCmdLine, int nCmdShow) stat = BTRCALL (26, &pblk, (char far *)&btrvVersion, &dlen, &kbuf, 0, 0); { if (stat == 0) MSG msg; { WNDCLASS wc; switch (dlen) { case 5: if (!hPrevInstance) if (btrvVersion.env1 == ‘W’) { wsprintf (lpText, “Btrieve Client Engine Version: %d.%d%c\r\n\r\n wc.style = NULL; Btrieve Requester Version: None\r\n\r\n”, wc.lpfnWndProc = (WNDPROC) MainWndProc; btrvVersion.ver1, btrvVersion.rev1, btrvVersion.env1); wc.cbClsExtra = 0; else wc.cbWndExtra = 0; wsprintf (lpText, “Btrieve Client Engine Version: None\r\n\r\n wc.hInstance = hInstance; Btrieve Requester Version: %d.%d%c\r\n\r\n”, wc.hIcon = LoadIcon (hInstance, IDC_ICON); btrvVersion.ver1, btrvVersion.rev1, btrvVersion.env1); wc.hCursor = LoadCursor (hInstance, IDC_ARROW); wc.hbrBackground = COLOR_WINDOW+1; break; wc.lpszMenuName = gszMenuName; case 10: wc.lpszClassName = gszWndClass; default: if (!RegisterClass(&wc)) return FALSE; wsprintf (lpText, “Btrieve Client Engine Version: %d.%d%c\r\n\r\n } Btrieve Requester Version: %d.%d%c\r\n\r\n”, btrvVersion.ver2, btrvVersion.rev2, btrvVersion.env2, if (!InitInstance(hInstance, nCmdShow)) btrvVersion.ver1, btrvVersion.rev1, btrvVersion.env1); return FALSE; break; } while (GetMessage (&msg,NULL,NULL,NULL)) } { else TranslateMessage (&msg); { DispatchMessage (&msg); wsprintf (lpText, “Status Returned from Version Call: %d\r\n\r\n } Btrieve Client Engine Version: None\r\n\r\n Btrieve Requester Version: None\r\n\r\n”, stat); return msg.wParam; } } //Get the Loaded Module information from Windows ////////////////////////////////////////////////////////////////////////////// mod.dwSize = sizeof(MODULEENTRY); // Function: InitInstance - Creates an instance of the application if (ModuleFirst (&mod)) // { static int InitInstance (HANDLE hInstance, int nCmdShow) lstrcat (lpText, “Loaded Btrieve Modules:\r\n\t { Module\tHandle\tUsers\tLocation\r\n”); ghInst = hInstance; do { ghWnd = CreateWindow (gszWndClass, if (IsBtrieveModule ((LPSTR) mod.szModule)) gszAppName, { char szTemp [1024]; WS_OVERLAPPEDWINDOW, wsprintf (szTemp, “\t%-12s\t%04.4x\t%02.2d\t%s\r\n”, CW_USEDEFAULT, (LPSTR) mod.szModule, nCmdShow, (WORD) mod.hModule, CW_USEDEFAULT, (WORD) mod.wcUsage, CW_USEDEFAULT, (LPSTR) mod.szExePath NULL, ); NULL, lstrcat (lpText, szTemp); hInstance, } NULL); } while (ModuleNext (&mod)); if (!ghWnd) return FALSE; } SendMessage (hwndEdit, WM_SETTEXT, 0, (LPARAM)lpText); ShowWindow (ghWnd, nCmdShow); GlobalUnlock (hText); UpdateWindow (ghWnd); GlobalFree (hText); } return TRUE; return 0; } case WM_SIZE: ////////////////////////////////////////////////////////////////////////////// MoveWindow (hwndEdit, 0, 0, LOWORD (lParam), HIWORD (lParam), TRUE); // Function: MainWndProc - Main window process return 0; // case WM_COMMAND: long FAR PASCAL MainWndProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) switch (wParam){ { case IDM_UPDATE: static HWND hwndEdit; SendMessage (hWnd, UM_UPDATE, 0, 0L); return 0; switch (message){ case IDM_EXIT: case WM_CREATE: DestroyWindow (hWnd); hwndEdit = CreateWindow ( “Edit”, break; NULL, default: WS_CHILD | WS_VISIBLE | return DefWindowProc(hWnd,message,wParam,lParam); WS_HSCROLL | WS_VSCROLL | } ES_LEFT | ES_MULTILINE | break; ES_WANTRETURN | ES_READONLY, case WM_DESTROY: 0, 0, 0, 0, WBTRVSTOP (); hWnd, 1, PostQuitMessage (0); GetWindowWord(hWnd, GWW_HINSTANCE), break; NULL default: ); break; } SendMessage(hWnd, UM_UPDATE, 0, 0L); return DefWindowProc (hWnd,message,wParam,lParam); return 0L; }

case UM_UPDATE: ////////////////////////////////////////////////////////////////////////////// { // Function: IsBtrieveModule - Module name filter for Btrieve modules int stat; // BTVERSION btrvVersion; static int IsBtrieveModule (char far *modName) Continued on page 37

12 Btrieve Developer's Journal Summer 1995 BTRIEVE TECHNOLOGIES TECHNICAL CORNER

SUMMER 1995 SUPPLEMENT TO BTRIEVE DEVELOPER'S JOURNAL /* COMMENTS */ Q&A - INTERFACING TO SCALABLE SQL

Hello and welcome to the Summer In the last issue, we explained Btrieve Technologies Solution issue of Btrieve Technologies’ Technical how to develop applications that Network Partner. Corner. It is hard to believe, but we use Btrieve. This article will What programming languages are celebrated our one year anniversary in explain how to develop applications supported? April! Many things have happened to that use the Scalable SQL Engine. BTI during that time. We released Scalable SQL is a relational data Scalable SQL developer kits upgrades to many of our products and access system built on the support most common 3GL gave them new names and face-lifts. We MicroKernel Database Engine languages, including C\C++, won the RealWare Award for Client/ architecture. It provides a relational Pascal, BASIC/Visual Basic, and Server Computing in Support of interface for accessing your Btrieve COBOL. Interfacing information Mission-Critical Operations at DB/Expo data. provided in the developer kits in San Francisco during May. And we Btrieve Technologies provides documents how to use the most saw the coming and going of BTI-ers. several developer kits for creating popular compilers for these We welcome Krishnan “Kam” Scalable SQL applications. In languages. Aghoramurthy as Btrieve Product addition, there are several Manager. Brett McAnally has been development tools available from How does an application call the named Scalable SQL Product Manager, other vendors. This Q & A reviews Scalable SQL engine? and Dewitt Gimblet is our new the functionality provided by the The Scalable SQL Application Advanced Product Planning Manager. Scalable SQL developer kits Programming Interface (API) Charles Craft has joined us as Director available from Btrieve provides a means for sending of Sales, and Marc Marshall as Vice Technologies. Structured Query Language (SQL) President of Development and Services. statements to the Scalable SQL One face that will definitely be What developer kits are available engine. This is done with a set of missed around BTI is that of Mad for Scalable SQL and how do I get function calls with certain Poarch. Mad has decided to pursue them? parameters which tell the Scalable other interests. Her guidance and Scalable SQL developer kits are SQL engine what to do. A status contribution to BTI, and especially to currently available for DOS (v3.01) code is returned to the calling Customer Service, will surely be missed. and Windows (v3.01); a developer application indicating whether or In her place, I have been chosen as kit supplement is available for OS/2 not the requested action was the acting Manager of Developer (v3.01). The DOS and Windows successful. An example of a Support. Many of you will recognize developer kits each include a Scalable SQL function call looks my name and face. I was in the last workstation Scalable SQL and something like this: issue of BDJ under “Who’s Who at MicroKernel engine. The OS/2 Btrieve Technologies.” So you can go supplement does not include any back and take a look! workstation engines. All three kits I, and the rest of the team, wish N HIS SSUE include documentation, interface I T I Mad well and good luck in her future files, utilities, and sample code for endeavors. And I look forward to the use when developing Scalable SQL /* Comments */...... 17 challenges and rewards ahead of me as applications. These applications can Q&A: Interfacing to SSQL...... 17 we all work together to produce quality be used with the workstation Who’s Who at BTI...... 18 products and services. Scalable SQL engine, or with the Scalable SQL 4.0...... 19 client-server Scalable SQL for Chris R. Ojeda Technical Insights...... 21 NetWare (v3.01) engine. Each Acting Manager, Customer Service developer kit can be purchased BTI Channel Partners...... 24 Btrieve Technologies, Inc. directly from Btrieve Technologies, Current Versions...... 24 Inc. or through an Authorized How to Reach BTI...... 24 Summer 1995 Btrieve Developer's Journal 13 The NLM Scalable SQL engine to decide whether your application sStatement = “UPDATE Patients SET City = ‘Austin’ WHERE Zip = 78759" can be called through exported will be run using a Scalable SQL iStatementLen = len (sStatement) symbols. Although there is not a Workstation Engine, or in a Scalable developer kit available for creating SQL client/server environment. The status = XQLCompile (iCursorID, iStatementLen, sStatement) NLM applications, it is possible to application interface is the same in develop an NLM that calls the either case. The exact structure of the call SSQL.NLM. The function calls are What support is available for varies depending on the platform basically the same as the calls developing an ODBC application and language being used. Unlike defined in the DOS, Windows, or that uses Scalable SQL? the Btrieve API, which has one OS/2 kits. With the Programmer’s basic function defined (BTRV) which Manual from one of these packages, Currently, Btrieve Technologies performs all database activity, the and a few additional interface files does not supply an ODBC driver for Scalable SQL API has many available from Btrieve Technologies the Scalable SQL engine. This is functions defined. These functions Technical Support you can create an planned as part of an upcoming each perform separate activities, NLM application. Of course, you release of Scalable SQL; see the such as logging in to a database, will also need the NLM Software “Scalable SQL 4.0” article on the logging out of a database, sending Developer’s Kit available from following pages for more in an SQL statement, fetching data, Novell. information about the next release etc. Most activity is performed by What’s the difference to my of Scalable SQL. A third-party sending an SQL statement to application if I’m using a Scalable Windows ODBC driver for Scalable Scalable SQL via the XQLCompile SQL workstation engine or a SQL v3.01 is currently available function as shown above. The requester? from Intersolv. Scalable SQL Programmer’s Manual included in each developer kit When compiling and linking describes in detail how to set the your application, you do not need parameters for each function, and what results to expect after the operation is complete. WHO’S WHO AT BTRIEVE TECHNOLOGIES

How does a DOS, Windows, or 12345678901234567 123456789012345678

12345678901234567 123456789012345678 OS/2 application make Scalable 12345678901234567 123456789012345678 12345678901234567 123456789012345678 SQL calls? 12345678901234567 123456789012345678 12345678901234567 123456789012345678

12345678901234567 123456789012345678

12345678901234567 Brett McAnally 123456789012345678 James Sneary The methods used for calling 12345678901234567 123456789012345678

12345678901234567 123456789012345678

Scalable SQL on different platforms 12345678901234567 123456789012345678 12345678901234567 Scalable SQL 123456789012345678 Engineering are the same as those described for 12345678901234567 123456789012345678 12345678901234567 Product 123456789012345678 Leader, Btrieve in the previous issue of 12345678901234567 123456789012345678 12345678901234567 123456789012345678 Scalable SQL 12345678901234567 Manager 123456789012345678

Btrieve Developer’s Journal. The 12345678901234567 123456789012345678

12345678901234567 123456789012345678

DOS Scalable SQL engine is 12345678901234567 123456789012345678 implemented as a TSR (SSQL.EXE) which is called by most applications Brett McAnally joined BTI as a Jim Sneary leads the BTI Scalable via an interrupt. The Windows founding team member in April 1994. SQL Development team. His primary Scalable SQL engine is called As Scalable SQL Product Manager, duties include product design, through a Dynamic Link Library Brett's primary duties include managing, development and implementation. Jim (WXQLCALL.DLL). An OS/2 defining, and coordinating the is also responsible for resolving software Scalable SQL application also uses a production of Scalable SQL. defects in existing products and Dynamic Link Library Before joining Product Marketing, determining resource requirements for (XQLCALLS.DLL), which is a Brett was a member of the BTI Business existing and future development efforts. component of the Scalable SQL Development group. In this role, he Prior to joining BTI as a founding requester for OS/2 used in worked with strategic partners like member, Jim was a software engineer at conjunction with Scalable SQL for Novell and Microsoft. Prior to his tenure Novell for seven years and a Software NetWare. Each Developer Kit at BTI, Brett spent six years at Novell in Developer at SoftCraft before his Novell includes interface files that are Product Marketing and Sales. tenure. either source code or object Brett is a graduate of the University At the University of Texas at Austin modules that are linked to the of Texas at Austin where he received a Jim received his Bachelor of Science in application source code. Bachelor of Business Administration. Mathematics with a Computer Science How does an NLM application call He and his wife, Kelli, are expecting minor. He and his wife Nancy have a the Scalable SQL for NetWare their first child, Emalee, in August. In two year old daughter, Jennifer. Jim’s NLM? his spare time, Brett enjoys golf, reading hobbies include bowling, golf, tennis, and family. racquetball, pool, and ping pong. 14 Btrieve Developer's Journal Summer 1995 SCALABLE SQL 4.0

Scalable SQL v4.0 is the next conflict resolution rules that allow the include variables, IF statements, LOOP generation client/server relational administrator to state precedence when statements, and SQL cursors. Triggers database engine from Btrieve an update conflict occurs. These conflict provide you with a means of defining Technologies. This product has several rules determine which update occurs. and enforcing any kind of data integrity new features based on comments and They may be as simple as “the update constraint. They are invoked whenever suggestions from important customers that occurred at the earliest time,” or a specific data modification occurs like you. This article describes these more complex, such as “if user A and (such as INSERT, UPDATE, or DELETE), features so you can share our user B both updated the same record, and each trigger is defined on a specific excitement about the upcoming release then user A’s update succeeds, and user table. You commonly use triggers to of Scalable SQL v4.0 (SSQL). B’s update is ignored.” enforce business rules, such as “if the invoice falls below 10, then restock the Database Replication Query Optimization supply.” SSQL supports multiple triggers of SSQL v4.0 incorporates a cost- With today’s global market the same type on the same table; you based query optimizer. This optimizer expansion, data is being distributed can define more than one INSERT (or not only looks at the indexes defined in more than ever before, and sharing data UPDATE, or DELETE) trigger on a given your database, but also looks at the data among several corporate sites is table. This helps you to produce much itself to determine the fastest access becoming commonplace. One of the clearer definitions, as the following plan. As the data in your database problems with distributing and sharing example illustrates: changes, SSQL may choose a different distributed data is consolidating the access plan when executing your modifications at each of the corporate queries. With the new optimizer, SSQL sites. SSQL v4.0 solves this problem by CREATE TRIGGER UPD_LOW_STOCK_PRICE includes two other changes: enhanced supporting two-way database ON STOCK_PRICE ORDER 1 fetching algorithms, and a set of replication, which allows you to make AFTER INSERT application interface functions that let changes to any copy of a database, and FOR EACH ROW an application query information about then distribute those changes to all REFERENCING NEW AS NEW_STOCK_INFO the selected access plan. other copies (replicas) of the database. WHEN NEW_STOCK_INFO.PRICE < ( SELECT Low This distribution of the changes is called FROM HighLow Transaction Processing replicating the database, and SSQL WHERE Company = provides a choice of replication modes: NEW_STOCK_INFO.Company ) SSQL includes enhanced immediate, time-scheduled, or on- BEGIN transaction processing in three areas. demand. In immediate mode, whenever — Record the new minumum in HighLow. First, it includes support for two-phase you make a change to any data in the commit, which maintains the “all-or- database, the data replicates to all other nothing” nature of transactions, even if UPDATE HighLow SET Low = sites immediately. In time-scheduled NEW_STOCK_INFO.PRICE the data files accessed within the mode, your data modifications replicate transaction are distributed among WHERE Company = at specific scheduled times. In on- NEW_STOCK_INFO.Company; several file servers. Second, SSQL demand mode, the administrator END includes support for nested transactions, controls when data replicates by which give you the ability to specify manually triggering the replication checkpoints to which you may want to CREATE TRIGGER UPD_HIGH_STOCK_PRICE action. rollback. Finally, SSQL includes full ON STOCK_PRICE ORDER 2 As a database becomes more transactional logging, which causes all AFTER INSERT widely distributed and users begin operations on a single database to be FOR EACH ROW updating each replica of the database, logged in a single file, improving both REFERENCING NEW AS NEW_STOCK_INFO conflicts between updates become more transaction durability and logging WHEN NEW_STOCK_INFO.PRICE > ( SELECT High common, and must be resolved. SSQL performance. FROM HighLow provides two methods of resolving WHERE Company = update conflicts: reducing the number Stored Procedures and Triggers NEW_STOCK_INFO.Company ) of conflicts that occur, and resolving the BEGIN conflicts that do occur. To reduce the SSQL v4.0 includes support for — Record the new maximum in HighLow. number of conflicts, SSQL provides stored procedures and triggers. Stored update filters that allow the procedures provide you with a means of UPDATE HighLow SET High = administrator to exclude updates based incorporating your application’s NEW_STOCK_INFO.PRICE on certain conditions, thereby only database logic in the database using WHERE Company = allowing specific updates to propagate common programming and SQL NEW_STOCK_INFO.Company; to other replicas of the database. To language constructs. These constructs END resolve the conflicts, SSQL provides Summer 1995 Btrieve Developer's Journal 15 The previous example uses two triggers: one to record a change to NEW DATA TYPES IN SSQL 4.0 the minimum price of a stock, and one to record a change to the INTEGER Expanded to include support for 1, 2, 4 and 8 byte maximum price of a stock. By using values. two triggers, you can make each trigger condition very basic, and UNSIGNED New data type for SSQL. Valid sizes are 1, 2, 4 and 8 still get the complete functionality bytes. SSQL uses the same data format as the you need. INTEGER data type when storing UNSIGNED values, but interprets the values as non-negative. Programming Extensions CURRENCY New data type for SSQL. Always an 8 byte value. SSQL v4.0 includes several SSQL uses the same storage format as the INTEGER features that widen its range of and UNSIGNED data types, but interprets the values development environments, and with an implied 4 digit scale. This means that SSQL improve performance in currently interprets all values as the actual binary value, divided supported environments. First, SSQL by 10000. The fractional component of the value is includes an ODBC driver that has significant. This data type is the same as the Visual demonstrated very promising Basic and Access CURRENCY data type. performancein the early phases of development. Second, SSQL TIMESTAMP New data type for SSQL. This data type represents the includes several new and enhanced date and time (in micro-seconds) in Universal Time data types, as shown in the Coordinate (UTC), and occupies 8 bytes of storage accompanying table. Finally, Visual space. Basic™ compatible scripting provides and industry standard LVAR Enhanced to allow columns of unlimited size. To language for developing routines NOTE define a NOTE or LVAR column of unlimited size, which can be executed directly or use the default size. (Previous versions of SSQL had within an application. no default size for these two data types.) SSQL includes additional fetch operations that allow you to retrieve BLOB New data type for SSQL. This data type allows you to all column descriptions for a query include any type of data in the value. Like the NOTE in one call, or retrieve value and LVAR data types, if you specify a data value size descriptors for each record fetched. for a BLOB column, that size must be from 1 to The value descriptors include 32767. If you require more space for the data values information about each column in each record, you define the BLOB column with the value in the fetched record (null default size, which is unlimited. value, truncated data value, etc.). SSQL also includes enhancements to the XQLFetch API to handle Internationalization performance of client/server BLOB, LVAR, and NOTE columns of installations in WAN configurations. unlimited size. Finally, SSQL SSQL v4.0 is the first SQL This IPX is provided in addition to incorporates chunk operations that product produced by Btrieve the current SPX support, since SPX are structured very similarly to the Technologies that is available as a is a less error prone protocol. SSQL Btrieve chunk operations. These localized version for Japan, and also includes very large file support, operations let you access the eventually for European and other which increases a database table’s portion of your data record that is Asian/Pacific languages. SSQL maximum data file size from 4 beyond the 32K limit that the supports localized database object gigabytes to 64 gigabytes. XQLFetch API imposes. Btrieve’s names and collation sequences that Additional Windows utilities chunk operations allow you to read you can include on columns or improve ease-of-use and include rectangular areas of a data record, indexes. Each localized version Status Monitor, Administration, and or specific unrelated segments of a supports the definition of columns Maintenance tools. data record. All of the XQLFetch that operate based on the collation enhancements are also available in and character set for that language. the xInsert and xUpdate API calls (except for the chunk operations, Other New Features which are available through the xUpdate API to enable you to add The SSQL v4.0 engine includes data beyond the 32K API boundary). support for the IPX network protocol, which improves the 16 Btrieve Developer's Journal Summer 1995 TECHNICAL INSIGHTS Making Btrieve/Brequest Work In settings and the session tab must be chosen. interrupt 1C is triggered. This can be fixed with a DOS/Windows Boxes Under OS/2 Next, click on the DOS/Windows Setting modification of the bti.cfg file. button. This will bring up another pop-up menu Btrieve 6.15 First, add the line “timerint=8” to the bit.cfg that will either categorize the resources or list under the [Btrieve client] section. If this does not How can Btrieve/BRequest be made to them. If it shows the former, click to view all resolve the problem, enter the line with work under OS/2? As is the case with all new resources. “timer=No” instead. environments, each piece should be stable, and The following is a list of resources, how If having problems with IPX/SPX initializing, the foundation of a good DOS BOX should be they should be set, and any special instructions check the AUTOEXEC.BAT for the TBMI2.COM present. Step 1 will be to make sure the that might apply: Line as discussed above. The Config.sys should application runs without a problem with 6.15. be checked as well to make sure SPX.SYS and Step 2 will be to make sure the DOS BOX is set WINDOWS_RUNMODE enhanced SPDAEMON.EXE are not commented out. up and the NetWare requester is installed If launching multiple DOS or Windows correctly. Step 3 is to make sure Btrieve is DOS_AUTOEXEC AUTOEXEC.BAT boxes, the user must change the local file sharing configured correctly for what needs to be May need to be modified to load BRequest to multiengine, as well as specify a unique accomplished. DOS_LAST_DRIVE E Should be the last physical drive. location for each “box” launched. These changes Make sure the application works with 6.15 are made in the Bti.ini or the Bti.cfg. XMS_MEMORY_LIMIT 2048 This is the first and easiest step. Load the Needed only for local Btrieve, may need Remember, the 2.11 requester should be application on a standard DOS or Windows more depending on configuration. used with the R211ft.exe patch. These have quite machine. Make modifications to the bti.cfg or a few fixes that directly affect Btrieve when using NETWARE_RESOURCE GLOBAL/PRIVATE bti.ini to make it run successfully. Move this the NLM and Brequest. Following these steps bti.cfg or bti.ini to the OS/2 machine with the Must match NetWare requester install should have the system up and running. If you application. This will allow a verified working option. run into a Btrieve-related problem during this application to be set up. These settings should be saved. process, you can contact Btrieve Technologies Support. Please be sure to state that you are Make sure the NetWare requester is set up running under OS/2, and be at the machine with correctly Next, the AUTOEXEC.BAT should be addressed. This program will need to be the issue. If local Btrieve is being used instead of the executed by the DOS/Windows box. The Btrieve NLM, read below to modify the NetWare requester installation should have XMS_MEMORY_LIMIT. All other notes apply to Scalable SQL Status 2103 / Btrieve included TBMI2.COM and NETX.EXE. If not, it the NLM and requester only. will need to be added. The NETX.EXE that is Status 20 This setup is based on information that was loading here must be the one that came with the Scalable SQL for NetWare 3.01 available as of the date of this document. It is not OS/2 requester. When loading, if it does not Btrieve for NetWare 6.15.2 meant to supersede any suggestions made by echo “GLOBAL” or “PRIVATE”, it is the wrong With the Windows “DLL requesters” Novell. The information is based on Btrieve one. released with Scalable SQL for NetWare v3.01 Technologies experience, and may not be the BRequest will need to be loaded if using and Btrieve for NetWare v6.15, many customers only configuration that will work. DOS or the DPMI requester for Windows. It are running into problems connecting to the First of all, the most recent version of the should be loaded before Windows, unless you engine running at the server. Previous versions of NetWare requester will be needed: as of this are using the WBTRCALL.DLL that ships with Scalable SQL and Btrieve included DOS date, that is version 2.11. The setup requires Btrieve for NetWare 6.15. BRequest should be Interface (DPMI) requesters for patch file R211ft.exe. For this, it is a good idea to loaded after NETX.EXE in a Global DOS box, or Windows applications, which required the DOS check NWREQ.SYS in the NetWare directory. If after a login is run in a private DOS box. requester to be loaded before Windows. The NWREQ.SYS is dated ‘95, the patch has been TBMI2.COM should find a net.cfg that has new DLL requesters do not require this anymore, applied already. If not, one will need to be the following lines added to the top of the file: and are built using the Novell TLI (Transport added. ECB COUNT = 20 Layer Independent) protocol. As a result, if Both of these files can be found in the Windows is not properly configured for DATA ECB COUNT = 89 Novfiles forum on CompuServe. Before the NetWare, the new requester will not work, most requester is installed, a decision should be made This is necessary to instruct TBMI2.COM to often resulting in a status 2103 “Scalable SQL is on whether Global or Private DOS boxes will be allocate enough resources to manage the SPX/TLI not Active on the Requested Server” from a used. If you are still experiencing problems, such packets being used in the Btrieve requester. Scalable SQL Windows application, or a status as a Btrieve error 79, add the line VME=NO to Make configuration changes 20 “The Microkernel or Btrieve Requester is the top of your NET.CFG file. Under OS/2, the In order to launch the application under Inactive” from a Btrieve Windows application. Windows and DOS environment have basically Windows/DOS, the user must login to the The following is an explanation of the the same settings for the DOS emulation that will network. If you are using Global DOS boxes, go configuration for using the new requesters and be running underneath them. to an OS/2 box and login. All of the mappings some troubleshooting hints for resolving these The following is a generic setup procedure, will be available when starting the DOS box. If errors. and its instructions should be applied using a private DOS BOX, that DOS box must Configuration accordingly based on the resources that are be selected for logging in. After doing so, run the The following Windows files are required being used. application. It should work just fine. to run a Windows Scalable SQL application: Single click on the icon of the Windows When using local Btrieve, there are some and DOS box from which the Btrieve application problems one might run into that can easily be WXQLCALL.DLL* 63K 8/10/94 will be launched. Select the right mouse button. addressed. On certain hardware configurations, WXQLRES.DLL* 3K 8/16/94 This will bring up a menu from which the Btrieve for DOS will lock up when the user timer Summer 1995 Btrieve Developer's Journal 17 WBTICOMM.DLL* 5K 8/10/94 when testing the Btrieve Windows requester, use successfully communicate to the server engine. TLI_WIN.DLL* 15K 6/08/94 the Btrieve File Manager, which is included with To test Scalable SQL, load SQLREQ in a TLI_SPX.DLL* 52K 6/08/94 Btrieve for Windows. Refer to the appropriate DOS box under Windows, and use the XQLI NWCALLS.DLL Installation and Operation manual included with utility to access a database on the network. Refer NWIPXSPX.DLL Scalable SQL and Btrieve for details on running to the Scalable SQL Installation and Operation NWLOCALE.DLL* 38K 11/2/93 these utilities. manual for instructions on using the XQLI utility. Make sure you only have ONE copy of To run a Windows Btrieve application, To test Btrieve, load BREQUEST in a DOS each of the files listed in the configuration these files are necessary: box under Windows, and attempt to run a DOS section. They can be located in your Btrieve application that accesses a file on the WBTRCALL.DLL* 38K 3/14/95 \WINDOWS\SYSTEM directory, your server. If you have a DOS version of the WBTRVRES.DLL* 4K 3/11/95 application directory, or a directory in your path. BUTIL.EXE utility, you can attempt to perform a WBTICOMM.DLL* 7K 3/14/95 Search your entire local drive and all network BUTIL -STAT of a Btrieve file on your network. TLI_WIN.DLL* 15K 6/08/94 drives that you are search mapped to for If you do not have a DOS application, you TLI_SPX.DLL* 52K 6/08/94 duplicates of these files; rename or delete any can use the BSIM.EXE utility that is available for NWCALLS.DLL that are found that do not correspond to the sizes download on Compuserve (file BTOOLS.EXE in NWIPXSPX.DLL and dates listed above. LIB 5 of the BTRIEVE forum). Running “BSIM NWLOCALE.DLL* 38K 11/2/93 Check the SYSTEM.INI file in your local ” after loading BREQUEST will Windows directory; make sure the following attempt to open the specified file. The files marked with * are included in the entries are included in these sections: If these tests fail, you may have problems Scalable SQL or Btrieve package. The remaining with SPX communication in general, rather than DLLs are provided by Novell. Other files which [boot] the Scalable SQL and/or Btrieve requesters. To are provided by Novell are also used in network.drv=.drv confirm this, try running the NetWare utility conjunction with the Windows requesters, such RConsole.exe in the DOS box. The RConsole as VIPX.386, VNETWARE.386, and [386Enh] utility requires the REMOTE.NLM and NETWARE.DRV. network=*vnetbios, vnetware.386, vipx.386 RSPX.NLM components loaded at your server. If Refer to the Troubleshooting notes below If you are running Windows for RConsole is unable to successfully access the for more details about the versions of these files. server, you have an SPX configuration problem Note: the Btrieve Windows requester that is Workgroups and it is configured for both the Microsoft network and NetWare, make sure the that must be addressed before Scalable SQL or included in the Scalable SQL v3.01 package is Btrieve will work. the DPMI implementation which requires SYSTEM.INI file contains entries similar to the Consult your LAN administrator or your BREQUEST loaded before Windows. following: local Novell reseller for assistance in NetWare The Scalable SQL and Btrieve Windows [boot] configuration. requesters use a file called BTI.INI which must network.drv=wfwnet.drv If the DOS tests are successful but the be located in the users local Windows directory. Windows requester still fails to connect, the The following sections and settings of this file are secondnet.drv=netware.drv problem lies somewhere in the Windows pertinent to using the requester: [386Enh] network configuration. For example, a Windows network=*vnetbios,*vwc,vnetsup.386,vredir.386,vserver.386 for Workgroups user resolved the problem after [Scalable SQL] secondnet=vnetware.386, vipx.386 finding an incorrect frame type setting in their local=No NET.CFG and PROTOCOL.INI requester=Yes Also, execute the Network Setup and If you are attempting to use the requesters remove the IPX/SPX compatible driver from the in a Windows session running under OS/2, first [Scalable SQL Requester] adapter. If this TDI layer is not installed, then the make sure they are working on a straight datalength=4096 Novell VIPX.386 driver interprets SPX Windows workstation. If so, refer to the communications. Technical Insight “Making Btrieve/BRequest [Btrieve] Check the versions of the following files in Work In DOS/Windows Boxes Under OS/2” for local=No your \WINDOWS\SYSTEM directory: more configuration specific to this environment. requester=Yes NETWARE.DRV, VNETWARE.386, and Currently, the Scalable SQL and Btrieve VIPX.386. The *.386 files should be dated Windows requesters will not work in a [Btrieve Requester] October ’93 or later. Also, there are two different Windows session running on an NT workstation. datalength=4096 NETWARE.DRV files - one is used in This is due to a problem in the Windows NT IPX conjunction with NETX.EXE and one is used in driver support in conjunction with an application The above settings instruct conjunction with VLM.EXE. Make sure you have using the TLI and SPXII interface. It is not known WXQLCALL.DLL and WBTRCALL.DLL to load the appropriate version of this file. These files are at this time when a fix will be available for this the Windows requester support, and to allow a part of the Windows support for NetWare, and combination. To avoid this problem, the older datalength of 4096 (corresponding to the /d: are available from Novell. requesters which required the DOS TSR loaded parameter on the DOS requester used in the Check the versions of the Novell DLL files before Windows (i.e. from AUTOEXEC.NT) can older configuration). used by the requesters: NWCALLS.DLL, still be used. NWIPXSPX.DLL, and NWGDI.DLL. These Troubleshooting should have a date of November ’93 or later. If When troubleshooting the Windows Compiling Visual Basic™ for Windows you have older versions of these DLLs, you can Btrieve for Windows 6.15 requester, it is best to use a standard utility download updated versions from the Novell provided by Btrieve Technologies rather than a forum on Compuserve, or obtain them from your When compiling Microsoft Visual Basic™ custom application. When testing the Scalable local Novell reseller. for Windows applications, the error statement SQL Windows requester, use the SQLScope Make sure a DOS application using the “Bad DLL Calling Convention” may be reported. utility, which is included with Scalable SQL; DOS Scalable SQL or Btrieve requester can This happens when an application does not 18 Btrieve Developer's Journal Summer 1995 explicitly declare the DefInt A-Z statement prior Btrieve.nlm. In addition to this, during peak This problem was seen on a NetWare to the Btrieve function declaration. demand time, the Btrieve.nlm would appear to 3.12 server and a NetWare 4.10 server, both There are two possible ways to solve this halt. The reason for this was due to the of which had an NE3200 network card and an problem. Add the DefInt statement, or redefine collisions that were taking place at the incorrect NE3200.LAN driver. The problem the function declaration as shown in the concentrator. These collisions were causing was corrected by updating the NE3200 LAN following example: the packets to be dropped. Closer inspection card driver at the server. using BTRMON’s Statistics screen revealed Declare Function btrcall Lib that BSPXCom was still sending packets, but it “wbtrcall.dll” (ByVal Op% AS Integer, was waiting a long time to resend them File Versions Returned from Btrieve ByVal Pb$, Db As Any, DL% AS Integer, because of the high SPX parameters. Because File Manager Kb As Any, ByVal Kl% AS Integer, ByVal of the long wait between retries, the users Btrieve 6.x Kn% AS Integer) AS Integer were rebooting their workstations. The The Btrieve for Windows v6.15 product is collisions at the concentrator made the SPX supplied with a File Manager that allows for Slow Return from BSTOP and Btrieve layer unstable. This instability contributed to opening a Btrieve file and viewing its statistics. the status 95’s and made Btrieve unstable. Appears to Halt The Version field can return several values. Btrieve for NetWare 6.x This value corresponds to the minimal Btrieve Using Get Next Extended With version which can support the file. Possible A customer was experiencing two distinct Variable Length Records values are: problems: the network was dropping packets Btrieve 6.x due to concentrator collisions, and status 95’s 3.00 Use Btrieve v4.00 or earlier. (session no longer valid) were being returned A status 61 (Workspace too small) may from Btrieve. be returned by the GetNextExtended 4.00 The file uses new features in 4.10, The customer consulted Btrieve operation. The file being accessed allows such as supplemental keys and key Technologies about the status 95’s and was variable length records, and the error is only types. given the standard advice for this situation, encountered when a long record is accessed. 5.00 The file uses new features in 5.00 which is to raise the SPX timeout parameters In this example, the application’s data such as compression, key only, data from the following defaults: buffer for the GetNextExtended call is set up only files. to retrieve only the fixed portion of the record. Net.cfg According to the “Btrieve for Windows 6.00 The file uses new features in 6.00 SPX Abort timeout = 540 Installation and Operation Manual”, an such as PATs, case-insensitivity, more SPX Listen timeout = 108 internal databuffer overflows producing a than 24 key segments. status 61. SPX Verify timeout = 54 There is a buffer used by Btrieve when If you want the version to display a processing extended operations. This is particular value, the file must be created with an SPXConfg.nlm configured by the /b: parameter. Currently, appropriate feature found in that version of SPX Watchdog Abort Timeout = 540 you need to set the /b: parameter to the largest Btrieve. SPX Watchdog Verify Timeout = 108 record size that will be processed by the SPX AckWait Timeout = 54 extended operation. The /b: parameter is set Database Access across a WAN SPX Default Retry Count = 10 to a K value (16 means 16K which is the Btrieve for NetWare default; 64 is the maximum). Scalable SQL for NetWare Notice that the Verify, Listen, and Abort Starting with the 6.15 release of NetWare timeouts in Net.cfg, and the AckWait, Verify and Btrieve, the use of this buffer has been If a requester, either Btrieve or SSQL, is Abort timeouts at the server are in a 1:2:10 ratio. enhanced so that it only has to be configured unable to see remote file server, make sure all Generally, it is advised that these parameters be large enough to hold the data that is being routers are configured so they are not filtering doubled or tripled using SPXConfg at the server returned out of each record, or the data being Btrieve or Scalable SQL SAP (Service Advertising and in the net.cfg on the workstation. If the filtered, whichever is larger. Previous versions Protocol) packets. Btrieve advertises as service 75 problem still does not disappear, the require it to be configured to hold the entire (4B hex), and Scalable SQL and named recommendation is to use diagnostic tools, such record. databases advertise as service 76 (4C hex). as Lanalyzer, to see what problems might exist at the SPX layer. Performance Problem with NetWare Status 11 in Xtrieve with Btrieve 6.15.x After being advised on the situation, the Btrieve for DOS customer inappropriately set SPX parameters at Btrieve the server to the following: Btrieve for NetWare 6.1x When Btrieve for DOS v6.15.x is used in conjunction with Xtrieve PLUS to access a file, a A Btrieve application accessing the Status 11 (Invalid File Name) will be returned if SPXConfg.nlm Btrieve NLM on a NetWare server would the dictionary contains a relative path as part of SPX Watchdog Abort timeout = 4500 sometimes run very slowly with frequent that file’s location. For example, suppose the pauses, even though the server showed no SPX Watchdog Listen timeout = 200 dictionary contains a location of activity during these pauses. This occurred SPX AckWait timeout = 3200 AP\PATIENTS.DTA for the Patients table, which when there was just one user on the system. It SPX Default Retry timeout = 255 is located under the F:\APP\DATA directory. In was discovered that when another order for Xtrieve to find the file, the XTRPATH workstation issued any request to the server, environment variable is set to F:\APP\DATA. Notice that the AckWait, Listen and Abort such as a DIR command, the Btrieve However, when attempting to read from the timeouts are no longer in the proper ratio. The application would speed up. (Note that this Patients table, a Btrieve status 11 is returned. result of this was that whenever a Bstop was second workstation did not issue any Btrieve issued, it took about an hour to unload the (This problem does not occur when using Btrieve commands.) for DOS v5.10a.)

Summer 1995 Btrieve Developer's Journal 19 TECHNICAL INSIGHTS CONT'D. CURRENT VERSIONS

If the user’s current working directory is the same as the XTRPATH setting when Xtrieve is Btrieve Data Management Products started, the status 11 will not occur. For example, if Xtrieve is started from the F:\APP\DATA directory, the F:\APP\DATA\AP\PATIENTS.DTA file will be opened successfully. The Xtrieve Btrieve Engine for DOS...... 6.15 executable does not have to reside in the F:\APP\DATA directory, nor do the DDFs. It just has to Btrieve Developer Kit for DOS...... 6.15 be the user’s current working directory. Btrieve Engine for Windows...... 6.15 Accessing Local Files With Btrieve For DOS Btrieve for DOS 5.x Btrieve Developer Kit for Windows.....6.15 When accessing a local file with Btrieve for DOS, the time it takes for Btrieve to read the next physical record increases as it gets deeper into the file. This situation is due to the way DOS Btrieve Engine for OS/2...... 6.15 handles the FAT (File Allocation Table) for random accessed files. The larger the file, the longer it Btrieve Developer Kit for OS/2...... 6.15 takes to do a sequential search of the FAT in memory. Sometimes it will actually thrash the DOS buffers, thus producing an increase in access time. To avoid this problem, open the file in Btrieve for NetWare Server...... 6.15 Accelerated mode or Exclusive mode and/or increase the BUFFERS in the Config.Sys. Btrieve for Windows NT Server...... 6.15 Btrieve Dev Kit for Win NT Server...... 6.15 BTI AUTHORIZED CHANNEL PARTNERS Scalable SQL Relational Data AUSTRALIA MALAYSIA Fagan 61-3-9699-9899 Autocomp 6-03-2442002 Management Products Scalable SQL for DOS...... 3.01 BELGIUM NETHERLANDS SSQL Developer Kit for DOS...... 3.01 IQN 32-16-502381 Artefact 31-15-617532 Scalable SQL for Windows...... 3.01 SSQL Developer Kit for Windows...... 3.01 BRAZIL RUSSIA Inbras 55-11-2884077 ELCO 7-095-1315555 Scalable SQL for NetWare...... 3.01 Lanit 7-095-2673038 SSQL Dev Kit Supplement for OS/2.....3.01 CROATIA Unitech 7-095-9395069 SYS 385-1-615223 LOVINIA S Query and Reporting Tools CZECH & SLOVAK REPUBLICS OPAL 386-64-632359 Abakus 42-2-24510942 Oksystem 42-2-6843413 SOUTH AFRICA Xtrieve for DOS...... 4.11e SWS 42-67-981446 SYS:COMM 27-11-8867812 Xtrieve for OS/2...... 4.11e

FRANCE SWEDEN Interquad 33-1-41101500 Linsoft 46-13-111588 Micro Sigma 33-1-46229988 Scribona 46-8-7343400 OW TO EACH GERMANY THAILAND H R BTI Compu-Shack 49-2631-9830 Thaisoft 66-2-237-7622 Btrieve Technologies, Inc. Sienersoft 49-6126-5950 8834 Capital of Texas Highway North SOS 49-8212-57820 UNITED KINGDOM System Science 44-71-8331022 Suite 300 HUNGARY Austin, Texas 78759 3Soft 36-1-212-2552 UNITED STATES/CANADA Phone: (512) 794-1719 Walton 36-1-2679010 GATES/Arrow 800-332-2222 (800) BTRIEVE 803-627-2100 ISRAEL Fax: (512) 794-1778 Mashov 972-3-7520190 GBC/Vitek 800-229-2296 CompuServe: GO BTRIEVE 609-767-2500 InterNet: [email protected] ITALY [email protected] Programmer's Shop 800-421-8006 A&B 39-10-2770530 [email protected] 617-740-2510 You may also contact individual staff members JAPAN via the Internet. The BTI Internet Domain Name THER OUNTRIES Novell Japan 81-3-54811161 O C is btrvtech.com and user names consist of the Contact Btrieve Technologies person’s first initial followed by up to seven AG-Tech 81-52-9512706 512-794-1719/Fax 512-794-1778 characters of the last name.

20 Btrieve Developer's Journal Summer 1995 How Big is that Btrieve File on the Hard Drive? By Douglas J. Reilly Access Microsystems, Inc. Email: [email protected]

ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ Why is it so difficult to predict file size? “I have a file that has 100,000 records that are 127 Btrieve files are not just data. Some other database/ bytes long. How come the file is so much bigger than record manager systems have two types of files: Data 13 Meg?” files and Index files. In dBase III, the last of the ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ dBase and descendants that I am actually familiar “I want to know how big my Btrieve file will be if I with, the data file contained a minimal header, have a 400 byte long record with 7 keys, all but one followed by the records and an active flag for each of which allow duplicates?” record. Using the data file only, you could do little ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ more than scan through the files and get them back in retrieval order. dBase files use index files that contain “I am setting up a database that will be used on the information required to look at the records in several hundred machines, each with its own database. some other order. How large will the Btrieve files for these databases get?” Btrieve files contain everything required for ŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸŸ accessing the file in a single file, with each type of information contained on individual “pages” of the I have heard these questions dozens of times. file. If you are not familiar with the concept of pages The first two questions never got me into looking at in a Btrieve file, refer to the last two installments of the details of Btrieve file sizes. I always figured, “It this column, where I have beaten the subject to death. almost does not matter. Disk Suffice it to say that the issue of space is cheap. Get 4 times what pages is critical to understanding you think you might need, and how Btrieve files get to be the you will have no problem.” The size they do. last question did get me thinking File size Look at figure 1. This is the about this issue for the first time statistics screen from my since the time I wrote a system determination BTFILER utility that displays that was intended to have the information on a Btrieve file, Btrieve database reside on is more an WRIN.DAT. This is a fixed floppies. If you are specifying length, version 4 format file. what size disk drive should be art than a Note that if you create a Btrieve purchased for hundreds of file with Btrieve 5.x and it does machines, that 4x multiplication not take advantage of any 5.x factor mentioned above seems a science related feature, such as variable bit lame. “Boss, I think we need length, Btrieve 6.x will report 1 gig drives on each of 300 the format as 4.0. In addition to machines for the XYZ project, but just get 4 gig to be the normal statistical information such as record safe...” I decided that maybe this issue deserves more length, page size and number of records, it reports thought. “Bytes per Record” and “% utilization”. These

Summer 1995 Btrieve Developer's Journal 21 potentially confusing values have very specific meanings. Bytes per record simply means the total size of the file divided by the number of records it contains. This is not the same, and in fact will never be the same, as the record length! In the example in figure 1, notice that the record length is reported as 770, and the bytes per record is reported as 1018. This means that although each record is only 770 bytes long, the overhead of the file, the 8 indices or keys, Figure 1 - File Statistics for Sample File WRIN.DAT the File Control Record (FCR) and in version 6, Page Allocation Table (PAT) pages, and space where a hex editor, it appears that the only index page that deleted records were takes up an additional 248 bytes looks as if it is properly set up (that is, with the bytes per record. The percent utilization simply measures that indicate a page belongs to a particular index in a the space devoted to data as a percent of the total file Btrieve 5.x file) is a page that is for index 0 (also, the size, in this case, 75.6 percent. only index that does not allow duplicates and is not a To try and get a better feel for the actual NULL key). The same file, created in version 6 overhead, I packed this file - essentially doing a format, has 13 pages. The pages are: 2 FCR pages, 2 CLONE followed by a COPY to ensure that no space PAT pages, 1 for each index (for a total of eight) and was taken up by deleted records. The record length, one for data. of course, remained the same. In the case of the version 6 But the bytes per record was file, all the pages have what reduced to 994. This file had appear to me to be the details in very few deleted records, but Boss, I think we the header to clearly identify the deleted records did take up, them. This file size will not on average, 24 bytes per valid need 1 gig drives increase for some number of record. Percent utilization on each of 300 records. Determining that increased to 77.5 percent. number will help determine the Note that if I deleted every machines for the size of the file as it grows. record from the file, the file XYZ project, but The record image of 770 would still take up exactly the bytes is the major part of the data same space on the disk unless I just get 4 gig to page, but there are other things did the equivalent of the pack associated with each record that previously mentioned. An be safe... take space on the data page. empty clone of the WRIN.DAT From what we know about file, built in version 4.0 Btrieve version 6 files we know format, takes up 40960 bytes. This is the file with 0 that the physical record length of each record is stored records! in the header of the Btrieve file. At bytes 18-19 hex, Some quick math indicates that since the page we find 34 03. Byte swapped, this gives us the value size is 4096, there are 10 pages in this file. I believe of 334 hex, or 820. What are the additional 50 bytes that there is a page for the FCR, a page for each used for? Two bytes are used for a usage count, and index, and an empty data page. Looking at the file in

22 Btrieve Developer's Journal Summer 1995 an additional 8 bytes are used for each of the 6 indices an index page for index 1 (4096-12=4084, 4084/22 that allow duplicates. From this we know that each of equals about 185). With this, we can tell almost the data pages (which are 4096 bytes long) can nothing about how much space this index will contain 5 records, with some waste. From this, we contribute to the overall size of the final file. can expect to use 70 data pages (346 records/5 per Using our knowledge about the file, we can page equals about 70). If we are say that there will be relatively looking for the actual size while a few different corporations (in file is being used, when we can the test file, a grand total of expect that uncommitted data Btrieve 6 files 3!). This means only one page pages exist (pages written that should be needed for index 1. will become “good” data pages are almost In reality, we can expect that at and get a higher usage count than least 2 pages will be used in a the previously “good” page), we always bigger Btrieve 6.x format file, since would multiply this by some there will be an “old” page as “fudge factor.” For instance, if than their 5.x well as a current page as the file in question is almost changes are made. always having new records counterparts. Many of the other indices in inserted, rather than existing the file are dates, and one records updated, this factor would expect that they would would be very low (as small as not be unique, and there can only be at most one entry 1.05). If the file has large numbers of updates that per day, per year that the files cover. Each index are not localized (that is, updates to records that were entry for a date takes up 16 bytes. 255 index entries added at about the same time) you should make this a will fit on each page, and if you are only concerned lot larger (perhaps as large as 1.4). with work days, a rough approximation will be one The other major space-users in a Btrieve file year on each index page. If every day can be an entry, are the index pages. This is the area where we begin each year will take up about 1.43 pages. to see that file size determination is more an art than a Index 6 is a NULL index. This means that not science. We can see from figure 1 that index 0 is all records will be indexed. If a record has all of the made up of four segments, and the total length of all NULL indexed field filled with the NULL value (in segments is 19 bytes. Since index 0 does not allow this case, 32 - see Figure 1) then the record is not duplicates, our job is easier. Each index entry is made indexed. So, what we need to know about this index is up of a 4 byte logical page pointer to the “less than” the number of records we expect to be indexed, and record, the actual key value (in the example above, 19 since the index does not allow NULLs, simply bytes), and a pointer to the first record with the key calculate the number of pages filled using the formula value. If the key allows duplicates, there is an mentioned above for the non-duplicate index 0. additional 4 byte pointer to the last record with this value. In this example, each entry will be 27 bytes. We can expect to fit 151 index entries on each page. With 346 records, we can expect that index 0 will THE ACTUAL TEST consume 3 pages. Look at listing 1. This lists the indexes in the I purposely selected a version 5 file to begin file. Index 0 is the index just discussed. For other with. My intention was to see if what I know about indices, we have to do the calculation of the size of this file would hold true for the version 6 copy of the each index entry, and then (this is where it gets file created with BTRIEVE.EXE 6.15. We know that messy) guess how many unique entries for each key the overhead in a Btrieve 6.x file is at least 4 pages (2 will be in the file. The calculation of the size of the FCR’s, 2 PAT’s). In addition, I expect the data will index entry is straightforward: 4 bytes for the “less take up 70 pages. Index 0 will take up 3 pages, and than” pointer, 10 bytes for the actual key value, and 8 each additional index will take up about a page or 2. bytes for the first and last record pointers, for a total Allowing for some slop, I expect the file will take up of 22 bytes. Taking into account the 12 bytes about 90 pages. I had not done the rebuild in version overhead on an index page, we can fit 185 entries on 6 format until I actually wrote down my guess. And

Summer 1995 Btrieve Developer's Journal 23 the result of the actual test was... (drum roll, almost impossible to estimate size. Experience with please...) 141 pages. your data will be required for variable, compressed or Surely, there must be a mistake. Perhaps if I blank-truncated records. ² pack the file. Yes, that will do it, I’m sure of it. Well, not exactly. Would you believe 158 pages? Sigh. Not one to give up easily, I took the same file, all 158 ======pages of it, and re-built it on a Novell network, using Key Segment Field Name Type Length Btrieve 6.10c on the server. The file was significantly ======smaller at 112 pages, but still far larger than my 0 0 WIN CORP NO-DUP 10 guess. 1 WIN PID 11 At this point, my interest in the file size was 2 WIN DATE 4 less important than the difference between the two file 3 WIN TIME 4 sizes. This was troubling. Realizing that the most 1 0 WIN CORP 10 recent Btrieve 6.15 for DOS update was sitting on my 2 0 WIN DATE 4 hard disk, but not yet unpacked, I placed the update in 3 0 WIN DATE RETURN 4 the proper directory, and after rebuilding, the file was 4 0 WIN DATE RESTRICTED 4 now somewhat smaller than the previous 6.15 file, but 5 0 WIN DATE FULL DUTY 4 still too large at 150 pages. I have some thoughts on 6 0 WIN MED REC NULL 10 the matter, but I will reserve judgment until I get the 7 0 WIN DISCHARGE DATE 4 word back from BTI. Listing 1 - Index Characteristics for Sample File

1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

CONCLUSIONS 1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

What conclusions can we draw from my failed 1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567 experiment? First, Btrieve 6 files are almost always 1234567890123456789012345678901212345678901234567 1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

bigger than their 5.x counterparts. My estimate for the 1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567 size of the file was almost perfect for the version 5.x 1234567890123456789012345678901212345678901234567 1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

file, which turned out to be 84 pages. Very close, 1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

when you remember that right off the top, Btrieve 6.x 1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567 files have 3 extra pages of overhead. Version 5 files 1234567890123456789012345678901212345678901234567 1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

have slightly different amounts of overhead per record 1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567 as well. 1234567890123456789012345678901212345678901234567 1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567 Second, if you know your data, and if you 1234567890123456789012345678901212345678901234567 1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

work through the experiment that I worked through, 1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

you should be able to come up with an estimate that 1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567 will be correct for version 5.x and will be about 60% 1234567890123456789012345678901212345678901234567 1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

of what you can expect in a real version 6.x file. 1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567 Considering that the file will not require an additional 1234567890123456789012345678901212345678901234567 1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

.PRE file, which could sometimes grow quite large, 1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

the overhead is not all that bad. 1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

Notice that we have been dealing with fixed 1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567 length, non-compressed records. The fixed record 1234567890123456789012345678901212345678901234567 1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

image for records that allow variable length will be 4 1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

bytes larger, with trailing blanks truncation adding 4 1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567 bytes of overhead as well. Compressed records add 1234567890123456789012345678901212345678901234567 1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

another wild card to the deck. These files will be 1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

1234567890123456789012345678901212345678901234567

24 Btrieve Developer's Journal Summer 1995 Btrieve Based Accounting - Part 3 By Eric E. Cohen Cohen Computer Consulting Email: [email protected]

In the first two parts of this series, we discussed opportunities customize CA-ACCPAC/2000 screens and reports. CA plans to available for the Btrieve developer in assisting companies in tie together mixed DOS and Windows platforms by providing a getting the most from their accounting software. The second data migration from DOS sub-ledgers to the Windows General column discussed low end, inexpensive Btrieve-based packages. Ledger. The General Ledger boasts a powerful financial reporting In this last of three parts, we cover high-end accounting packages engine, extended budgeting capabilities and more flexible import/ which use Btrieve. export capabilities, including DDE. Drill down capabilities let you High-end accounting encompasses software costing from find the underlying transaction detail by clicking on a summary $600 to $3,000 per module. These packages often come from number. minicomputer roots, and in the past, ran under DOS or UNIX. The visual report designer, based on the CA/RET report Standard modules include Accounts Receivable, Accounts writer, lets you modify standard reports, add logos, and change Payable, General Ledger, Inventory Control, Order Entry, fonts. You can completely redesign invoices with the visual report Purchasing and Report Writers. All have multi-company writer. Some data entry screens will be also re-arrangeable at the capability. Most sell through VARs, and few directly or through end user level. Other parts of the CA-ACCPAC/2000 include retail channels. their Realizer Basic and SuperCalc spreadsheet. CA-ACCPAC/2000 will come in single user and network CA-ACCPAC/2000 versions. The single user General Ledger is $1,295 and the The largest company in our roundup, Computer Associates system manager is $595. We reviewed version 1.05. An does extensive cross-pollination between its various lines of immediate turn off is the parallel port copy protection device. accounting, and the higher-end Masterpiece series and CA- Running programs is done by selecting icons from program ACCPAC/2000 are an example of this heritage. CA’s diversity in groups - it seems like it might be easy for the average user to accounting software, from home finance and taxes, now part of accidentally erase the icons. Screens are clean; detail lines are on the 4Home Productions subsidiary, to small business (Simply the same screen as the headers information, so it is easier to Accounting), to mid-range PC (ACCPAC BPI), to ACCPAC follow the data entry flow with this product than with its Plus, to accounting software for minis and mainframes, means comparable competitors. that the importance of the PC line is diluted, but can benefit from The system exudes power, but seems slow. Features include lessons learned elsewhere. CA promises a seamless data growth huge field sizes, search routines that can filter information on-the- path from Simply Accounting up through ACCPAC BPI, fly, a macro language based on Basic, optional user designed ACCPAC Plus and so on. tables, multi-company and multi-currency support, and almost CA-ACCPAC/2000 General Ledger and System Manager unlimited history retention. Financial statement setup is much like (which provides common services and application services (like using F9, a marked improvement from ACCPAC Plus. The their visual report writer and designer) are the only modules System Manager and General Ledger alone took up almost 50 shipping after one year. Plans for other modules are yet to come, MB so the system isn't for those cramped for disk space. Contact as well as plans to operate on other platforms besides DOS, Computer Associates International, Inc. at (800) 225-5224 or Windows, and NetWare. Customer demand will drive (516) 342-5224. development. The system uses Btrieve 6. CA-ACCPAC/2000 is targeted at DOS high-end users Accounting Vision/32 looking for more functionality. All of the key field sizes are much AV/32 versions are available for Windows, OS/2, and larger than its DOS brethren (e.g. 45 digits in the General Ledger Windows NT. Data files are interchangeable among versions. chart of accounts, 22 digit invoice identification number, 14 digit Database choices include Btrieve and Scalable SQL. Screens are vendor number and customer identification number). modifiable at the User and Global level, and all changes are As with most higher end products, you will be able to contained in overlay files that are not affected by program

Summer 1995 Btrieve Developer's Journal 25 updates. DDE and import/export capabilities are strong. AV/32 is follow, but some of the user interface issues will be cleaned up by multi-company and multi-currency. the time the software makes it into production. Smaller field sizes Additional user defined fields are available, and can be easily than most (6-digit AP vendor, 16-digit General Ledger accounts) maintained on a second screen. Items can be hidden and renamed. are a weakness; user notes, cash or accrual options, and the Any function can be placed on the desktop as a push button, customizable user fields are a strength. bitmaps can be added for decoration, and important operating If you are a present CYMA user or looking for a system that information can be displayed. All reports and help screens are will not confound you with too much sophistication, CYMA IV/ user modifiable. Menus can be modified by the user to remove Accounting for Windows will be a natural choice. As in their unnecessary items. AV/32 boasts superior searching capabilities, DOS version, the ability to easily add user-definable fields that can intercompany transactions, and date-sensitive, unlimited general be used in reporting is a major strength. Contact CYMA Systems ledger history. You can enter 4 budgets per year, and restrain Inc. at (800) 292-2962 or (602) 831-2607. entries to the budget. Available modules include a 12-digit General Ledger with Great Plains Dynamics LAN Release 2 Check Reconciliation, with options including 25 and 50 digit Great Plains was the first major vendor to market high-end, General Ledger accounts, Fund Accounting, Accounts Payable, customizable accounting software, but initially suffered adverse Accounts Receivable, Inventory Management, Payroll, Point of publicity due to its perceived sluggishness and the lack of an order Sale, and Sales Order. Purchase Order is planned for release entry or purchase order module. Dynamics LAN now has better soon, and Job Cost is planned, but not scheduled. Modules range performance, if you have powerful enough equipment. Module between $995 and $7995 per module - $1,495 per module for the prices range from $1,000 to $2,000. Shipping modules include 5 user network version without extra General Ledger digits. General Ledger, Payable Management, Receivable Management, AV/32 is a powerful and flexible system for wholesale, retail Invoicing, Inventory Control, U.S. and Canadian Payrolls. Future and not-for-profit businesses. It’s somewhat stark desktop begs modules include Sales Order Processing, Receiving, Purchase you to add groups of push buttons for common tasks. AV/32 has Order Processing, and Cash Management. A higher end client/ task-oriented, rather than module-oriented menus, and using its server version is priced at $5,000 to $40,000. data entry screens can be confusing - the system does not lead you Dynamics LAN ships for Windows, Windows NT, Novell, through the data entry process as well as some other packages. Macintosh, and Power PC clients. Great Plains is long on Rather than cram all of the necessary fields onto a screen or two, customization tools. Along with the strength of the basic system, push buttons that take you into detail lines, addresses, comment there are many end user and consultant tools for turning the fields and optional areas litter the screen. However, with a little software into what you want. The tools include Dexterity - a 32- training, your users should get a lot of support from this system. bit, graphical, cross-platform, 4th Generation Language Contact IntelliSoft, Inc. at (800) 933-4889 or (817) 467-7243. development system written in industry-standard ANSI C code, available to customers and consultants. Scalable SQL in Dynamics CYMA IV/Accounting for Windows LAN Release 2.0 will give access to Dynamics data files. Their CYMA Systems, Inc., is an established provider of DOS- developer’s kit will allow any developer using virtually any tool to based accounting software. CYMA has also recently announced access Dynamics data, including Visual Basic, Microsoft Access, CYMA IV/Accounting for Windows. The product consists of a R&R Report Writer, Crystal Reports, and other Btrieve and series of interoperable modules that can be opened simultaneously. Scalable SQL access tools. ODBC drivers integrate Dynamics CYMA IV/Accounting for Windows has four foundation data with all ODBC-compliant applications, and DDE adds inter- modules: system manager and accounts payable (in beta for application communications capabilities. almost one year), general ledger and accounts receivable (no The Modifier lets you modify screens including importing scheduled release date). Additional modules will include a report graphics, changing prompts, and removing fields, all without writer and payroll, inventory and order processing, job control, changing underlying source code. However, it cannot add logic or client accounting, and bank reconciliation modules. new fields. CYMA IV/Accounting for Windows boasts a simplified, Dynamics LAN requires 32-bit Windows, which may consistent Windows interface, extensive context-sensitive help require additional setup on your systems. In addition, it takes up a facilities, flexible network configuration, and cross-platform great deal of hard disk landscape. integration. No plans are made at this time for screen modification The screens are attractive, although the number of push capabilities. buttons next to each field is confusing. The system is task- The software, which uses Btrieve to store its data, is also oriented, and it can be difficult sometimes to find a particular task. compatible with CYMA’s DOS-based PAS III software. The data Line items are on the same screen as headers, an advantage. Field dictionary files necessary for access by third-party tools are easily sizes are generous - 20 digit General Ledger accounts, with an available, and are used by the Crystal Reports DLL engine for option for up to 45 digits. Data entry is intuitive. reporting. Each CYMA IV/Accounting for Windows module is The Dynamics order entry and purchasing systems have not priced from $795 to $995 each. System managers range from yet shipped. Sales order processing and multicurrency $295 to $1295. management are both scheduled to be released with the May 1995 Custom data fields are extremely easy to set up. Screens are 2.1 release of Dynamics LAN. An interesting feature in the Sales clear and the menus, modular by nature, are easier than others to order processing system is an unlimited number of process holds, follow. Some of the data flow in the Beta version was hard to used in work flow management. 26 Btrieve Developer's Journal Summer 1995 Great Plains Accounting Version 8.0 (for DOS) Entries can be made multi-company or split across companies. Available modules which include the cross-company capability Great Plains text-based system has at least one more life in it include Accounts Payable, a General Ledger which includes - time will tell if it has the staying power of a cat or not. If you are encumbrance accounting for non-profits, Accounts Receivable, concerned, a migration kit from Great Plains to Dynamics LAN is Billing, Payroll, and Order Entry. Also available are Cost readily available. Accounting, Inventory, Purchasing, and Client Write Up. Prices Always a solid package from a company known for its range from $795-$1,295 per module. support, Version 8 keeps the DOS version of Great Plains In addition to multi-company processing, Signature offers competitive. In the race to provide customizable screens, Great user-defined maintenance and data entry screens. The system can Plains has fired a salvo with its new Windows Editor, which lets have 999 databases and 99 companies per database, making multi- you change screen text and prompts, add defaults to field entries company processing faster and permitting file inquiry across or remove them from the screen, and add comments on the data companies, vendors, and customers. entry and master file screens. Signature has been running under Btrieve for 5 years. Modules include Accounts Payable, Accounts Receivable, Something unusual about their filing system is that the data Cash Management, General Ledger, Payroll (US or Canadian), structure for each system is unique, and is built by the system after Inventory, Order Entry, Purchase Order, Job Cost, and Project a setup questionnaire is entered. Although transaction files are not Tracking. Version 8 improvements include enhanced security, configurable, the master and detail files for every Signature printing and inquiry capability, enhanced inventory capabilities, system are different, which may make doing external Btrieve including serial and lot processing, and improved reporting. development for more than one customer a challenge. Libra was Modules are priced from $295 to $1,295. Contact Great Plains not made available for our review. Contact Libra at (800) 453- Software, Inc. at (800) 456-0025 or (701) 281-0550. 3827. Libra Signature Version 4.0 Macola Progression Formerly known as specialists in construction software, Libra has changed their vertical focus to high end accounting in a multi- Macola, Inc. is positioning itself for the nineties to provide company environment. technologically advanced accounting systems that preserve a Signature is a very robust package, offering strong company’s present investment in hardware, software, and accounting and branching off into other vertical markets, such as training, while giving customers tools to tailor their system to their construction companies, retailers, restaurants, and not-for-profits. own particular needs. Macola has the ratings (four consecutive PC

123456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

123456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

1 23456789012345678901234567890121234567890123456789012345678901212345678901234567890123456789012123

Summer 1995 Btrieve Developer's Journal 27 Magazine Editor’s Choice Awards, two consecutive awards of Microsoft Access. Contact Macola, Inc. at (800) 468-0834. recognition from consultants by an independent testing group), the breadth (a full manufacturing series, with available source and M*A*S 90 for Windows development tools), and the organization (the company itself, its Almost three years ago, with great fanfare, State of the Art VARs, and customer base) to be considered one of the top three held a phone conference announcing Momentum, its next vendors in the high end race. generation graphical accounting package, with a cross-platform Macola’s software began as a port from MCBA’s development language and capabilities to tame Great Plains minicomputer software, and for the last ten years has slowly lost Dynamics. much of the MCBA look and feel. However, not all of the Now the costs of the development language have been MCBA programming has been replaced, resulting in some out of written off, and development has been postponed to get out place questions and fields. M*A*S 90 for Windows, a Windows version of the present Progression Series 6 with Dual System Manager is the total M*A*S 90 line of products. M*A*S 90 for Windows will be set of modules from Macola, available in Windows and DOS. Btrieve-based, permitting better access to data files for those who The Windows version has full mouse support, Windows boxes can’t program in Business Basic. It may be written in Visual and conventions, and a graphing engine based on their EnVision Basic. report writer. However, version 6 does not contain the For ease of use and flexibility, the M*A*S 90 product line, customization capabilities included in version 7. There is no MDI as it stands, is one of the best. We feel that it is the most intuitive - that is, you must fire up a completely new program to get a product there is in its class. The program leads you through most second Macola window. Version 6 has largely the same function processes automatically, asking you if you would like to proceed set between DOS and Windows. All of the version 6 modules are onto the next logical step in data entry. In most cases, the available under Windows. This includes a full set of accounting, Windows versions of accounting packages rely more on your distribution, and manufacturing modules. Modules include being able to find your way around and knowing the next step than Accounts Payable, Accounts Receivable, Bill of Materials, the DOS packages! Capacity Requirements Planning, Customer Order Processing, M*A*S 90 for Windows’ release is dependent upon the Fixed Assets, General Ledger, Inventory Control, Job Cost, release of Windows 95. Although we have not seen M*A*S 90 Labor Performance, Maintenance Management, Master for Windows, preliminary information showed a blend of the best Scheduling, MRP, Payroll, Purchase Order, Standard Product of the DOS package with superior lookup and movement Costing, and Standard Product Routing. Accounting and capabilities added. We anxiously await its introduction. Contact distribution modules range from $995 to $1,895. Manufacturing State of the Art, Inc. at (800) 854-3415 or (714) 753-1222. modules are $2,500 each. Macola’s EnVision Enterprise Reporting System has been Platinum Accounting designed with graphics that can update on a real-time basis and sophisticated report designing capabilities that let you work in Platinum accounting software was written from the ground graphical, detailed, and outline modes. There will be developer up for the PC platform and was an early user of Btrieve. Recent and end-user versions available. With EnVision ERS you can business setbacks are now being overcome by a new management access one or multiple database types simultaneously, including team and funding. The Platinum product has a strong database Scalable SQL, dBase, Microsoft SQL, or Sybase. feel, and considerable power and flexibility, with a level of Progression 7, which has started shipping in part as of April sophistication and complexity that make it best suited for those 1995, is true MDI, and offers screen, menu and report who need its power. customizability, although field sizes will not be alterable. You can Available modules include Accounts Payable, Accounts mandate, hide, default, and list entry fields, by user, redefine Receivable, Bank Book, Foreign Currency Manager, General order of entry, group areas of the screen, and even move fields Ledger, Inventory Control, Job Cost, Manufacturing, Payroll, between screens. Purchase Order, and Financial Report Extender. Module costs Modules now shipping include General Ledger, Accounts vary from $695 to $2,000. Receivable, Accounts Payable, Currency Manager and Bank Platinum has available interfaces for almost any Btrieve tool. Book. F9, a spreadsheet link, is also available. However, there is little end user screen or field customization Reports can be customized in EnVision. EnVision reports capability, and a long promised Windows version was not can be run from its menus. Accounting will be batch oriented, so available for our review. Contact Platinum Software at (800) 999- individual clerks can enter and post entries independent of others 1809 or (714) 453-4000 performing the same task. Macola 6’s strength is its depth. Largely a DOS transplant RealWorld Accounting under Windows, it is slightly more awkward to work with than its RealWorld has been slow in introducing a high-end Windows brethren designed for Windows. However, it offers distribution accounting package. As of April 1995, the first modules of their and manufacturing depth unmatched by its chief rivals. version 7 for DOS are due to ship, aimed at an audience of Version 7 adds to depth and user interface. The screen corporate back room accounting. Plans for a Windows version are designer seemed intuitive for anyone accustomed to working with less formal, with a Microsoft Access front end being developed Windows packages like Microsoft Access. In addition, the and version 8 slated to have a Windows release. EnVision ERS Report Writer works in a similar manner to See Accounting on page 36... 28 Btrieve Developer's Journal Summer 1995 Clarion for Windows By Randy Goodhew, Editor-in-Chief Clarion Technical Journal Email: [email protected]

Clarion for Windows is a complete application I had a need to count he number of bits set to One in a development system that uses a database dictionary, 32 Bit long integer. An old programmers trick is to test the interactive code generator, and a comprehensive 4GL High Bit of the signed long integer (a negative value language coupled with a well proven optimizing compiler indicates that the bit is ON). If it is ON then increment a that generate true native code which rivals the performance counter, do a bit-wise shift to the left by 1 bit and repeat of C or Pascal compilers. The application generator until all bits have been tested. There are better algorithms interacts with the developer through user-modifiable for counting bits (I found 7 other algorithms) but this one is templates which are written in a completely documented simple and serves as a good example. The Clarion code for and accessible scripting metalanguage. All application this function was elegant in its simplicity, see Listing ##. development tools are integrated through the IDE and work The function called, BIT_COUNT(), simply accepts a together to provide a seamless application development LONG integer as a parameter, performs the count, then framework. Editors, windows formatters, report returns a SHORT integer which contains the results. This developers, option selections, and function is completely reusable and visual design tools are all available can be compiled as an OBJ or added through simple pull down menus to a LIB or DLL file. The next time and icon buttons. Btrieve connectivity I need to use this function, I only have to link it in to my new TopSpeed Corporation, the with Clarion is application. developers of Clarion for Curious about the efficiency of Windows, is the result of a merger simple and direct. the optimizing compiler, I between Jensen & Partners, You can forget disassembled the BIT_Count() International (JPI) of England and function and examined the assembly Clarion Software located in about Btrieve language listing. The results are Pompano Beach, Florida. Niels shown in Listing ##. If you are Jensen, the founder of JPI was an Operations Codes familiar with assembly language, original founder of Borland. and long lists of you will notice that everything took parameters. place in registers! If I had written Unique Register Calling this algorithm in with most C or Convention Pascal compilers, the parameter Clarion for Windows uses the same high performance would have been passed on the stack. optimizing compiler as the rest of the TopSpeed family of Also, some of the bitwise operations may have required languages (C, C++, Pascal, Modula-2). One of the additional calls to internal library functions. With Clarion, hallmarks of this compiler is the ability to pass parameters all operations were rendered with pure assembly language. through registers whenever possible. Most other compilers And not surprisingly, performance tests showed that the use stack-based parameter passing, for example Windows Clarion produced algorithm was significantly faster than internal API calls use the Pascal calling convention. Of that of other compilers. course there are only so many registers that can be used at Of course not all Clarion source code is converted into one time, so after Clarion has used registers AX then BX pure assembly language. But Clarion’s internal register- then CX then DX, it reverts to passing parameters on the based calling convention makes these necessary function stack. Clarion functions with short parameter lists that can calls perform at “top speed”. Connectivity to external take advantage of register-based usage, which can show a routines written in other languages is possible through significant boost in performance over other compilers. Clarion Function Prototypes. This allows you to specify the

Summer 1995 Btrieve Developer's Journal 29 calling convention as C (stack-based, right to left), Database Drivers PASCAL (stack-based, left to right), or use the TopSpeed Register-based convention. As an example, I tested a Clarion for Windows supports a variety of database Clarion internal API function for copying null terminated drivers through direct connections with DLL files. string by memory addresses with a similar function found in Supported files systems include: ASCII, Basic, Btrieve, the Windows API (Clarion API: _strcpy and Windows API: Clarion, Clipper, dBase III, dBase IV, DOS binary, FoxPro LSTRCPY). In an iteration test, the Clarion internal and FoxBase, Paradox 3.5, and the new high performance function proved to be about twice as fast as the Windows TopSpeed driver. The ODBC (Open Database Connectivity API function. With the current version of Clarion for API) Windows DBMS interface is also supported. An Windows (version 1.002) most of the common language ISAM database driver developers kit is also available for functions are in a single runtime DLL. But this isn’t a those that need to “roll their own”. standard Windows DLL. Again, wherever possible, Clarion is communicating with this DLL through register-based Btrieve Connectivity parameters for maximum performance. Clarion uses a set of universal database record access commands that hide the complexity of the underlying database driver. Simple commands like ADD(file) and DELETE(file) are used to perform records operations that are “polymorphic” and will be translated then passed on to the appropriate database driver. Btrieve connectivity with Clarion is simple and direct. You can forget about Btrieve Operations Codes and long lists of parameters. Likewise, Btrieve returned Status Codes are intercepted by Clarion and mapped into the appropriate Clarion Errorcode if necessary. Clarion for Windows supports all of the Btrieve Extended Key Types either directly or through simple workarounds. Clarion uses a rule-based automatic data type conversion system to allow the easy mixing of data types in expressions. For example, Clarion’s standard date and time Figure 1 - Clarion has extensive on-line help functions are designed to work with LONG integers. However, if these functions are used with Btrieve-style DATE and TIME data types as parameters, all internal data Self-Extensible conversions are transparent and require no special attention Clarion for Windows is self-extensible. That is, the by the programmer. Clarion language itself can be used to extend and personalize the language. I wanted to create a simple scrolling list box that will display all of the current environment variables. There is an excellent example of how to do this in Charles Petzold’s book, PROGRAMMING WINDOWS 3.1 from Microsoft Press. He shows how to create this list box in just three pages of cryptic C code. I recreated this mini-program in less than one page of simple, readable Clarion code, see Listing 3. I could also use this same source code to create a reusable LIB or add this as a function to a DLL. Once again, the TopSpeed compiler produced output code that is as fast as or faster than C code. Figure 2 - Debug Window

Multi-language within same IDE Note: The Btrieve data types Logical, Money, and Clarion for Windows ships with a built-in TopSpeed C Numeric are not directly supported but can be emulated by compiler. C code modules can be blended into a Clarion using other Clarion data types. Clarion also provides a application seamlessly. The TopSpeed single backend variety of other “legacy” data types that makes connectivity compiler technology will compile and link the two with other language systems convenient. These alternative languages together without fuss. The Clarion external data types can be used in Btrieve record structures but they function prototyping system allows complete connectivity to are not recognized when used as components in Btrieve the Windows API.

30 Btrieve Developer's Journal Summer 1995 keys. So, some caution is necessary. agreement. A redistribution license from BTI is needed to Clarion does not directly support Btrieve distribute applications. Autoincrementing fields. However, if a Btrieve file is created outside of Clarion and uses AUTOINCREMENT Btrieve Clarion fields, then Clarion will graciously allow the Btrieve engine String STRING or BYTE array Integer (2 bytes) SHORT Integer (4 bytes) LONG Float (4 bytes) SREAL Float (8 bytes) REAL Bfloat (4 bytes) BFLOAT4 Bfloat (8 bytes) BFLOAT8 Decimal PDECIMAL Zstring CSTRING Lstring PSTRING Date DATE Time TIME Unsigned Binary (2 bytes) USHORT Unsigned Binary (4 bytes) ULONG

Table 1 - Btrieve-Clarion Data Type Conversions

After Market Add-ons Figure 3 - VBX Custom Control Registry A strong after market of third-party add-ons for Clarion for to increment these fields (as long as Btrieve’s rules are Windows is starting to emerge. Customized Templates, followed, i.e. upon adding a record, if the field is 0 then it code libraries, programmer utilities, books and publications will be assigned the next number). Clarion does however are now available. Most Windows DLLs written in other provide its own code-based technique for autoincrementing languages will work with Clarion for Windows. Many fields as a Database Dictionary selection. This technique Visual Basic VBX (Level I) controls can be used. An works across all database driver formats, not just Btrieve. interface to InterSolv’s PVCS, a popular software Clarion developers have been successful in interfacing configuration management tool, has been announced by a directly to popular software that uses Btrieve data files, third-developer. Interfaces to Lotus cc:Mail, Lotus Notes, such as accounting modules from Great Plains and Folio VIEWS, and other popular will be available soon. Platinum. Vertical market application written in Clarion and using Btrieve are starting to emerge. The Future Btrieve dynamic link libraries for Windows A combination 32 and 16 bit compiler is now in Beta development is included with Clarion for Windows Test. This single development environment will produce (WBTRLOCL.DLL, WBTRCALL.DLL, both Windows 3.1 or Windows ’95 applications with little WBTRVRES.DLL, etc.). A developer-only license is more required than flipping a selection switch. Client-server included with the Clarion for Windows registration database drivers for Oracle, Sybase, and others will be available soon. If you require a complete, high performance, professional Windows application development system then consider Clarion for Windows. It’s the shortest from inspiration to application. ²

Randy Goodhew is the Editor in chief of The Clarion Tech Journal, an independent publication of the PC Information Group, Inc. He is the Executive Editor and co-author of the book Tips, Tricks & Templates for Clarion Database Developer and he is the developer of the Advanced Language Extensions for Clarion for Windows.

Figure 4 - The Project File Window Summer 1995 Btrieve Developer's Journal 31 Accounting... Continued from page 32 minutes, per company reports. The core set of accounting, inquiry, and reporting RealWorld is one of the oldest manufacturers here, with a modules includes: General Ledger, Inventory, R&R SQL huge installed base. Modules available include Accounts Payable, Report Writer, Accounts Payable, Order Processing, System Accounts Receivable, Check Reconciliation, General Ledger, Manager, Accounts Receivable, Customization Manager, Inventory Control, Job Cost, Order Entry, Payroll, Professional Visual Basic Rapid Development Tool Kit and Forest & Trees Time & Billing, Purchase Order, Sales Analysis, and Sales View Kit. Customization Manager lets you make changes on Management Solutions. your screens without programming, including adding new RealWorld software is solid and clean. The company makes fields that can be incorporated in processing, or using source code available, and a huge directory of third party Microsoft’s Visual Basic programming language to add logic. modifications for every industry, need, and platform is available. Modules currently in beta testing or scheduled for later Version 7 improvements bring the software up to the standard of releases include: Purchasing, Bill of Materials, Bank most of the DOS competition, with features that will be of special Reconciliation, Currency Manager, Fixed Assets, Job interest to larger organizations: security that extends to reports Costing, a data import facility, and Payroll. Other plans printed to disk, retention of audit reports after their printing for include the release of Script for unattended processes and user defined periods of time, enhanced batch control, import of report queuing, and Inquiry for extended drill-down general ledger transactions from disparate systems, and other capabilities. features. Solomon IV has large system requirements: the single RealWorld’s user interface, which lets users easily switch user version needs 8 MB of RAM and a lot of available hard between tasks, including the capability to visit another area and disk. The server version requires 8 MB on the workstation and return without losing data entered in the first task, have dulled 24 MB on the Server. The screens are the most attractive and some of the pain of no Windows availability. Contact RealWorld intuitive of the packages tested. However, doing data entry Corp. at (800) 678-6336 or (603) 224-2200. required pressing buttons to go to subscreens, a minor annoyance. Field sizes are generous (GL Account - 30 digits Solomon III for Btrieve in 8 segments, Inventory Item - 20 digits) as is history Solomon III is one of the most recognized names in the retention (99 years in GL). The features of the package are industry. Always known for its strong general ledger reporting also very good. capabilities, the product began to suffer in the eighties due to its As Scalable SQL becomes available on Windows NT and database engine. Things changed when Solomon switched to other operating systems, Solomon is been expanding their Btrieve. Available modules include Accounts Receivable, Cash base, including a new Client Edition for peer-to-peer networks Management, General Ledger, Inventory, Job Cost, Order Entry/ scheduled for May/June 1995. “We’ll also be releasing Billing, Payroll, Purchasing, and a slew of development tools, the Solomon IV for Windows on the Windows NT platform using most interesting of which is SolomonNote. SolomonNotes lets you Scalable SQL for Win NT in the summer,” said Skip add templates of information to fields or documents; each template Reardon, Senior Marketing Manager at Solomon. “We have can hold 99 fields that can interrelate with the standard data. their beta now, and if everything goes well, we can expect a SolomonNotes can take data from a Solomon field, run it through July release of our product on that platform. That gives us a spreadsheet calculation, and return the value. Modules cost $495 both options for client/server network configurations: Solomon for single user, $795 for multi-user. Solomon III Btrieve is also IV with Scalable SQL running on NetWare, and Solomon IV one of the few packages that can run on a cash or accrual basis. with Scalable SQL running on Windows NT Server — either way, we got it covered.” Solomon IV for Windows For a programmer with limited knowledge and those who work with Microsoft Products like Access, the Visual Basic Solomon Software has also released its Scalable SQL-based, programming of Solomon IV is more intuitive than Dexterity client/server accounting information system, Solomon IV for with Dynamics. Solomon is a technical leader with its work in Windows. Based on the features and functionality of the Solomon Lotus Notes and the Internet. Solomon IV is an excellent and III LAN-based accounting software, Solomon IV for Windows powerful series; Solomon Software needs to work on provides extensions to the Solomon III accounting design, developing its internal organization and its dealer base to take combined with Windows and Scalable SQL database technology. advantage of its very attractive package. Contact Solomon Solomon has taken an open architecture approach, using tools like Software, at (800) 879-0444 or(419) 424-0422. Microsoft’s Visual Basic and R&R SQL Report Writer. Solomon IV for Windows offers medium-sized businesses an Conclusion open accounting information system with flexibility and data accessibility, if you are willing to live within the platform High end accounting: it costs more, does more, and limitations that adopting DOS/Windows tools impose. Solomon provides a more solid base for development. The ASVs are IV is priced on a per-user, per-module basis: $495 for single more apt to work with developers and assist in their marketing user, $795 for 3 user, $1,295 for 6 user, etc. efforts, and VARs can be a regular source of leads. As we Solomon IV is distributed on CD-ROM, making it easy for conclude this series on accounting software, remember: every consultants and clients to install. A complete installation of nine business can use some accounting system customization. ² Solomon IV modules and Scalable SQL takes less than 15 32 Btrieve Developer's Journal Summer 1995 Source File WBC.C (continued from page 14) Header File WBC.H

{ if (!lstrcmp (modName, “WBTRLOCL”) || !lstrcmp (modName, “WBTRVRES”) || !lstrcmp (modName, “WBTICOMM”) || ///////////////////////////////////////////////////////////////////// !lstrcmp (modName, “WBROLLRS”) || ///////// !lstrcmp (modName, “DBU_UI”) || // Resource Constants !lstrcmp (modName, “TLI_WIN”) || // !lstrcmp (modName, “TLI_SPX”) || #define IDM_EXIT 101 !lstrcmp (modName, “NWIPXSPX”) || #define IDM_UPDATE 102 !lstrcmp (modName, “WBTRCALL”) || !lstrcmp (modName, “NWCALLS”) || #ifndef RC_INCLUDE !lstrcmp (modName, “NWLOCALE”) || !lstrcmp (modName, “BUTIL”) || ///////////////////////////////////////////////////////////////////// !lstrcmp (modName, “WBT32RES”) || ///////// !lstrcmp (modName, “WBROLL”) || // Global Variables !lstrcmp (modName, “BGBMNG”) || // !lstrcmp (modName, “DBSETUP”) || HANDLE ghInst; !lstrcmp (modName, “WBEXEC”) || HWND ghWnd; !lstrcmp (modName, “WBMANAGE”) || char gszWndClass[] = “WBCWndClass”; !lstrcmp (modName, “WBT32 “) char gszAppName[] = “Windows Btrieve Configuration ) Info”; return TRUE; char gszMenuName[] = “WBCMenu”; else return FALSE; ///////////////////////////////////////////////////////////////////// } ///////// // Function Prototypes // int PASCAL WinMain (HANDLE, HANDLE, LPSTR, int); 123456789012345678901234567890121234567890123456789012345678 long FAR PASCAL MainWndProc (HWND, UINT, WPARAM, LPARAM); 123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678 static int InitInstance (HANDLE, int);

123456789012345678901234567890121234567890123456789012345678 static int IsBtrieveModule (char far *); 123456789012345678901234567890121234567890123456789012345678 extern int FAR PASCAL BTRCALL (int, char far *, char far *, 123456789012345678901234567890121234567890123456789012345678 unsigned far *, char far *, 123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678 unsigned char, char); 123456789012345678901234567890121234567890123456789012345678 extern int FAR PASCAL WBTRVSTOP (void);

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678 ///////////////////////////////////////////////////////////////////// 123456789012345678901234567890121234567890123456789012345678 ///////// 123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678 // Other Variables and Constants

123456789012345678901234567890121234567890123456789012345678 // 123456789012345678901234567890121234567890123456789012345678 #pragma pack(1) 123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678 typedef struct tagBTVERSION{

123456789012345678901234567890121234567890123456789012345678 int ver1; 123456789012345678901234567890121234567890123456789012345678 int rev1; 123456789012345678901234567890121234567890123456789012345678 char env1; 123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678 int ver2; 123456789012345678901234567890121234567890123456789012345678 int rev2; 123456789012345678901234567890121234567890123456789012345678 char env2; 123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678 }BTVERSION; 123456789012345678901234567890121234567890123456789012345678 #pragma pack()

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678 #define UM_UPDATE WM_USER + 1

123456789012345678901234567890121234567890123456789012345678 123456789012345678901234567890121234567890123456789012345678 #endif 123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678 123456789012345678901234567890121234567890123456789012345678 Resource File WBC.RC 123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678 #include “windows.h” 123456789012345678901234567890121234567890123456789012345678 #define RC_INCLUDE 1 123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678 #include “wbc.h” 123456789012345678901234567890121234567890123456789012345678 #undef RC_INCLUDE

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678 /////////////////////////////////////////////////////////////////////

123456789012345678901234567890121234567890123456789012345678 ///////// 123456789012345678901234567890121234567890123456789012345678 // Menu 123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678 //

123456789012345678901234567890121234567890123456789012345678 WBCMENU MENU DISCARDABLE 123456789012345678901234567890121234567890123456789012345678 BEGIN 123456789012345678901234567890121234567890123456789012345678 POPUP “&File” 123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678 BEGIN 123456789012345678901234567890121234567890123456789012345678 MENUITEM “E&xit”, IDM_EXIT 123456789012345678901234567890121234567890123456789012345678 END 123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678 MENUITEM “&Update!”, IDM_UPDATE 123456789012345678901234567890121234567890123456789012345678 END

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678

123456789012345678901234567890121234567890123456789012345678 Please let us hear from you! We want to make Btrieve Developer’s Journal just right for you. Send us any news, information, comments, suggestions, or anything else to BDJ, 2416 Hillsboro Road, Suite 201, Nashville, TN 37212 Email: [email protected] CompuServe: 73173,2731

Dear Btrieve Developer’s Journal, ...[BDJ] is one of the best journals that we get. I was very interested in the book review in the last issue but did not understand why the two books from Midi America, The Illustrated Guide to Btrieve and The Illustrated Guide to NetWare Btrieve 6.x, by Richard Trocino, were not mentioned. Michael D Gardiner, [email protected] Michael, We understand from the publisher that The Illustrated Guide to Btrieve has been discontinued, but The Illustrated Guide to NetWare Btrieve 6.x is alive and well. We plan to review both the Addison-Wessley book Btrieve Complete by Jim Kyle, and Richard Trocino’s book in a future issue. Dear Btrieve Developer’s Journal, First, love the new issue of BDJ. Reading the article on Scalable SQL has tempted me to buy it. We are a NetWare shop. Any reason not to buy the NLM? Can’t wait to read Jim Kyle’s book on Btrieve... I have most of his other Undocumented books. Should be good reading... Thanks for you good products and great magazine. I just wanted to thank, encourage, and support you on your editorial policy of discussing and promoting competing products in BDJ. As you probably well know, BDJ has filled an important and valuable niche in the Btrieve world just as Smithware has. Thanks! Bill Trierweiler, [email protected] Dear Btrieve Developer’s Journal, ...I read every copy of Btrieve Developer’s Journal I receive from my subscription cover to cover. I escpecially enjoy the “down & dirty” techno- articles that Doug Reilly, Steve Mook, et al, contribute. And I hope that back issues will be available online soon for text file searches. Kenneth A. Lundberg, [email protected] Kenneth, The text of back issues of Btrieve Developer's Journal since Volume II Issue 4 are available in the Reference Shelf section of the Btrieve forum on CompuServe. Dear Btrieve Developer’s Journal, After reading with envy on the seminars, parties and junkets enjoyed by our American Btrieve-using cousins I was wondering... if and when you are likely to expand your presence over the pond? I don’t know about the other UK Btrieve users but I know that I would feel a lot more comfortable if I had access to a local help desk rather than trying to dredge up a number in Austin, whereever-it-is. If such a thing already exists could you supply a phone number, if not, how about it you guys? Finally, I must say that Btrieve for DOS is a fine piece of kit. Derek McGill, [email protected] Derek, BTI has established an office in France: phone 33-1-4773-9090. The two people there are Patrick Duboisset and Jean-Noel Gillot. Also, you may wish to call up Southdown House in the UK who offer their own brand of Btrieve support and services: phone 01306-877998. Dear Btrieve Developer’s Journal, In your “Hands-on Review” from the Oct-Dec issue, you state: “Disregard what the Access BTRIEVE.TXT file says about where to put transaction files. In a multi-user, non-client-server environment, each Btrieve Client Engine requires its own transaction control file, so make sure that this file is in its own directory for each installation of the client engine.” I believe this is just plain wrong, and could lead to file corruption in the case of multiple-user access involving Btrieve transactions. But, I am using Btrieve 5.10a... is there a change of rules with version 6.15? If not, you are flatly contradicting the Btrieve and Microsoft documentation without any explanation. What testing did you do on this? Ken Kletzien, [email protected] Ken, The Btrieve for MS Windows Installation and Operation guide for 5.10 states: “In a multitasking environment, all users who start Btrieve with a Transaction Filename should specify the same location for the transaction control file... all filenames specified by different workstations must resolve to the same physical location on the network.” This is NOT true for the version 6.15 Btrieve Client Engine. The manual indicates that, “If you are running on a network, you can specify a directory on the network. However, each workstation must have a unique location for its copy of the transaction control file.” It seems our earlier statement was unclear on the version difference. Thanks for bringing it to our attention.

34 Btrieve Developer's Journal Summer 1995