--------------------------------------------------------------------------- --------------------------------------------------------------------------- NNNNNNNNNNNN NNNNNNNNNNNN NNNNNNN NNNNNN NNNNNNN NNNNNN NNNNNNNNNNNNNN NNNNNNNNNNNNNN NNNNNNNN NNNNNN NNNNNNNN NNNNNNN NNNNNN NNNNN NNNNNNNNNN NNNNNNNNN NNNNNN NNNNNNNNN NNNNNNN NNNNNN NNNNN NNNNNNNN NNNNNNNNNN NNNNNN NNNNNNNNNNNNNNNNN NNNNNNNNNNNN NNNNNN NNNNNNNNNNNNNNNNN NNNNNNNNNNNNNNNNN NNNNNN NNNNNN NNNNNNN NNNNNN NNNNNNNNNN NNNNNN NNNNNNNNNN NNNNNN NNNNNN NNNNNNNN NNNNNN NNNNNNNN NNNNNN NNNNNNNN NNNNNNNNNNNNNN NNNNNNNNNNNNN NNNNNN NNNNNNN NNNNNN NNNNNNN NNNNNNNNNNNNN NNNNNNNNNNN NNNNNN NNNNNN NNNNNN NNNNNN --------------------------------------------------------------------------- --------------------------------------------------------------------------- Boston Computer News Network October, 1994 A Service of the Boston Computer Society, USA Vol.3 No.10 Sponsored by the Xbase Language Group Clipper Version --------------------------------------------------------------------------- 1. Where is Computer Associates' PASSION for the Desktop? ----------------------------------------------------------------------- ReplyTo: Les Squires LSquires@WJI.Com [73020,3435] Download: FTP wji.com, get BCNN0993.TXT. I'm dismayed! Let me tell you why. Technicon 93. It was just one year ago (BCNN0993.TXT) that I returned from Technicon 93 with a whole new appreciation of the role that Visual Objects would play in CA's support of its own 300 business applications in finance, accounting, project management, word processing, etc. VO would be the in-house development platform of choice. I reasoned that such a heavy reliance on VO would enhance the reputation of Clipper! That would enhance my business. All would be well. Technicon 94. One year later my reading of the situation is just the opposite. I'm concerned that VO may never be more than an in-house development language. As important as VO may be for CA, I'm not convinced that CA has what it takes to reach beyond its own corporate boundaries to the microcomputer desktop. Here's my evidence. It takes passion, big money, strategy, and cooperation with other vendors these days to play skillfully on the microcomputer desktop--to win and to sustain the attention of developers. Here's the passion that other companies are showing. o Win the hearts of the masses. Microsoft flooded the market with an estimated 1.5 million copies of Access to power users. Microsoft thereby paved the way for experienced developers like yourself to come along afterward to teach power users about data modeling and referential integrity. Microsoft's action put money into developer's pockets. o Give developers a break when they shop around. Microsoft priced Access at about the price of a good textbook. Remember Oracle's $199 offer several years ago? Gupta recently gave away 50,000 copies of a package worth several thousand dollars. Powersoft and Borland rang my phone off the hook for months with offers to ease the way. Serious players on the desktop are coming to realize that few developers have the resources to shop around without lots of assistance. o Play ball with EVERYBODY. The Visual Basic/Access/Excel communities are lifting Object Linking and Embedding (VBX, OCX) to an art form. Data from all over the world is linked and embedded into simple- looking interfaces such as Lotus Notes or Mosaic documents. More important, however, than the fact that application components require the means to share, SOFTWARE VENDORS THEMSELVES must learn to work cooperatively. To open up their architectures. To enter into joint ventures. To share their secrets. To build something together that no single vendor can build alone. 2. Advantage Xbase Server: New Life for Novell Databases (Oct. Meeting) ----------------------------------------------------------------------- ReplyTo: Chuck Mitten <71075,2507> Extended Systems, Inc., 6123 N. Meeker Avenue Boise ID 83704 USA Phones: 208-322-7575, 800-235-7576 ReplyTo: Les Squires, Meeting Moderator LSquires@WJI.Com Meeting: October 18, 1994, 6:30 p.m. Place: Boston Computer Society, Waltham, MA USA 617-290-5700 Editor's Note. If you have not yet seen the Advantage Server and if you have databases on Novell (and wish the performance could be increased without buying Pentiums!), this is a must-attend meeting. Chuck Mitten describes Extend Systems Product. The Advantage Xbase Server provides networked CA-Clipper applications with key benefits of client/server technology such as significantly improved stability, integrity and multi-user performance often without rewriting a single line of code. Rather than access the information directly, Advantage Xbase Server applications transmit database access requests from the client application to the NLM running on the server. By processing those requests on the server, the Advantage Xbase Server can eliminate index corruption, increase application performance and reduce network traffic. The Advantage Xbase Server consists of a CA-Clipper Replaceable Database Driver (RDD) and a NetWare Loadable Module (NLM) which runs on a NetWare file server. The Advantage Xbase Server works directly with DBF files, and supports industry standard NTX, CDX and IDX index formats. The Advantage Xbase Server uses multi-threaded and shared memory designs to accept and execute multiple users requests simultaneously. This allows the Advantage Xbase Server to minimize server memory usage while simultaneously optimizing performance. While many of the leading SQL server products require up to 2 MBytes of server memory per user, the Advantage Xbase Server's small footprint allows the NLM to support more than 50 users in just 2 MBytes of server memory. In addition, the number of NLM threads can be configured depending upon your desired server application. Decreasing the number of threads reduces the overall impact of the Advantage Xbase Server, and ensures plenty of CPU bandwidth for other server tasks. Increasing the number of threads increases the amount of CPU bandwidth dedicated to servicing database requests, which can provide better database application performance. The latest release (3.0) of the Advantage Xbase Server includes several new features that provide even better application performance, ease database administration, and make it even easier to use. The Advantage Expression Engine allows the Advantage Xbase Server to build indexes and evaluate filters on the server -- transparently. Instead of sending raw information across the network to be processed on the client workstation, applications using the Advantage Expression Engine process data on the server. The Advantage Xbase Server Management Utility allows database administrators to view the current status of the server to monitor files open, locks currently in use and which users have files open. To provide a smooth growth path, Advantage Xbase Server 3.0 now also supports sharing data and indexes with non- Advantage applications, such as those written in dBASE, FoxPro, Clipper Summer '87, or even C. 3. Advantage Xbase Server: From a Developer's Perspective. ----------------------------------------------------------------------- ReplyTo: Ron Dace <76256.2415@compuserve.com> Manager, Information Systems, Illinois Commerce Commission 527 E. Capitol, Springfield, IL 62974 USA Chuck Mitten asked that I send you a note about our reason for selecting Advantage XBase Server in preparation for a users group meeting. If you recall, I sent test results for some benchmarks that we ran for various RDD's that was published in the January BCCN. Our agency has offices in Chicago and Springfield connected via a T1 using Novell's multi-protocol router. Our application servers and development staff is located in Springfield. In preparation for developing applications that had to be accessible from both sites, we discovered that standard Clipper RDD's performed too slow to be usable. Duplicating data at both sites would be a difficult solution to implement so we began looking at client/server solutions. We looked at the Advantage XBase Server first since we were already using the Successware SIX driver and AXS has the same functionality. Our testing was done to assure ourselves that the benefits of client/server were valid in our environment. The test results proved to our satisfaction that AXS would provide acceptable results. The seamless integration of AXS and the ability to easily interchange other drivers were significant factors in our decision. By creating small libraries of 'wrapper' functions, we are able to use either AXS or the Six Driver just by re-linking. BTW, we recently had the opportunity to run the benchmarks again to compare a similarly equipped file server with a Tricord super-server. The performance of AXS on the Tricord was 300% (3 times) the performance on the file server under heavy load. Using the DBFNTX RDD the performance was the same so AXS offers scalability over standard RDD's. 4. Reporting from CA-Technicon 94. ----------------------------------------------------------------------- ReplyTo: Yau-Man Chan, Berkeley <70731,3523> This year the CA developers' conference was held in New Orleans from August 21 to August 25th. There were over 2000 attendees, mostly die-hard Clipperheads and just as many VO pre-release buyers! As promised, CA had a Pre-release version of Visual Object for sale. From my informal survey, probably every attendee bought a copy for $550.00! Visual Objects. More than 50 percent of the sessions were on VO or VO-related topics. The response from attendees on their exposure to VO ranged from absolute awe to panic. Many long time Clipper programmers with little or no Windows experience expressed fear that they will have a hard time dealing with the "paradigm shift" from character base and modal programs to GUI and modeless applications. But "shift happens." So most developers are resigned to have to deal with it! Those who are already prepared for Windows object-oriented programming are excited with the release of the "pre-release" version of VO - promised since the 1990 Developers Conference. VO is very impressive and full-featured and will certainly compete very well with the likes of Power Builder and Visual C++. It far surpass the capability of FoxPro for Windows and Access, but it is not an end-user tool by any means. It is a very powerful Windows application development tool for developers who want to create robust Windows application to deliver to the end user. VO is everything Computer Associates have promised and more! Is VO the long-awaited Windows version of Clipper? Xbase? Well, yes and no. The only relation to the xBase language is the build-in functions that all the xBase programmers are familiar with, like SUBSTR(), TRIM(), etc. But everything that has to do with display and data access is different. No more .PRG files. No more @ SAY..GET's. No more make files. In fact, no Makes. No more compile and link. These functionalities are built into the IDE (Integrated Development Environment). If you are one of those who thinks that ALGOL is FORTRAN just because they have similar looking syntax or if you think C++ is C or that any food cooked with soy sauce and ginger is Chinese Food, then you will be the one to say that VO is xBase ! I think programmers with Small Talk or C++ experience will be able to switch to programming in VO easier than die-hard xBase programmers like me. VO does have a "terminal" mode which will let the user compile and run existing Clipper 5.2 code with minimal changes. About 95% of Clipper 5.2 code will run without any recoding. But the application, especially the User Interface produced as a result of using the Terminal mode, is ugly (to be kind!). It has a look and feel of character based program running in Windows. Let me clarify. It produces strictly character base programs but it is windows-based. It does not run in a DOS window; it runs in a Windows window, but without all the Windows stuff! It's bizarre. You have to see it to hate it! I do not think any one using VO would want to deliver any programs to their clients produced in the VO terminal mode. I am still baffled as to why they put it there--just to say that VO is xBase or to let stuck- in-the-mud Clipperheads continue to program in procedural modal language and still have the bragging rights of having programmed for Windows? Announcement of CA-Clipper 5.3. CA has proven that it will not abandon the DOS-base Clipper market. Clipper 5.3 will have some significant enhancements. 1. Exospace, the protected mode linker will be packaged as the default linker, replacing RTLINK. This will give the Clipper developer the ability to produce both protected and non-protected mode applications without your having to buy a separate 3rd party linker. Of course, Exospace linker still cannot produce dual mode .EXE file - you still a have to invest in a copy of Blinker or Causeway for that! 2. Loadstone Comix Drivers. CA announced an agreement with Lodestone to use the COMIX .cdx /.fpt index and memo field RDD for FOXPRO compatibility. This is a change from the use of the Successware's SIX driver RDD bundled with 5.2. COMIX as an RDD has been purchased by thousands of Clipper programmers since it has proven itself to be much faster and more robust than the RDD provided for .cdx and .fpt support in Clipper 5.2. 3. Ganahl Software's Flexfile. CA announced an agreement with Ganahl Software to provide the FLEXFILE memofield RDD with 5.3. The FLEXFILE .DBV format for memo field support has been a favorite among Clipper programmers who wanted to get away from the .DBT 'bloat' and who wanted to have support for BLOBs. With FLEXFILE's .DBV memofield Clipper programs can store arrays, code blocks and binaries in the memofield. .DBV memofield will be a built-in option for Clipper 5.3. 4. Mouse Support. Mouse support will be native to Clipper 5.3. To support this rodent and all the consequences of navigating with rodents, the GET class and Tbrowse class have been enhanced. Native mouse support will be a reality with Clipper 5.3 5. Integrated Development Environment. One of the most talked about addition to Clipper 5.3 is the Workbench IDE. IDE support is strictly optional. In fact you are given the option at install time whether or not you want the Workbench. Workbench is a Windows-based IDE which works amazingly close to the IDE of VO. In fact, they share a common user interface and functionality. You can develop complete Clipper applications using the IDE in Windows and then run the Clipper Applications in DOS. The Workbench IDE includes a 'chroma-syntactic' source editor just like VO. This editor changes color of words depending on whether they are keyword, comments or just variables! The importance of such 'chromatic correctness' is lost on me. Smart indentation would be a lot more useful for a left-handed touch typist like me! But then true to the Clipper roll-your-own attitude, you can tell the IDE to use your own favorite editor as the source editor in the IDE. Chalk another plus for CA for understanding Clipperheads! A colorful editor notwithstanding, one of the best reasons for developing Clipper applications with the Workbench is the IDE's debugger. Again, the technology is borrowed from VO. It makes CLD looks like a toy. (CLD is still available for those who choose not to install the IDE). I think most Clipper developers will use the WorkBench for the power of the debugger. Clipper 5.3 is a major update. No one from CA will commit to a release date yet, but most educated guesses and 'unnamed' source have put the date sometime at the end of the year. What year? 5. UDF Showcase: ASEEK() -- Binary Search of a Multi-Dimensional Array. ----------------------------------------------------------------------- ReplyTo: Edward A. Kleinhample <70574.3514@compuserve.com> ASEEK() -- Binary search of a multi-dimensional array. is the column containing the key value, is the value to search for - can be any data type. CMP() - General purpose comparison function used by ASEEK. //--------------------------------------------------------------------- //- Module : aSeek( aArray, nKey, xValue ) //- Function : Binary Search of (aArray) for (xValue) in column (nKey) //- Notes : aArray must be sorted in ascending order by column (nKey) //- returns 0 if item NOT located //--------------------------------------------------------------------- function aSeek( aArray, nKey, xValue ) local nStart, nEnd, n, i, j //--- Initialize local pointers for first pass nStart := 1 //-top of array nEnd := len( aArray ) //-bottom of array n := 0 //-NOT FOUND while .T. i := nStart + int( (nEnd - nStart) / 2 ) if ( j := cmp( xValue, aArray[i][nKey] ) ) == nil //-type mismatch n := nil exit elseif j == 0 //-matches, return this index value n := i exit elseif j > 0 //-Greater, tighten bounds and try again nStart := i elseif j < 0 //-Less, tighten bounds and try again nEnd := i end //-if we have less than five elements in the search area, //-do a conventional search through the remaining elements. if nEnd - nStart < 5 n := aScan( aArray, {|a| a[nKey] = xValue}, nStart, nEnd ) exit end end return n //--------------------------------------------------------------------- //- Function : Cmp( a, b ) --> nVal //- Purpose : General Purpose Comparison Function. Return values: //- 0 Arguments are of EQUAL value //- 1 Argument (a) is GREATER than argument (b) //- -1 Argument (a) is LESS than argument (b) //- nil Arguments are NOT of same data type //--------------------------------------------------------------------- static function Cmp( a, b ) //-General Purpose Comparison Function local nReturn if ValType( a ) = ValType( b ) //-if types are the same if a == b nReturn := 0 elseif a > b nReturn := 1 else nReturn := -1 end end return (nReturn) //-------------- eof: aseek.prg --------------------------------------- PushScreen(), PopScreen() - stack based screen/screen segment management system. Call pushscreen with a set of coordinates. Call PopScreen() to restore the screen segment. For Example: PushScreen( 5, 5, 15, 50 ) . . PopScreen() Remaining functions are useful for management of the screen stack system. //--- stacks.prg /*--------------------------------------------------------------------- PushScreen( t, l, b, r ) --> lSuccessful Push the specified screen region onto the screen stack. PopScreen() --> lSuccessful Pop the top screen item off of the stack and restore it to the screen. PopAllScreens() --> nil Restore all screens currently remaining on the screen stack. SetStackFrame( aFrame ) --> aOldFrame Establish a local stack frame for PushScreen and PopScreen functions. This function is used to link the PushScreen and PopScreen (and PopAllScreens) functions to a local stack. SetStackFrame returns a reference to the previous stack frame that should be saved by the user's program and later restored using a SetStackFrame function. For Example local aMyStack := {} ,; //-local screen stack aSaveStack . aSaveStack := SetStackFrame( aMyStack ) //-establish local stack . . SetStackFrame( aSaveStack ) //-restore previous screen stack GlobalStack() --> nil Restore internal stack frame for PushScreen and PopScreen functions (*) * Perform a PopAllScreens() call prior to GlobalStack() or the contents of the local stack may be lost. ----------------------------------------------------------------------- */ //#define DEBUG //-un-comment to include stack tracing #command DEFAULT := ; =>; := if( = nil, , ) #define ST_DEPTH 20 //-maximum stack depth static _aLocal := {} //-local default stack frame static _aStack //-Stack pointer //--------------------------------------------------------------------- //- Module : PushScreen( , , , ) //- Function : Push specified screen contents on to the stack //- Notes : retrieve with PopScreen //--------------------------------------------------------------------- function PushScreen( nTop, nLeft, nBottom, nRight ) local lReturnStatus := .F. , oE default _aStack := _aLocal //-default pointer to local stack if len( _aStack ) == ST_DEPTH oE := ErrorNew() oE:subsystem := "STACKS" oE:operation := "PushScreen()" oE:description := "Screen Stack Overflow" eval( ErrorBlock(), oE ) else aadd( _aStack, ; { nTop, nLeft, ; nBottom, nRight, ; SaveScreen( nTop, nleft, nBottom, nRight ) ; } ; ) lReturnStatus := .T. endif #ifdef DEBUG StackDepth() #endif return (lReturnStatus) //--------------------------------------------------------------------- //- Module : PopScreen() //- Function : Pop saved screen from top of stack //- Notes : returns a .T. if successful //--------------------------------------------------------------------- function PopScreen() local i := len( _aStack ) ,; lReturnStatus := .F., oE if len( _aStack ) == 0 /* stack underflow - error out */ oE := ErrorNew() oE:subsystem := "STACKS" oE:operation := "PopScreen()" oE:description := "Screen Stack Underflow" eval( ErrorBlock(), oE ) else RestScreen( _aStack[i][1], _aStack[i][2] , ; _aStack[i][3], _aStack[i][4] , ; _aStack[i][5] ; ) _aStack := aSize( _aStack, i-1 ) lReturnStatus := .T. endif #ifdef DEBUG StackDepth() #endif return lReturnStatus //--------------------------------------------------------------------- //- Module : PopAllScreens() //- Function : Pop All remaining screens from the stack //- Notes : returns nil value //--------------------------------------------------------------------- function PopAllScreens() while len( _aStack ) > 0 PopScreen() end return nil //--------------------------------------------------------------------- //- Module : SetStackFrame( aFrame ) --> aOldFrame //- Function : Etablish a local stack frame //- Notes : points internal frame pointer to specified array variable //--------------------------------------------------------------------- function SetStackFrame( aFrame ) local oE, aOldFrame if valtype( aFrame ) != "A" //-not an array /* Error out! */ oE := ErrorNew() oE:subsystem := "STACKS" oE:operation := "SetStackFrame()" oE:description := "Stack Frame Type Error" eval( ErrorBlock(), oE ) else aOldFrame := _aStack //-pass current frame back to caller _aStack := aFrame //-point frame pointer at user's stack end return (aOldFrame) //--------------------------------------------------------------------- //- Module : GlobalStack() --> nil //- Function : Set frame pointer back to local stack //--------------------------------------------------------------------- function GlobalStack() _aStack := _aLocal //-point frame pointer back at internal stack return nil //--------------------------------------------------------------------- //- Module : StackDepth() --> nil //- Function : Display Stack Depth (hotkey function) //- Notes : Note - This function is provided as a means of locating //- and stack overflows. It should be accessed via a hot-key //--------------------------------------------------------------------- function StackDepth() @ 0, 0 say "Stack: " + padl( len( _aStack ), 3 ) return nil //------- eof : stacks.prg -------------------------------------------- 6. Reply to 'Does Windows and .DLLs mean the end of the .LIB?' ----------------------------------------------------------------------- ReplyTo: David Kuechler 71202.1315@Compuserve.Com DLLS are in effect like giving the product away to all of your clients. If you develop an application for a company which also has its own development team, as soon as you hand over the final build, what's to stop them from re-using the .DLLs. A technique used by DLL's to avoid this problem is to have a little library which _must_ be linked in by the application in order to use the DLL. This library can be anything from a "shell" around the DLL's functions, to a simple call to a hidden DLL routine to set a switch so that the other DLL functions will work. Insofar as people breaking that, people can ultimately just copy the disk if they really want to rip you off. The same argument can be made about Clipper or MS Word or Lotus 1-2-3: "Once you give them a disk, what's to stop them from making copies for everybody?" I think the reality is that the overwhelming majority of people (and especially software developers) are pretty honest in these issues. 7. Subscribe To and/or Publish in the PC Developer Magazine. $ ----------------------------------------------------------------------- ReplyTo: Stephen Moignard <76711.1243@compuserve.com> Publisher, PC Developer Magazine, Melbourne, Australia PO Box 59, Moorabbin VIC 3189, Australia Phone: 613-532-0684 Fax: 613-532-0685 BBS: 613-532-1689 Subscriptions. PC Developer magazine is easy to read and understand, yet tackles tough language specific and generic issues. In depth articles look at maximizing your performance with Access, Visual Basic, C/C++, Pascal, Paradox, FoxPro, Clipper and more. Indexed Resource diskettes with every issue let you play with source code and sample executables. PC Developer now has at least 72 pages packed with information to keep you up with the best. Sharpen your skills and make your code more efficient by learning the latest techniques. Enjoy programming professionally with your own languages, and know what is happening with the others. Only PC Developer has the breadth and depth to help you write innovative, powerful and bullet proof applications. Subscribe to PC Developer magazine now - its the only way you can get it! For one free issue, send your name, address, phones and fax numbers, and list of languages you use. Tell them BCNN sent you. This is an introductory offer only--valid until end of November. Publish. We pay .14c Aust per word (including source code) for all published articles - and at 72 pages per issue - we need heaps of articles. Subjects required: Access, C/C++, Visual Basic, DBASE/Windows, Clipper, Fox, and SQLWindows! Paradox, Pascal, Assembler, etc. - all PC Development languages, especially GUI. Synopses should be sent to my email address (76711,1243) with full author contact details for posting cheques (all paid in US or other local currencies). Articles should be exclusive, but joint publication will be considered under some circumstances. 8. Back Issues of BCNN Clipper Newsletter Available via FTP. ----------------------------------------------------------------------- ReplyTo: Les Squires LSquires@WJI.Com [73020,3435] Back issues of email newsletters for Clipper, Access, Fox, SQLWindows, and Suite/Ole2.0 are available via FTP. FTP to WJI.COM, login as ftp, use your login name as your password, and follow the directions. 9. CD-ROM Opportunity for Clipper Third Party and Shareware Developers. ----------------------------------------------------------------------- ReplyTo: Edward Tiley of Tallahassee Florida 32311 USA <72007,3455> The next version of my book, Using Clipper, is going to have a CD ROM disk bound into the back of the book. If you have anything in the way of public domain code, crippled demos of your third party library, or shareware Clipper add-ons, let me know. This offer is open to anyone with something to share. The only criterion is that material must provide useful value to a Clipper programmers and not be JUST a blatant advertisement. 10. EndofMonth Function ----------------------------------------------------------------------- ReplyTo: Dana P. Crenshaw [75022,1343] I was reading the latest newsletter article containing a function for finding the last day in the month. I would like to submit this to your readership: *---------------------- Function LastDay(cDate) //-expected format is string date mm/dd/yy *---------------------- local dMaxDate := ctod( left(cDate,3) + '28' + right(cDate,3) ) local nMon := Month(dMaxDate) do while Month(dMaxDate + 1) == nMon dMaxDate++ enddo return (dMaxDate) //-returns last day in date format 11. ProHP 6.0 - Now supports Color printers. Upgrade Offer $ ----------------------------------------------------------------------- ReplyTo: Zion Nefesh ProHP <70712,3072> Fax: 407-774-6750 Phones: 800-374-7734, 407-774-7734 ) New Copy of ProHP 6.0 $179.00 Upgrade copies of ProHP 6.0 69.00 (Registered users only) Copies of EasyLet 2.1 20.00 (Limit 1 for each ProHP upgrade) Added Features to version 5.42 ------------------------------ Fully support the DeskJet 1200C (all features like the LaserJet 4 with color). PaintJet XL300 is like the DeskJet 1200C without all the fonts and it is also supported. With the DeskJet 1200C and PaintJet XL300 you can scale, render and print color PCX images. You'll get excellent color output. With all and other DeskJet printers you can create define and mix your own color palettes, select and use easily. New HP_prpcx() with progress function and option to abort the process. ProHP 6.0 has better memory management. New DeskJet functions --------------------- DJ_prcpcx() print a PCX color image to the printer DJ_initRGB() Create a modifiable RGB palette DJ_BW_pal() Set BW palette DJ_CMY_pal() Select 8 entry CMY palette DJ_RGB_pal() Select 8 entry RGB palette DJ_addRGB() Add RGB color to palette DJ_flush() Flush all pages DJ_gamma() Specify the gamma correction to be applied DJ_media() Select media type DJ_negmove() Specifies whether negative motion will be used DJ_poppal() Pop palette from stack DJ_pushpal() Push a copy of the active palette to stack DJ_quality() Select print quality DJ_render() Select render algorithm DJ_scaleHW() Set dest the foreground color _writeat() Write text to the screen while printing. 12. Technicon '94 Proceedings Book Now Available Through Client Care. ----------------------------------------------------------------------- ReplyTo: Computer Associates Client Care <72662,3706> Phone: 1-800-CALL-CAI (225-5224) Starting today, CA Client Care will start processing orders for the Technicon '94 Proceedings book. You will be charged $75 a copy, which includes shipping and handling within the US. (Depending on the country, there may be an additional charge to ship it outside of the US.) Copies are limited, and orders will be processed on a first come, first serve basis. 13. New OO Articles Posted on CASE Forum. ----------------------------------------------------------------------- ReplyTo: Bill Lazar 76270,1541 Ed Berard, creator of the Berard methodology, has just posted two new articles in the CASE-DCI forum (GO CASE), plus some background on himself and his work. Ed describes the two postings as follows: I have uploaded an article titled "Issues on the Testing of Object- Oriented Software" to library 13 (Quality Assrnc Inst) of the CASE - DCI forum. The article contains a large bibliography. An updated version of this article appears as chapter 15 in my book, "Essays on Object-Oriented Software Engineering, Volume 1," published by Prentice Hall, copyright 1993. (The name of the document should be "OOTEST.TXT".) -and- I have posted an article titled "Basic Object-Oriented Concepts" in library 3 (Objects) in the CASE - DCI Forum. The article presents an easy-to-read description of such object-oriented concepts as classes, metaclasses, parameterized classes, inheritance, aggregation, and systems of objects. The size of the article is about 35K. You may freely copy and distribute this article as long as you credit the author (me). 14. BCNN Statement of Ownership, Copyright, and Responsibility. -------------------------------------------------------------------------- The BCNN Newsletter is sponsored by the Xbase User Group of the Boston Computer Society. BCNN is dedicated to keeping professional database developers (both consultants and corporate employees) informed about educational events, meetings, job openings, world events, notable articles, technical tips, new and 'must have' products, etc. As an electronic network, organized by interest rather than geography, BCNN is also a hub where developers can address world class issues to fellow developers around the world. Recipients agree to respond via Email to periodic polls of their directions, opinions, and needs. For those who do not have User Groups in their areas, BCNN is a vehicle where individuals can volunteer and contribute to something larger than themselves. Over 10,200 persons world-wide participate in discussions on CA-Clipper, Microsoft Access, FoxPro, Gupta SQLWindows, and Suiteware. The newsletter is distributed monthly by electronic mail via CompuServe, Internet, FidoNet, and other electronic gateways. It is free of charge to individual developers. Modest fees are charged to corporations for job placement and third-party announcements. Opinions expressed are solely expressed by the authors or by the Xbase Language Group of the Boston Computer Society, even in cases where 'Xbase Language Group' is abbreviated to 'BCS'. All materials are copyrighted by the BCS, unless otherwise indicated, and free for any user group to redistribute via BBS or newsletter on the condition that a by-line referencing the BCNN and the individual author are included. Les Squires, Director Xbase User Group c/o Word Jenny, Incorporated P. O. Box 126 29 Brick Kiln Road, Kilnwood Center Harbor, New Hampshire 03226-0126 USA 603-253-6109 //-Primary Phone & Messages 24 hours 603-253-7214 //-Messages Only 24 hours 603-253-9864 //-Fax 24 hours a day INTERNET:LSquires@WJI.Com //-First choice for Email. CIS:73020,3435 //-Second choice for Email. Boston Computer Society, Inc. 101 First Avenue, Suite 2 Waltham, MA 02154 617-290-5700 General Number 617-290-5700 Ext. 432 for up-to-date meeting information. Add Subscribers: CLIPPER-YES to LSquires@WJI.Com. Delete Subscribers: CLIPPER-NO to LSquires@WJI.Com. Address Change: Email using OLD Address. Indicate New Address. Back Issues: FTP WJI.Com, Login as ftp, use your ID as the password, cd clipper, copy all back issues. WWDN(tm) World Wide Developer Network Email Services donated by Word Jenny, Inc., Boston, Massachusetts USA LSquires@WJI.Com (c) 1994 Boston Computer Society, Inc.