°±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± °°±±±°ÞÞÞÞ±°ÞÞÞÞ±±±±°ÞÞÞÞ±±°ÞÞÞÞÞÞ±°ÞÞÞÞÞÞ±°ÞÞÞÞÞÞ±±°ÞÞÞÞ±±± °°±±°ÞÞ°°ÞÞ±°ÞÞ±±±±±±°ÞÞ±±±±°ÞÞ°°ÞÞ±°ÞÞ°°ÞÞ±°ÞÞ°°ÞÞ°ÞÞ°°ÞÞ±± °°±°ÞÞ±±°°±±°ÞÞ±±±±±±°ÞÞ±±±±°ÞÞ±°ÞÞ±°ÞÞ±°ÞÞ±°ÞÞ±°ÞÞ°ÞÞÞ±±±±± °°±°ÞÞ±±±±±±°ÞÞ±±±±±±°ÞÞ±±±±°ÞÞÞÞÞ±±°ÞÞÞÞÞ±±°ÞÞÞÞÞ±±°ÞÞÞ±±±± °°±°ÞÞ±±±±±±°ÞÞ±±°Þ±±°ÞÞ±±±±°ÞÞ°°±±±°ÞÞ°°ÞÞ±°ÞÞ°°ÞÞ±±±°ÞÞÞ±± °°±°°ÞÞ±±ÞÞ±°ÞÞ±°ÞÞ±±°ÞÞ±±±±°ÞÞ±±±±±°ÞÞ±°ÞÞ±°ÞÞ±°ÞÞ°ÞÞ°°ÞÞ±± °°±±°°ÞÞÞÞ±°ÞÞÞÞÞÞÞ±°ÞÞÞÞ±±°ÞÞÞÞ±±±°ÞÞÞÞÞÞ±°ÞÞÞÞÞÞ±±°ÞÞÞÞ±±± °°±±±°°°°±±°°°°°°°±±°°°°±±±°°°°±±±±°°°°°°±±°°°°°°±±±°°°°±±±± °°°±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±± °°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°° Volume 1, Number 14 26 November 1991 (c) Daniel Do‡ekal, All Rights Reserved The BBS Clipper magazine, published WEEKLY, every FRIDAY Some of the material used comes from scanning CLIPPER echoes which are carried in various BBS throughout the World. These Echoes are very often the source of the most often asked Questions and Answers about Clipper. Other material, which is fully signed or abbreviated is the copyright of the appropriate persons. The publisher is not responsible for other authors submissions.... Published material is not necessarily the opinion of the publisher. Redaction: Publisher...................................Daniel Docekal Chief editor ...............................Daniel Docekal Language editor .................................Dave Wall Table of Contents 1. EDITORIAL ............................................................. 1 Second decade editorial ............................................... 1 2. ARTICLES .............................................................. 3 5.0 FOCUS: Memory Management, Overlay Reloading #1 .................... 3 3. SOFTWARE .............................................................. 7 PATCH of OPTIMIZE coming with QEMM 6.0 ................................ 7 QEMM 6.0 and troubles coming with STEALTH options ..................... 9 4. Q&A ................................................................... 16 Q&A: Desqview and CACHE programs are NOT working properly together .... 16 Q&A: Desqview and high speed communication programs ................... 16 Q&A: File corruptions under Desqview .................................. 16 Q&A: Hangs of system after floppy access in Desqview .................. 17 Q&A: Desqview is repeatedly hanging ................................... 17 5. ANOMALIES ............................................................. 18 ANOMALIES reports and commets ......................................... 18 MISC Miscellaneous clarification/anomalies ............... 18 DBCREATE() is killing existing ALIAS .................................. 18 KEYBOARD anomaly ...................................................... 19 6. CLIPPER NET ........................................................... 20 CLIPBBS 1-14 Table of Contents (...) 26 Nov 1991 Index of described files in Clipper BBS Magazine ...................... 20 ClipperNet - PAT2-3.ARJ ............................................... 21 ClipperNet - CLIPPLUS.ZIP ............................................. 21 ClipperNet - MSWIN.ARJ ................................................ 22 ClipperNet - POSTPRNT.ARJ ............................................. 22 ClipperNet - SHADO.ARJ ................................................ 22 ClipperNet - BUTTON.ARJ ............................................... 23 ClipperNet - DTF102.ARJ ............................................... 23 ClipperNet - HOTKEY.ARJ ............................................... 23 7. CLIPBBS ............................................................... 25 CLIPBBS distribution .................................................. 25 CLIPBBS, how to write an article!!! ................................... 26 - - - - - CLIPBBS 1-14 Page 1 26 Nov 1991 ============================================================================== EDITORIAL ============================================================================== Second decade editorial Hello again. Today i had really nice day, morning appointment with dentist left me with toally 'wooden' mouth. Injection of something is very nice to not feel paing, but then noone want to speek anymore . Actually, i'm glad for this injection, otherwise it will follow practice from my post-- socialistic country Czechoslovakia. Just wondering, it has nothing to do with ClipperBBS, but how may look dentist in your country? Czechoslovakian dentist is: 1) never using any injection of somethign to keep out of pain when making holes 2) never giving you hand and telling you "Hello" and then "Good Bye".. 3) using seal of metal color which will after one year go to be totally black (what a surprise, dentist here in The Netherlands is using seal which has similar color as mine tooth) 4) making from small hole in tooth something like toilet hole 5) forbiding you to eat at least for four hours, otherwise your seal will be lost (suprising again, i could eat and drink immediately) 6) making next appointment somewhere after few months before it is totally busy.... 7) never promising that something will be beter (here in Holland it seems like that repaired tooth is really repaired) 8) sometime not repairing correct tooth, mostly is just one left or one right from wrong one. And now, what you country? Not, stop. Let's take a look to something different. Can we not see any similarity with above and Nantucker/Clipper? Do you think NOT? I will show you. Nantucket is: 1) Never using any way of solid help to keep your pain with Internal errors out of your mind... 2) Will only get money, give Clipper and then chance to receive any material from them is somewhere around zero 3) release Clipper 5.0 which looks nice, but after using is absolutely out of possibilites to use :-) 4) (difficult, this point) filling your disk with millions of norton guides, error reports, internal error reports, fixes and tricks and never giving any paper... 5) answering to your question with nice sentence "it is known problem, you have to wait to next version or make some workarounds, but we don't know which, way few days (will become weeks) and we will maybe know", or any different view, forbiding you forever to include your Clipper between normal programming languages and to cooperate directly from "C" to Clipper... CLIPBBS 1-14 Page 2 26 Nov 1991 6) don't know if is totally busy, but time hole between Clipper 5.0 and Clipper 5.01 was unbelievably long 7) Never promising anything because of points 1->6 8) not so much listening to problems and giving tips and fixes about something different that was needed and trying to tell, that for example INCREMENTAL linking is working, never mind than must receive thousands of complains about /INC not working... And now, WARNING please, maybe in your country are difference practices, but from here (The Netherlands) it seems like is written . Seriously now, it's up to you if it's fitting as was written, this editorial is just result of one vist on Dentist. Second visit is coming soon (next thursday :-) ), because my tooths are really very bad now, because of : 1) i was VERY afraid to go to dentist (because of point 1 till 8) 2) repairment was very bad (because of point 1 till 8) Cheers Daniel ------------------------------------------------------------------------------ CLIPBBS 1-14 Page 3 26 Nov 1991 ============================================================================== ARTICLES ============================================================================== 5.0 FOCUS: Memory Management, Overlay Reloading #1 by Roger Donnay As a long-time user of RTLINK, I feel compelled to share with you some insights on how to get much more from this great linker than can be derived from the Clipper documentation. My particular area of interest is linking technology - Why? Because I learned long ago that time invested in learning the "art" of linking will pay dividends equal or greater than those derived from learning new programming techniques. Let me give you an example of what I mean. Let's say you are running into a memory wall in your application and you simply must find a way to remove 40k from your root .EXE. I can only guess what you are thinking now: "Wait a minute, what wall is he talking about? I thought that 5.0's VMM system and dynamic overlaying system were designed to make Clipper work in virtually any DOS memory environment." It is true that 5.0 has memory management features built-in which far surpass those in Summer 87, but that doesn't mean you will never run out of memory. What it does mean is that you now have many more options available for the management of memory, but even under 5.0, MEMORY STILL MUST BE MANAGED, and you, the 5.0 programmer, have just been promoted to manager. Getting back to our example - The task is to manufacture 40k of memory in an existing application. I have been faced with this task many times. I could probably give you a list of a hundred changes you could make to your code to get back this 40k of memory - but I'd much rather show you one or two changes you can make to your link file. The first of such proposed changes utilizes the RELOAD feature of RTLINK. This article is the first in a series designed to help you manage memory under Clipper 5.0. Some of what I will cover is already documented in the 5.0 manual, but most of it is not. RELOADABLE OVERLAYS Overlay Reloading is a very important "undocumented" feature of the RTLINK linker supplied with Clipper-5.0. I have been RELOADING objects from the Summer 87 Clipper libraries for years, so when I received my copy of Clipper-5.0, the first thing I attempted to do was to overlay some of the larger C/ASM modules in the Clipper libraries using the RELOAD command in my linker script file. The Nantucket development team had the foresight to insure that their C and ASM compiler assigned a UNIQUE name to each Clipper C/ASM object in the Clipper libraries, thus allowing, you, the Clipper programmer to use both the "undocumented" RELOAD command and MODULE command in your .LNK script files. So what are "Reloadable Overlays"? These are a form of STATIC overlay in which segments of code are placed into overlay sections that occupy the same memory space at runtime, however the "calling module" is CLIPBBS 1-14 Page 4 26 Nov 1991 automatically "reloaded" into memory when returning from the "called module". Reloadable overlay segments usually look like this in your link file: RELOAD FAR 200 # area 1 BEGINAREA SECTION FILE A SECTION FILE B SECTION FILE C ENDAREA # area 2 BEGINAREA SECTION FILE D SECTION FILE E SECTION FILE F ENDAREA I supposed you are now thinking: "What a waste of time. I happen to know that RTLINK automatically overlays all Clipper code - this guy has been sniffing glue again." Well, you are half right. RTLINK does use an automatic overlaying system called "dynamic pages" for all code which has been compiled by the Clipper-compiler, but it does not automatically overlay code written in C or ASM, and this is the predominant class of code in the Clipper libraries. Not all Clipper applications are going to need to use these reloadable static overlays, but if your application relies heavily on third-party libraries written in C/ASM or you use DBEDIT(), MEMOEDIT(), TBROWSE(), Report Forms, or other large modules from the Clipper libraries, then it is recommended that you learn this technique. The main advantage of "reloadable overlays" over conventional "static overlays" is that you are never in danger of "lockup" in the event that a procedure or function in FILE A calls a function or procedure in FILE B because FILE A will be reloaded into memory on return from FILE B. If you graduated from Summer 87 and used PLINK86's static overlaying system, you know exactly what I am talking about. If you use the RELOAD command with RTLINK, and assign a large enough value to the RELOAD stack, you will never again experience call stack corruption and computer lock-up. Make sure when you use the RELOAD command that you always use it as follows: RELOAD FAR where the is the amount of memory in hex bytes to use for saving addresses. My experience is that most applications will run just fine with a stack size of 200. If your application does recursive nesting, however, you may need to increase the stack size. Recursive nesting is described as follows: Procedure A calls Procedure B which calls Procedure A which calls Procedure B, etc, etc, etc. Each time a procedure is called, its return address is "pushed" onto the stack, and each time you return to the calling procedure the address is "popped" from the stack. In the above example, if this recursive condition were allowed to continue for a large number of iterations, the stack would be CLIPBBS 1-14 Page 5 26 Nov 1991 overrun and the program may crash. Although your application will not crash using RELOAD, it may slow down a bit if overlay segments are not structured properly, because each time an overlay is reloaded the application must go to disk. In the above example if a function in FILE A repetitively calls a function in FILE B then your application will be very "disk intensive" and will run slowly. If a function in FILE A repetitively calls a function in FILE D there will be no slowing at all because both modules will remain in memory. Overlay management of C/ASM code with "reloadable overlays" is less time-consuming and more reliable than simple conventional "static overlays" and provides an additional advantage of allowing more modules to be overlayed, thereby saving additional memory usage. Overlay managers which provide "RELOAD" commands usually limit the automatic reloading to either "NEAR" or "FAR" calls. The Clipper-compiler mixes both near and far calls therefore Clipper-compiled code cannot be overlayed in this manner. Even if you include a Clipper-compiled object in a static overlay it will automatically be converted to a "dynamic" overlay by RTLINK/5.0 and the command will be ignored. PLACING CLIPPER LIBRARY MODULES INTO RELOADABLE OVERLAYS Refer to the below script file for an example of how to use Static reloadable overlays to reduce memory usage in your Clipper-5.0 applications. This link file creates an overlay area for overlaying the larger modules in the Clipper libraries which are not likely to call each other recursively, therefore you will probably notice very little difference in speed performance yet you will get up to 40K more memory overhead depending on how much of the Clipper libraries your application uses. You may get a "warning" message during link time if your application does not call one of the modules referenced in an overlay area. In the event this happens, simply remove that module from the link file. For example, if you are not using any TBROWSE objects or DBEDIT() remove the following line: SECTION MODULE D:\S89\EDIT\TBROWSE.C # Example of using RELOADABLE overlays with the # Clipper-5.0 version of RTLINK FI LIB LIB \CLIPPER5\LIB\extend LIB \CLIPPER5\LIB\clipper LIB \CLIPPER5\LIB\terminal LIB \CLIPPER5\LIB\dbfntx OUTPUT VERBOSE # Add this portion to your existing .LNK script file RELOAD FAR 200 CLIPBBS 1-14 Page 6 26 Nov 1991 BEGINAREA SECTION MODULE D:\S89\EDIT\MEMOEDIT.C MODULE D:\S89\MEMO\MEMOTRAN.C SECTION MODULE D:\S89\MEMO\MEMOREAD.C MODULE D:\S89\MEMO\MEMOWRIT.C MODULE D:\S89\MEMO\MEMOLINE.C MODULE D:\S89\MEMO\MLCOUNT.C MODULE D:\S89\MEMO\MLPOS.C SECTION MODULE D:\S89\EDIT\TBROWSE.C SECTION MODULE D:\S89\EDIT\ACHOICE.C MODULE D:\S89\ARRAY\ASCAN.C MODULE D:\S89\ARRAY\ASORT.C MODULE D:\S89\ARRAY\ARRAY.C MODULE D:\S89\ARRAY\DIRECTRY.C SECTION MODULE D:\S89\DBCMD\DBSTRUCT.C MODULE D:\S89\DBCMD\DBCREATE.C MODULE D:\S89\DBCMD\JOINLIST.C MODULE D:\S89\DBF\SORTOF.C SECTION MODULE D:\S89\TERM\GETHELP.C ENDAREA Another important undocumented feature of RTLINK is the MODULE command. The MODULE command is very useful in that it allows RTLINK to place "modules" from libraries into overlays. When a compiler creates an .OBJect file it also assigns a "module" name for the linker. The Clipper compiler assigns the same name as the .OBJ file, however many compilers will assign the name of the SOURCE file as the module name including drive letters and directories. You can organize your projects by placing all your C/ASM objects in libraries with a library manager such as LIB.EXE or PLIB86.EXE then by using the SECTION MODULE command in your link file you can place any module into any overlay area. Example: LIB mylib BEGINAREA SECTION MODULE myfileA,myfileB SECTION MODULE myfileC SECTION MODULE myfileD ENDAREA The MODULE command in RTLINK requires that the exists in one of the declared libraries and that the name is "unique" to that module otherwise the command will be ignored and the module will be linked into the root memory area. This is not a problem with Clipper-5.0 because the modules are given unique, but very long names. In my next article, I will show you how to use the RELOAD and MODULE commands to overlay C/ASM code from popular third-party libraries such as FUNCKY, PROCLIP, dGE, and FLIPPER. ------------------------------------------------------------------------------ CLIPBBS 1-14 Page 7 26 Nov 1991 ============================================================================== SOFTWARE ============================================================================== PATCH of OPTIMIZE coming with QEMM 6.0 Subject: Patching Optimize 2.0 to resolve problems where, under some circumstances, Optimize will forget during its final phase that it required the Squeeze feature. Background: Many TSRs and device drivers take up more memory when they initialize than they require when they are resident. Optimize's Squeeze feature allows such programs, when they do not use EMS, to load partially into the page frame provided that they shrink down to a size that won't leave part of the program in the page frame. Under QEMM-386, the Squeeze feature can also make temporary use of ROM areas for loading high, provided that the ROM is not used while the program is initializing. Under some circumstances when Optimize 2.0 reaches the "ideal" result - that is, nothing in conventional memory and nothing in the largest high RAM region - and it required Squeeze to reach this result, Optimize will forget during its final phase that it required Squeeze. There is no workaround other than running Optimize with the /NOSQF and /NOSQT parameters to disable Squeeze. The problem should, however, not occur very often. The symptom of this problem is that a program that is supposed to be loaded into high memory evokes the LOADHI message "Not enough room to load high. Loading low:" on the final phase of OPTIMIZE. This patch, which resolves the above problem, only works on Optimize version 2.00, which has a date of 8/23/91 or 8/28/91 and comes with either QEMM-386 V6.00 or DESQview-386 V2.40. Earlier and later versions of Optimize do not exhibit this problem and do not require this patch. *************************************************** 1) Change to your QEMM directory. 2) Copy the original OPTIMIZE.COM file so that if you make a mistake you will be able to restore from a good copy. Type COPY OPTIMIZE.COM OPTIMIZE.OLD at the DOS prompt. 3) In order for DEBUG to process Optimize correctly, you need to rename it. At the DOS prompt, type REN OPTIMIZE.COM X 4) Now, load the file called X into DEBUG by typing DEBUG X at the DOS prompt. Make sure that DEBUG is in your path or that you precede DEBUG with the path where DOS can find it. If all works out, you should see a hyphen (-) for a prompt. This is the DEBUG CLIPBBS 1-14 Page 8 26 Nov 1991 prompt. 5) Now make sure that the registers in the microprocessor are in the correct state by typing R at the DEBUG prompt. You should get something like this: AX=0000 BX=0001 CX=15C5 DX=0000 SP=FFEE BP=0000 SI=0000 DI=0000 DS=xxxx ES=xxxx SS=xxxx CS=xxxx IP=0100 NV UP EI PL NZ NA PO NC xxxx:0100 4D DEC BP Make sure that BX is equal to 0001 and that CX is equal to 15C5. If BX and CX are not equal to these values, then you should not continue with the patch. Type Q at the DEBUG prompt to quit out of DEBUG if BX is not 0001 and CX is not 15C5. 6) If the BX and CX values are correct, type S CS:100 FFFF e8 e9 e3 72 05 at the DEBUG prompt. This will return a number with the form of xxxx:5C45. If the number that returns does not have a 5C45 after the colon, DO NOT APPLY THIS PATCH. If the wrong number returns, type Q at the DEBUG prompt to quit out of DEBUG. 7) If the number that returns is xxxx:5C45, type E 5C48 DEBUG should respond with xxxx:5C48 72. 8) Now type EB at the DEBUG prompt and hit the Enter key. This will make the only change that you need to make in the file. 9) Now save your work by typing W at the DEBUG prompt. It should say Writing 115C5 bytes CLIPBBS 1-14 Page 9 26 Nov 1991 or Writing 15C5 bytes depending on the version of DOS you are using. 10) Now you can quit DEBUG by typing Q at the DEBUG prompt. This will drop you back to the DOS prompt. 11) Rename X back to OPTIMIZE.COM by typing REN X OPTIMIZE.COM at the DOS prompt. You should be able to run Optimize successfully now. -------------------------------------------------- If Optimize fails after you perform this patch, you can recover your backup of Optimize by typing COPY OPTIMIZE.OLD OPTIMIZE.COM at the DOS prompt. You may then wish to try the above procedure again, in case a mistake was made. * * * E N D O F F I L E * * * ------------------------------------------------------------------------------ QEMM 6.0 and troubles coming with STEALTH options This document discusses how to diagnose and cure problems occasioned by the use of the Stealth feature of QEMM-386, version 6. All users should review the readq.me file that comes with QEMM-386, version 6 for additional information. FIRST STEP The first step is to ascertain whether Stealth is involved with the problem. Remove the Stealth parameter (ST:M or ST:F) from the QEMM-386 line of the config.sys. Reboot the computer and try to duplicate the problem. If the problem still happens then Stealth is not causing the problem and you must address the problem by the means explained in the troubleshooting section of the QEMM-386 manual. SECTION 1 SECOND STEP If Stealth is involved in the problem restore the Stealth CLIPBBS 1-14 Page 10 26 Nov 1991 parameter (ST:M) and add XST=F000. Reboot the computer. If this works, go to the third step; if this does not work, go to Section Two. On this step the QEMM-386 line of the config.sys should look something like: device=c:\qemm\qemm386.sys ram st:m xst=f000 THIRD STEP If XST=F000 solves your problem replace it with X=F000-FFFF, reboot and try again. The QEMM-386 line of the config.sys should look something like: device=c:\qemm\qemm386.sys ram st:m x=f000-ffff If this works, add the parameter FSTC to the qemm line, thusly: device=c:\qemm\qemm386.sys ram st:m x=f000-ffff fstc and reboot. If this works continue; if this does not work (and FSTC may not work in all circumstances) then remove the FSTC parameter and reboot with the previous QEMM-386 line. See the section about FSTC below for an explanation of FSTC. In either case, enter Manifest and look at the QEMM- 386/Analysis screen. Look at the last line: It should look something like this: Fn00 IIII IIII IIII IIOO The portions of the address space with the O in them are being accessed directly. Some program or piece of hardware is trying to read the contents of the ROM here directly, not merely access them through interrupts. This portion of the address space must be allowed to be accessed directly. This is done by excluding QEMM-386 from mapping this area. In this case the target region is FE00- FFFF. The appropriate Exclude is X=FE00-FEFF. The correct QEMM- 386.SYS line of the config.sys is: device=c:\qemm\qemm386.sys ram st:m x=fe00-ffff This Exclude allows Stealth to do its job and costs you only 8K of high address space. FOURTH STEP If XST=F000 solves your problem while X=F000-FFFF does not then you should try using ST:F instead of ST:M. You may get more high ram with ST:F than with ST:M XST=F000. SECTION TWO This section is only for users with video ROM. Hercules-compatible monochrome and CGA systems do not have video ROM and thus this section does not apply. Some machines have their video ROM elsewhere, usually E000-E7FF. Such users should use E000 (or wherever their video ROM begins) instead of C000. FIFTH STEP CLIPBBS 1-14 Page 11 26 Nov 1991 If XST=F000 does not solve your problem then try XST=C000. The QEMM-386 line of the config.sys should look like: device=c:\qemm\qemm386.sys ram st:m xst=c000 If XST=C000 does not work, go to Section Three. If XST=C000 does work, go to the next step. SIXTH STEP If XST=C000 solves the problem then try placing the page frame at C000. Do this only if the entire C segment is available to put the page frame in. The QEMM-386 line of the config.sys should look like: device=c:\qemm\qemm386.sys ram st:m fr=c000 If this works then this may be acceptable solution. All the address space in which high ram can be created is being used in this configuration. If this step does not work or, if you cannot put the page frame at C000, go to the seventh step. SEVENTH STEP If XST=C000 solves the problem but you do not want to (or cannot) put the page frame at C000 then try the parameter FASTINT10:N, where "N" tells QEMM-386 to allow the video ROM's own code to be used. By default QEMM-386 replaces some of the video ROM's code with its own video code. This parameter tells QEMM to use the ROM's code. The QEMM-386 line of the config.sys should look like: device=c:\qemm\qemm386.sys ram st:m fastint10:n If this works then all ROMs are being Stealthed. You may choose to try the eighth step as an alternative though. If this does not work, go to the next step. There is a further discussion of FASTINT10 below. EIGHTH STEP If XST=C000 solves the problem but FR=C000 or FASTINT10:N does not (or you cannot put the page frame at C000 or do not want to use FASTINT10:N) then replace XST=C000 with X=C000-C7FF. The QEMM-386 line of the config.sys should look like: device=c:\qemm\qemm386.sys ram st:m x=c000-c7ff If this works, add the parameter FSTC to the QEMM-386 line, thusly: device=c:\qemm\qemm386.sys ram st:m x=c000-c7ff fstc and reboot. If this works continue; if this does not work (and FSTC may not work in all circumstances) then remove the FSTC parameter and reboot with the previous QEMM-386 line. See the section about FSTC below for an explanation. In either case, enter Manifest, go to the QEMM-386/Analysis screen, and look at the Cn00 line. It should look something like this: CLIPBBS 1-14 Page 12 26 Nov 1991 Cn00 OIII IIII OOOO OOOO This indicates that the first 4K region of the C segment, in the video ROM, is being accessed directly. This portion of the address space must be Excluded when QEMM-386 is Stealthing. The appropriate QEMM-386 line in the config.sys is: device=c:\qemm\qemm386.sys ram st:m x=c000-c0ff SECTION THREE NINTH STEP On some machines there are other ROMs that can be Stealthed; often these are disk ROMs. The same procedure: trying XST=??00, then replacing it with the appropriate Exclude of the old kind (X=??00-!!FF) to see if the problem is related to Stealthing or just not having some portion of the ROM's address space directly accessible, can be used. The trick of making the page frame begin at the beginning of the disk ROM may also work here as well. If XST=??00 solves your problem, try replacing it with FR=??00, presuming that there is a 64K portion of the address space free beginning at ??00 and that ?? is a multiple of 16. If some portion of the address space must be Excluded for Stealth to work you should check Analysis with the FSTC and X=??00-!!FF parameters on the QEMM line. TENTH STEP Use XST=F000, XST=C000, XST=??00, and simultaneously for all ROMs being Stealthed. Then replace the XSTs one by one with the appropriate regular Exclude (X=F000-FFFF, X=C000-C7FF, X=??00- !!FF...), look at the QEMM-386/Analysis screen of Manifest and discover what portions of the address space need to be directly available. ELEVENTH STEP If ST:M does not work try ST:F instead. If ST:F does not work you should try ST:F XST=C000 (and XST=??00) for other Stealthed ROMs other than the one(s) overlain by the page frame. TWELFTH STEP If none of these steps solve the problem please pin down exactly what program is failing (and at what point), and file a report with Quarterdeck. INTERESTING QUESTIONS WHAT IS FASTINT10:N? QEMM-386, when Stealthing a video ROM, replaces some of the video ROM's code with replacement code written by Quarterdeck. This replacement code is suitable for most video cards. The FASTINT10:N (which may be abbreviated F10:N) parameter tells QEMM-386 not to use its own replacement code but the literal code of the video ROM. This in no way limits the amount of high RAM Stealth creates and may be acceptable solution for those users who need it. It should only be necessary on unusual video cards. If placing the page frame at the beginning of the video card's ROM works or if a small regular Exclude also solves the CLIPBBS 1-14 Page 13 26 Nov 1991 problem you may choose to use this solution instead. WHAT IS FSTC? The purpose of the FSTC parameter is to make the Analysis procedure accurate. Some system and video ROMs may not function properly with the FSTC parameter. If this is the case on your system you will have to perform the Analysis procedure without the FSTC parameter. However, you should be aware in this case that some of the Exclude statements that Analysis prompts you to use may not be necessary. You can try reducing these Excludes on a trial-and-error basis if you wish. When QEMM-386 Stealths a ROM certain tables may have to be stored by QEMM-386 in its own data area. This uses a few kilobytes of high RAM. When a ROM is being Stealthed but the address in which the ROM resides is Excluded (as with X=C000-C7FF) then QEMM-386 cleverly figures out that it does not need to make copies of these tables in its own data area so it saves this memory by not making copies of the tables. This means that when you do Exclude the portion(s) of the ROM where these tables are stored the ROM will be accessed directly though it would not be if it were not Excluded. This will cause Analysis to report that a portion of the address space is OK when Excluded even though it would not be accessed directly were it not Excluded. FSTC (FORCESTEALTHTABLECOPY) forces QEMM-386 to make copies of these tables so that inappropriate Excludes are not recommended for the above reason. FSTC should only be used when you are testing a portion of a ROMs address space for direct access by Excluding the whole ROM. It is not an appropriate parameter for a final configuration. WHAT ARE ADVANCED DISK FEATURES? The BIOS has a set of function calls intended for use by multitasking programs. These are Int 15, functions 90 and 91. The system ROM or disk ROM may issue the Int 15, fn 90 call while it is waiting for the disk controller to read or write a sector, allowing other programs to execute during this wait. When the sector is ready, the disk interrupt handler issues an Int 15, Fn 91, signaling the multitasking program that the disk information is ready to be processed by the system or disk ROM. Some disk caches hook this call to allow your system to go ahead and execute your current program while the system or disk ROM is waiting for its requested sector. Whereas these caches preserve the stack and register state for the BIOS and the application when doing this pseudo-multitasking, they do not preserve the mapping of the page frame. Therefore, if the BIOS uses the page frame itself (as does Stealth), this could generate conflicts and system failures. Since no known disk cache does the proper page frame preservation, QEMM automatically suppresses INT 15, function 90 calls from the BIOS, effectively disabling advanced disk features. Caches that save and restore the page frame when using advanced disk features can use a programming interface to QEMM-386 to reenable advanced disk features. You may defeat QEMM-386's defeating of this feature with the VIRTUALHDIRQ:N (VHI:N) parameter on the QEMM-386 line of the config.sys. If your cache has these "Advanced Features" and does not save and restore the page frame you will crash or corrupt data on the cached drive(s). WHAT IF I LOAD A DRIVER THAT USES ROM BEFORE QEMM-386? If you want to load a device driver before QEMM-386 and it uses a CLIPBBS 1-14 Page 14 26 Nov 1991 ROM then QEMM-386 can still Stealth this ROM if you load the driver HOOKROM.SYS before this driver. Here is an example: device=c:\qemm\hookrom.sys device=c:\????????.sys device=c:\qemm\qemm386.sys ram st:m WHY DOES MY SYSTEM SETUP NO LONGER COME UP WITH ST:M? On machines with a built-in system setup program in the BIOS ROM that can be popped up at any time Stealth may make this feature inaccessible after you have booted. This is because the setup program accesses the ROM directly. In order for it to work after QEMM-386 has been loaded you must Exclude the portion of the address space where it is stored. On most machines this is in F000-F7FF or thereabouts. You may decide that it is better to use the system setup only on boot and be able to use this portion of the address space for high RAM when you are running. This is the way many systems are these days and you must reboot to implement the changes anyway so you may consider this a fair trade. Machines with a setup program that loads as a regular program may not present this problem. WHAT IS GOING ON? With ST:M Stealth is moving out of the address space all ROMs accessed by means of interrupts (you can see what interrupts are being handled by what ROMs in the First Meg/Interrupts screen of Manifest when you are not Stealthing.) When these interrupts are asserted, QEMM-386 puts the ROM code that services the interrupt into the page frame. With ST:F Stealth is allowing the page frame to share the address space used by the ROM, making the underlying ROM code available in the page frame when an interrupt pointing into the ROM is asserted. HOW CAN IT FAIL? The Stealth technology relies on the practice of using the code in ROMs only by means of interrupts. With the exceptions listed below when the code in a ROM is accessed directly the program or hardware using this code (or information) will find high RAM there instead with ST:M and will malfunction. Although this is not common it does happen. Sometimes programs look for identification information: For video cards this usually happens in the bottom 4K; for system BIOSes this usually happens in FE00-FEFF. Most users for whom Stealth fails can recover almost all the high RAM Stealth can create with small Excludes of this kind. Exceptions: 1) QEMM-386 does not map High RAM into the last 64 bytes of the system BIOS ROM because they are commonly accessed directly. Accesses here do not cause Stealth a problem. 2) When a ROM accesses itself directly then it should work IF the page frame begins at this ROM's beginning address. There are some video cards and disk controllers that fail because the video ROM (disk ROM) does not tolerate relocation. The ready cure for this symptom is to put the page frame at C000 (or whatever is the beginning of the appropriate video or disk ROM) so that when an interrupt that points into the video ROM (disk ROM) is asserted, and QEMM restores the contents of the video ROM (disk CLIPBBS 1-14 Page 15 26 Nov 1991 ROM) into the page frame, the ROM code can access itself where it expects to find itself; this is the purpose of step 6 of this method. 3) Direct accesses of one ROM to another work with ST:F. Disk caches that write directly to and read directly from the page frame cause Stealth to fail unless the DISKBUFFRAME=?? (DBF=??) is used. Stealth relies on there being interrupts pointing into a ROM in order to make it a target for Stealthing. If there is a ROM in the address space that QEMM-386 cannot detect as being used then it will not be Stealthed. This may happen for some disk ROMs and for devices that use the ROM only upon initialization. If there is a ROM without an interrupt pointing into it it is a suspect for being unused. You should use the Analysis feature of QEMM-386 to discover if this ROM is being used at all. If it is not then the address space it occupies may be reclaimed with an INCLUDE. SUMMARY The Stealth technology has been exhaustively tested but the wide variety of software and hardware in the PC world has surprises in it for every program. The actual Stealthing of interrupts is very successful. The most common failure is due to programs (or other ROMs) trying to access a portion of the ROM directly, rather than by means of interrupt. For this to work the target region of this access must be in the address space at the time of access. This can be achieved by an appropriate exclude of the old kind, usually at a cost of only 4K or 8K of the additional high RAM Stealth is creating; see steps 3 through 11 for a procedure to figure these Excludes out. If the video ROM or adaptor ROM is the target ROM of a problem then placing the page frame over the video ROM or adaptor ROM may work; see step 6. The "Advanced disk features" that some disk caches use are incompatible with Stealth. QEMM-386 disables these by default whenever possible if Stealth is used. Some disk caches write directly to the page frame. Such caches should be told to use extended memory or the DISKBUFFRAME=?? (DBF=??) should be used with QEMM-386; see step 2. If you have a problem intractable by any of these means Quarterdeck would like to hear about it. ------------------------------------------------------------------------------ CLIPBBS 1-14 Page 16 26 Nov 1991 ============================================================================== Q&A ============================================================================== PROBLEM: I can't get a caching program to work properly with DesqView. SYMPTOMS: After loading PC-Cache version 6, the cache does not work if you enter DesqView directly. If you use manifest to look at First Meg Programs, PC-CACHE is not listed. SOLUTION: I was not able to get PC-Cache version 6 to work correctly on my system. Either switch back to version 5.5 or get a shareware copy of ADCACHE. ADCACHE was written with QEMM, 386-to-the-max, and DesqView in mind. It is fast, small, and compatible. NOTE 1: I have also used Super PC-Kwik with success. It is larger than ADCACHE, but it is somewhat faster. NOTE 2: Central Point has released a new version of PC-Cache. This file is available on The Bertha BBS as PCTOL6UD.ZIP. I have not tried the new version because I had previously switched to Super PC-Kwik. NOTE 3: The current version of PC-Cache is 6.04. To find out what version you have, look at the time stamp of the file. ------------------------------------------------------------------------------ PROBLEM: System hangs when using high speed communications within DesqView. SYMPTOMS: When running high speed (>9600 baud) communications, the system will hang intermittently. SOLUTION: Switch to buffered (16550) serial ports. On my system, I was able to move to 19200 baud with no hangs by switching to the buffered ports. You may also try setting "Optimize Communications" to Y in the DesqView Setup area. Be cautious with this setting as it can cause some problems as well. It is also helpful to upgrade to DesqView 2.26 as there is better support for high speed communications. NOTE 1: I have now gone to 38400 baud on my system using the X00 FOSSIL driver. Things seem to be operating smoothly. NOTE 2: Please note that not all 16550 chips are created equal. The preferred chip is a National Semiconductor NS16550AFN. This is a 40-pin dip. Be wary of Western Digital WD16C550 chips which reportedly have FIFO problems with low-speed communications (2400 baud or less). ------------------------------------------------------------------------------ PROBLEM: System hangs and file corruption occur when running under DesqView. CLIPBBS 1-14 Page 17 26 Nov 1991 SYMPTOMS: Intermittent system hangs when operating with DesqView. Sometimes files will be corrupted. Usually unable to reproduce the problem consistently. SOLUTION: Check your interrupts! Interrupt conflicts can cause all sorts of strange problems. I still see people recommend using IRQ2 on an AT class machine. IRQ2 is a cascaded interrupt for IRQ8 through IRQ15 and cannot be used. A lot of us upgraded from an XT and are used to setting our systems up to use IRQ2. I moved my bus mouse card from an XT to an AT and had all sorts of problems until I changed the interrupt from IRQ2 to something that was not being used. ------------------------------------------------------------------------------ PROBLEM: System hangs after doing floppy access. SYMPTOMS: The system will lock up after doing floppy access. This is not consistent, but usually occurs after writing to the floppy. Floppy reads do not seem to be a problem. SOLUTION: I noticed this problem with some regularity on my system. I got to the point where I realized that the hang was only occurring after a write to the floppy. Reads did not appear to trigger the hang. I was using PCTools 6.0 to move files from the floppy to the hard drive. After a file is copied, it is deleted from the floppy in order to complete the move. During this process, a hang would sometimes occur. This could be exacerbated by ejecting the floppy prematurely to cause an error. My system would hang in the middle of this error message. The solution to this problem was to be found in the command line for my cache. I use Super PC-Kwik. I had set up the cache to ignore drives A and B with the /-A and /-B switches. But when I looked at the parameters for the cache I realized that diskette writes were still enabled (/D+). I changed the command line to disable diskette writes (/D-) and the problem has not occurred since. It is unclear whether this is a problem on other caches. ------------------------------------------------------------------------------ PROBLEM: Repeated system hangs when using DesqView. SYMPTOMS: System will hang intermittently and with no warning. SOLUTION: Check the setting of "Manage Printer Contention" in the DesqView Setup area. Numerous hangs are caused by having this set to "Y". Set it to "N". You must make sure not to have two applications printing at the same time. NOTE 1: The solution that I use for this problem is to use a buffer on the printer. Mine is 512K. That way I can print and the buffer takes all the data. Then I can close the window and print something else from another application immediately. ------------------------------------------------------------------------------ CLIPBBS 1-14 Page 18 26 Nov 1991 ============================================================================== ANOMALIES ============================================================================== ANOMALIES and their comments This part of Clipper BBS Magazine is dedicated to all discovered anomalies and comments about them in Clipper products. Because Nantucket is still unable to give own bug and anomalies reports (as actually did in past with Summer 87 version) is very handy to have results of many investigations done on many user places. I'm also doing my own investigatings, because i'm always very good when someting has hidden problems. Everything what i buy will first show all problems and then all normal things. This amazing part of my live is sometime making me crazy, but for testing of programs it's great . Daniel ------------------------------------------------------------------------------ MISC Miscellaneous clarification/anomalies. 2) MEMVARBLOCK() (NG Function Description) MEMVARBLOCK() cannot be used to create set-get blocks for LOCAL or STATIC variables. ------ COMMENT ------- MEMVARBLOCK() cannot be really used for LOCAL or STATIC, because THEY CANNOT EXIST ON RUNTIME LIKE a _NAME_. Names are exist ONLY from PRIVATEs, PUBLICs and from Functions. STATIC or LOCAL are just Memory Address and NOT a NAME (SYMBOL). It's very often mistake of beginners in Clipper that they are mixuping a terms. This is also enough documented in coming .NGuides for Clipper! .DD. ------------------------------------------------------------------------------ DBCREATE() is killing existing ALIAS DBCREATE() is killing existing alias in case when database created with this function has the same name as existing alias. IT's ONLY killing of ALIAS, because database stays opened and can be accessed by number of area, but not by ALIAS. Test program: SELECT 6 USE ( "\ncom\a\qbase.dbf" ) ALIAS QUEUE CLIPBBS 1-14 Page 19 26 Nov 1991 ? QUEUE->PRIORITIES SELECT 2 dbcreate( "QUEUE.dbf", { {"FELD1","C",18,0} } ) ? "" ? QUEUE->PRIORITIES Second "? QUEUE->PRIORITIES" is giving error because alias QUEUE doesn't exist longer. CLD is showing opened database, but all QUEUE-> aliased operation are UNDEFINED. ------------------------------------------------------------------------------ KEYBOARD anomaly String passed to keyboard and contains ";" character is transfered correctly with exception of ";" character which is transfered to CR (ENTER). Easily it can be demonstrated by using: KEYBOARD "Hello;boys" Memoedit of some string..... .DD. ------------------------------------------------------------------------------ CLIPBBS 1-14 Page 20 26 Nov 1991 ============================================================================== CLIPPER NET ============================================================================== Following is COMPLETE list of all published file descriptions in Clipper BBS magazine in previous numbers. Purpose of this index list is to allow anybody find needed file descriptions in growing number of described files. Short description after name will give first possible close image about file. Number enclosed in "[]" will mean number of Clipper BBS magazine. ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄ¿ ³FileName ³Src ³Description ³Where ³ ÃÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄ´ ³ACCESS.ARJ ³Cln ³Source of speed testing program ³[1-06]³ ³ACH2TB.ARJ ³Cln ³Convert ACHOICE to TBROWSE ³[1-05]³ ³ACHOO2.ARJ ³Cln ³Replacement of ACHOICE with GET possibilites ³[1-06]³ ³ADHOC302.ARJ ³Cln ³Summer 87 inteligent report program ³[1-04]³ ³ASCPOS.ARJ ³Cln ³replacement of ASC(substr(cString,nPosition,1)) ³[1-11]³ ³CALC14.ARJ ³Cln ³PoPup Calculator ³[1-08]³ ³CL5103.ARJ ³Cln ³Report of 5.01 anomaly number 3 ³[1-04]³ ³CL5REP6.ARJ ³Cln ³5.01 replacement of REPORT command ³[1-04]³ ³CLIP110.ARJ ³Cln ³Clipper Documentor program ³[1-05]³ ³CLIPLINK.ARJ ³Cbs ³Complete text of R.Donnay about linkers ³[1-04]³ ³CLIPSQL.ARJ ³Cln ³Demo of complete SQL library for CLipper ³[1-05]³ ³CLIPWARN.AJ ³Cln ³Semaphore for convert WARNING: into ERRORLEVEL ³[1-11]³ ³CLPFON.ARJ ³Cln ³Set of fonts for EXPAND.LIB from author ³[1-03]³ ³COND.ARJ ³Cln ³Builder of conditional indexes like SUBNTX ³[1-03]³ ³DBSCN2.ARJ ³Cln ³Screen designer generator ³[1-05]³ ³DIAL.CLN ³Cln ³Dialer with using of FOPEN() ³[1-07]³ ³DOC111.ARJ ³Cln ³Documentor, newer version ³[1-08]³ ³ENDADD.ARJ ³Cln ³replacement of incrementing last char of string ³[1-11]³ ³GETKEY.ARJ ³Cln ³Input oriented library, wordprocessing ³[1-12]³ ³GSR151.ARJ ³Cln ³Global Search and replace for programmers ³[1-07]³ ³HGLASS.ZIP ³Cln ³Hour glass for indication of index progression ³[1-04]³ ³INDXSL.ARJ ³Cln ³User Fields selection builder for index generate³[1-03]³ ³IOBASYS9.ARJ ³Cln ³Demo of S87 library and calling Clipper from C ³[1-03]³ ³IS.ARJ ³Cln ³Several c sources of ISxxxx functions ³[1-11]³ ³JG2.ARJ ³Cln ³Jumping between GET statements in READ ³[1-08]³ ³KF_LOKUP.ARJ ³Cln ³Set of program for database relations ³[1-07]³ ³LUTLIB.ARJ ³Cln ³Another Clipper library ³[1-08]³ ³MK30.ARJ ³Cln ³Mouse library demo version ³[1-03]³ ³MOVEGETS.ARJ ³Cln ³GETSYS change for moving between gets via VALID ³[1-03]³ ³NFDESC2.ARJ ³Cln ³NanForum library description list ³[1-06]³ ³NFLIB2.ARJ ³Cln ³NanForum library main file ³[1-06]³ ³NFSRC2.ARJ ³Cln ³NanForum library Source files ³[1-06]³ ³NOTATION.ARJ ³Cln ³Complete text of article about hungarian notat. ³[1-04]³ ³OCLIP.ARJ ³Cln ³Object extension, real (not #define/command) ³[1-12]³ ³OOPSCL5.ARJ ³Cln ³Another version of pseudo objects ³[1-07]³ ³PACKUP.ARJ ³Cln ³ASM source of PACK/UNPACK replacement SCRSAVE.. ³[1-04]³ ³PARTIDX3.ARJ ³Cln ³Partial indexing ³[1-12]³ ³PAT1.ARJ ³Cln ³CIX NanForum Libraryy PATCH ³[1-07]³ ³POPUPCAL.ARJ ³Cln ³Popup calender ³[1-05]³ ³POWER10.ARJ ³Cln ³French library ³[1-07]³ ³PRINTSUP.AJR ³Cln ³Low level BIOS routines for printing ³[1-11]³ CLIPBBS 1-14 Page 21 26 Nov 1991 ³QS20F.ARJ ³Cln ³Screen designer, demo, looks very good ³[1-11]³ ³READPW.ARJ ³Cln ³GETSYS change for password invisible reader ³[1-03]³ ³SCANCODE.ARJ ³Cln ³Database with scan codes ³[1-07]³ ³SCRSAVE.ARJ ³Cln ³Screen AntiBurning utility (inactivity snake) ³[1-05]³ ³SHELP50A.ARJ ³Cln ³SuperHelp for Clipper ³[1-07]³ ³SNAP497.ARJ ³Cln ³Beta version of SNAP, partially compatible to 5 ³[1-12]³ ³SOUND.ARJ ³Cln ³Multiple TONE() used as one SOUND function ³[1-06]³ ³STATUS.ARJ ³Cln ³Timer interrupt hooked status indicator ³[1-12]³ ³SYMBOL.ARJ ³Cln ³Dumper of symbol tables of Summer87 .EXE ³[1-03]³ ³TBUNIQUE.ARJ ³Cln ³Browsing unique without unique index ³[1-12]³ ³TBWHL4.ARJ ³Cln ³WHILE browsing using TBROWSE, well commented ³[1-06]³ ³TICKER.ARJ ³Cln ³Real Time Clock, interrupt driven on screen ³[1-12]³ ³VSIX711.ARJ ³Cln ³Vernon Six Clipper utilities and library ³[1-05]³ ³VSIX800.ARJ ³Cln ³Vernon's library, lot of functions ³[1-12]³ ³WIPEV11.EXE ³Cln ³VERY good screen manipulation library ³[1-11]³ ÀÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÙ Src can be: Cln File is accesible on ClipperNet Cbs File is accesible in HQ BBS of CLipper BBS Magazine ------------------------------------------------------------------------------ ClipperNet - CLPFON.ARJ File Name: PAT2-3.ARJ Other Names: File Size: 8,973 bytes File Contents: PAT3.DOC 1808 TBWHILE.PRG 16129 TBWHILE.OBJ 3438 Patch for NanForum Library number THREE, this time it's improvement of TBWHILE, Tbrowsing with While function. ------------------------------------------------------------------------------ ClipperNet - CLIPPLUS.ZIP File Name: CLIPPLUS.ZIP Other Names: File Size: 106,223 bytes File Contents: README.1ST 2994 STACK.PRG 1162 CLIPEXTN.NG 190244 QUEUE.PRG 1426 CLIPEXTN.LIB 29777 TEMPTURE.PRG 3148 CLASSDEF.CH 919 TBROWSE.PRG 2444 CLIP_USR.CH 4540 Z_DIGIT.PRG 762 CLIP_DEV.CH 4927 Z_ODOMET.PRG 3743 DIGIT.PRG 1092 Z_MENU.PRG 5152 CLIPBBS 1-14 Page 22 26 Nov 1991 ODOMETER.PRG 802 Z_MENUO.PRG 777 MENU.PRG 4374 Z_STACK.PRG 1293 INHERIT.PRG 4050 Z_QUEUE.PRG 1232 MINHERIT.PRG 1997 Z_TBROWS.PRG 8761 TITLMSTR.DBF 997 Clipper 5.0 (NO really not 5.01) version of Clipper/++ extension. This one is another object extension of Clipper with some unique features. I'm really wondering which one from all of is better, or more standard or has future. Getting tires of many versions of object extensions (which are TOTALLY different in ways of use at all!) i'm thinking about wait till Nantucket will give up normalized and stabile Objects for Clipper. ------------------------------------------------------------------------------ ClipperNet - MSWIN.ARJ File Name: MSWIN.ARJ Other Names: File Size: 3,297 bytes File Contents: MSWINDOW.LST 4235 MSWINDOW.OBJ 191 MSWINDOW.ASM 1989 WTEST.PRG 69 MSWINDOW.DOC 436 Function for Clipper 5.0 and Summer87 for returning current state of Microsoft Windows (also of course detect if program is working under Windows or in DOS session). ------------------------------------------------------------------------------ ClipperNet - POSTPRNT.ARJ File Name: POSTPRNT.ARJ Other Names: File Size: 3,022 bytes File Contents: POSTPRNT.DOC 1155 POSTPRNT.OBJ 4302 Likable PostScript (tm) emulation function. It will send ASCII text file into PS printer with possibility to set some parameters as Font, sizes... ------------------------------------------------------------------------------ ClipperNet - SHADO.ARJ File Name: SHADO.ARJ Other Names: CLIPBBS 1-14 Page 23 26 Nov 1991 File Size: 1,779 bytes File Contents: SHADOW.OBJ 989 SHADOW.TXT 886 DEMO.PRG 962 Another from millions of SHADOW functions. As usual they are creating a shadow on screen which is used for making shadow of windows and boxes. ------------------------------------------------------------------------------ ClipperNet - BUTTON.ARJ File Name: BUTTON.ARJ Other Names: File Size: 3,118 bytes File Contents: PE.PRG 2918 PE.CH 2129 TEST.RMK 156 TEST.PRG 534 README.TXT 889 Enhacement of get system for allowing to have sime @GET in form of button. On the moment when @GET with button is activated, then it will just change between 'on' and 'of' values. ------------------------------------------------------------------------------ ClipperNet - CLPFON.ARJ File Name: DTF102.ARJ Other Names: File Size: 11,181 bytes File Contents: DEMO.BAT 57 DTF.DOC 10891 DTF.LIB 8719 DTFDEMO.PRG 8171 PHONE.DBF 326 SYSOP.1ST 809 PHONE.DTF 199 README.1ST 481 Fully functional version of .DBT files replacement. It's very nice to have this i guess, because it can save much of disk space, because DTF is replacing .DBT files with ofn .DTF files which are MUCH smaller, FASTER and effective for using. ------------------------------------------------------------------------------ CLIPBBS 1-14 Page 24 26 Nov 1991 ClipperNet - HOTKEY.ARJ File Name: HOTKEY.ARJ Other Names: File Size: 1,708 bytes File Contents: MAKEHOTS.PRG 2669 Small program for trying to make unique hot key letter for every array element. ------------------------------------------------------------------------------ CLIPBBS 1-14 Page 25 26 Nov 1991 ============================================================================== CLIPBBS ============================================================================== CLIPBBS Distribution CLIPBBS is special magazine about CLIPPER and CLIPPERing (or about another related problems and xBASE languages). This magazine is for free and articles aren't honored. Nobody can make a profit from the distribution of this magazine. CLIPBBS can be freely downloaded and uploaded to any BBS or any other public system without changes of original contents or number of files in original archive (kind of archive can be changed, but we are sup- porting ARJ archive because is best and smallest). If you are interested in CLIPBBS and would like to become a DISTRIBUTION site, contact publisher on 2:285/608@fidonet or 27:1331/4412@signet or just call to 31-10-4157141 (BBS, working 18:00->08:00, top is V32b) or voice to 31-10-4843870 in both cases asking for DANIEL (Docekal). Distribution sites: Clipper BBS Home system NETCONSULT BBS, SYSOP Daniel Docekal, phone 31-10-4157141 Daily 18:00 till 08:00 (GMT+1), sat+sun whole day Modem speed 1200, 2400, 9600, 12000, 14400 (V32b) United Kingdom Welsh Wizard, SYSOP Dave Wall, phone 44-656-79477 Daily whole day, modem speed HST United States of America The Southern Clipper, SYSOP Jerry Pults, phone 1-405-789-2078 Daily whole day, modem speed HST Clipper File Distrubution Network (ClipperNet, area CL-DOC)) Various systems around whole world Programmers Distribution Network (PDN, area PDNDBASE) Various systems around whole world ------------------------------------------------------------------------------ CLIPBBS 1-14 Page 26 26 Nov 1991 How to write articles in CLIPBBS? Submission of articles to CLIPBBS is really easy: Maximum of 78 characters per line, as long or as short as you like ASCII text. Choose from the list of extension which most describes your text, or just name it .ART as ARTicle and send it to publisher or to any distribution site via modem to BBS or with mailer as file attach. Article will come automatically appear in the next free issue. Extensions are: Articles (anything) .ART Software .SOF News .NEW Question and Answers .Q&A ANOMALIES and their comments .ANO Letters to editors .LET Advertisement .ADV Wanted .WAN Comments .CMS DUMP from conferences .DMP Clipper Net .CLN That's all at the moment, there will probably be changes later, as the magazine evolves. If you have any ideas for a new section of CLIPBBS, please tell us, or just write an article about it. Daniel, publisher ------------------------------------------------------------------------------