









     
     ߱
          THE COLLECTIVE WISDOM OF PARADOX FOR DOS (BORG PAL)     
     ܰ
     
     
     ͱ
                                                                  
     ͱ
     
     ߰
        "We Will Assimilate Your Knowledge"    
      
       Steve Green    Diamond Software Group   
      
                                            
     
     
       





                                  Edition 1.1

                                  21-Nov-1995







     This document is formatted for a standard 60-line page, and uses some
     of the characters in the IBM International Character Set. If you plan
     to send this text to your printer, confirm your defaults accordingly.













     The Collective Wisdom of Paradox for DOS                      Page A 2


          TABLE OF CONTENTS

          Preamble  ........................................  Page A 3  *
          Acknowledgements  ................................       A 4  *

          Version List  ....................................  Page B 1  *
               Known Bugs / Prior Bugs Fixed  ..............         2

          Command Line Switches  ...........................  Page C 1

          Configuration Issues and Guidlines  ..............  Page D 1

          Edit Mode / CoEdit Mode  .........................  Page E 1

          GP - General Protection Failure Aborts  ..........  Page F 1  *

          UC - Unexpected Condition Aborts  ................  Page G 1

          Tutility and 3rd Party Diagnostics  ..............  Page H 1
               Tutility  ...................................
               Tdr (Table Doctor)  .........................
               Lockdump  ...................................
               Netdump  ....................................

          Paradox RunTime  .................................  Page I 1

          TurboPAL  ........................................  Page J 1

          * = existing sections




























     The Collective Wisdom of Paradox for DOS                      Page A 3


     PREAMBLE

     Murphy's Law teaches us that if something can go wrong, it absolutely,
     sooner or later, will go wrong. Therefore, before we explore the many
     aspects of Paradox (or any computer-related product, for that matter),
     we must remember to constantly obey The Prime Directive, which is:

                           BACKUP! BACKUP! BACKUP!

     Hard drives do not last forever, the Delete key was put on this earth
     to torture us without warning, and one of the possible responses to
     "Are You Sure? (Y/N)" can have dire consequences, no matter what the
     context, when it is immediately followed by the spoken word "Oops!".

     Since Paradox for DOS made its' first appearance in 1985, many highly
     talented developers have devoted their efforts to its' evolution. The
     PdoxDOS forum on Compuserve has been a rich source of knowledge for
     the Paradox community. My initial purpose in compiling this document
     is to create one central repository for all the really important bits
     of knowledge and information that never have been brought together in
     one file, from all of our experiences with Unexpected Conditions and
     General Protection Failure aborts. At the same time, I hope to expand
     the boundries of this work to include detailed discussions on the
     subjects of memory and configuration, undocumented "known bugs" in
     the various versions of Paradox (and work-arounds to these problems),
     and other tricks and features that we've learned to take for granted
     over the years.

     Some UC and GP errors are relatively common, and usually point to a
     specific list of potential causes and cures, but other messages can
     be rather obscure and unusual. Scanning through the paradox.msg file
     in a hex editor, there are a few entries in there that I'm sure most
     of us have never seen. Now we can all explore those uncharted areas
     together. Some UC and GP errors are a direct, and predictable, result
     of something an inexperienced user or developer has done, such as
     using Edit Mode in conjunction with an unstable source of power.

     This document can easily be used as a "cut-and-paste" reference for
     future questions and problems on the forum, and elsewhere. I welcome
     any and all comments, thoughts, and contributions that others may
     wish to add to this effort.

     (Well, it's been six months and I haven't added any more to this book
     yet, which is pretty shameful <g>.. but I *am* adding my new CIS ID,
     and a few more names to the Acknowledgements list.

     Let's DO_IT!

     Steve Green                                  Compuserve   71333,2362
     Diamond Software Group                       Prodigy      TBMG62A
     3123 Federal House Court                     Voice Phone  301-843-8981
     Waldorf, Maryland  20602                     Modem/Fax    301-843-9168

     November 21, 1995



     The Collective Wisdom of Paradox for DOS                      Page A 4


     ACKNOWLEDGEMENTS

     The Paradox community has been, time and again, an absolutley amazing
     source of "collective wisdom". If the spirit of help and sharing that
     we display here were the norm in every aspect of our lives, by every
     person that we know, it would be a much better world to live in. Some
     of the many people who have helped to make Paradox for DOS what it is
     today, and whose contributions have helped sustain the PdoxDOS forum
     all these years (and their Compuserve ID, if known):

     Henrik Bechmann       72701,3717    Michael J. Kennedy    72441,413
     David Berg            73020,374     Mitchell Koulouris    70461,76
     Dan Bernstein         75300,1726    Kevin Mitchell        70717,475 
     Eryk Bottomley       100271,47      John B. Moore         71333,1775
     Angus Burns          100236,231     Gary Mugford          70274,2254
     Brian Bushay          76711,516     John R. Nelson        70641,3562
     Steve Caple           76711,520     Scott Parker          75142,3604
     Luke Chung            73710,463     Dan Paolini           75300,1734
     Dickford Cohn         76226,1572    Walter Payne          27020,1115
     Peter Cole            71621,1374    John Rendell          74103,2610 
     Kevin Donaker-Ring    71370,2224    Lee Roper             71414,3011 
     Dan Ehrmann           70007,4644    Ted Rosenberger       70313,1610
     David R. Faulkner     76116,3513    Skip Rowland          75260,2107
     Harry Goldman         75300,1733    Gary Samuelson        76346,2170
     Tony Goodman          73770,3173    Virginia B. Sauer     72607,3335
     Steve Green           71333,2362    Dave Schlieder        71333,122
     Don Hall              76711,654     Barry Schnur          70007,4653
     Edwin Hattenschwiler 100336,1246    Don Schubert          70007,4654
     Ed Hoyt               75630,2562    Neal Snitow           72561,3025
     John Jamieson        100532,3541    Cap Walker            70007,4651
     Tjeerd Jellema       100334,2404    Nick White           100026,2005
     Eldridge Johns        76702,273     P. Richard Wolfe      71760,2720
     Craig Jones           71333,3515    Alan Zenreich         71171,1340
     Reinhard Kalinke     100417,3504

     Please report any incorrect CIS IDs or "must have" names to me ASAP!





















     The Collective Wisdom of Paradox for DOS                      Page B 1


     VERSION LIST

     Thanks to Don Schubert for getting this list started and to Luke Chung
     for finding a motherlode of old disks on the shelf.

     v1.0                  1985

     v1.1      04/02/86
     v1.1Run   08/29/86
     v1.11                 1986 bugfix

     v2.0      05/22/87
     v2.01     07/22/87    last ANSA version? (Borland/Ansa merger 7/87)
     v2Run     09/03/87

     v2.02
     v2.03                 10/87 or 11/87 bugfix
     v2.04                 British release?

     vOS2
     v386      01/04/88

     v3.0      12/21/88
     v3Run                 12/88?
     v3.01                 7/89?
     v3.01a    09/15/89

     v3.5      08/25/90
     v3.5SQL   08/25/90
     v3.5Run   09/19/90
     v3.51     02/19/91
     v3.51Run  02/25/91

     v4.0      08/08/92
     v4.0SQL
     v4.0Run
     v4.01     01/11/93    the Bugfix from Hell
     v4.01Run
     v4.02     04/27/93    fix to BfH
     v4.02Run  05/04/93

     v4.5      09/02/93    the best Pdox, bar none
     v4.5SQL
     v4.5Run   09/16/93

     All full dates in the date column have been taken directly from the
     installation disks. Starting with PdoxDOS 3.0 the system file DOS
     date/time stamps in each set will reflect the release date, with the
     version number as the time. All of the Pdox 4.02 files will be stamped
     04/27/93 04:02 am, Pdox 3.51 files will be stamped 02/19/91 03:51 am.

     As you can see, this is not yet a complete list. Come on, folks, now
     is a good time to dig through those file cabinets!




     The Collective Wisdom of Paradox for DOS                      Page F 1


     GP - GENERAL PROTECTION FAILURE ABORTS

     General Protection errors mean that a conflict in high memory has
     occurred somewhere. The error message that is displayed will usually
     look like this:

     Unexpected condition: GP 0000 AT PARADOX:9f:0628 -- Leaving Paradox
                              ^^^^            ^^^^^^^
     The number displayed at the first notation will usually be 0000, but
     can occasionally be another number. This number in itself isn't too
     important other than the fact that, if you abort for the same reason
     several times, the same "different" number (if that is what you got)
     will usually re-appear each time.

     The string displayed at the second notation is the address in memory
     where the problem occurred. If the first character is a number, this
     indicates an address in conventional memory. If the first character is
     a letter, this indicates an address in the upper memory area, where
     ROM code, video drivers, the EMS PageFrame, and any drivers you have
     "loaded high" using your memory manager reside. By the same token,
     repeated aborts for the same reason will usually point to the same
     memory address, as well.

     Each and every machine, at any given moment, is made up of a different
     combination of BIOS version, DOS version, TSRs, network type, memory
     manager, and caching software. For this reason, the memory address is
     specific to *your* machine at *this moment*, and is rarely of any real
     value, unless this address happens to point to the video driver, EMS
     PageFrame, or other specific item in the upper memory block.

     GP #### is therefore a generic "memory conflict" message.. the most
     common reasons for this are:

     damaged tables and/or indexes
     not enough memory
     too much memory
     power fluctuations
     TSR conflicts
     bad or failing hardware - chips, cards, cables, drive, etc.

     With 3.5, when running in protected mode with with minimal extended
     memory, unstable memory (such as not-quite-compatible 286s), and/or
     unusual TSR conflicts, sometimes you can get a different (and much
     more informative) error message by starting Paradox in Real Mode and
     attempting to re-create the same circumstances that led to the abort.

     DAMAGED TABLES AND/OR INDEXES - in most contexts, there are a variety
     of other Unexpected Condition errors, such as "L11 - Table Buffer",
     that point directly to damaged tables, but GP 0000 during a query can
     frequently be attributed to damaged tables or indexes.

     NOT ENOUGH MEMORY - this issue has different parameters for 3.5 and
     4.x, but one constant remains: the minimum acceptable memory limit is
     not the same in every context. Adding more memory to your machine can
     often cure specific GP problems, and will usually improve overall
     performance (sometimes dramatically) at the same time. The amount of

     The Collective Wisdom of Paradox for DOS                      Page F 2


     GP - GENERAL PROTECTION FAILURE ABORTS

     memory needed to support any given process can vary greatly depending
     on the number and size of variables used, the number and size of the
     tables involved in the process, the complexity of the PAL code that
     controls the process, and whether or not the process uses operations
     like Restructure, Sort, CrossTab, Graph, or Query.

     For 3.5 when you have extremely limited (one meg or less) extended
     memory available, you will frequently have greater success if you run
     Paradox in Real Mode. In this manner, Paradox will only try to use
     the available memory as a "swap device", or cache. You can improve
     performance even more by simply allocating the memory to an external
     disk cache, such as SmartDrv.

     For 4.x, your options are very limited, since Paradox will only run
     in Protected Mode. With less that two meg of available extended mem-
     ory, some complex processes can result in GP aborts. Adjusting the
     -codepool setting to a smaller number on the command line can free
     up memory, and cure some GP problems, but the only global cure is more
     memory. Starting 4.x with 4 meg or more of available extended memory
     is highly recommended.

     TOO MUCH MEMORY - there is technically no limit to the amount of ex-
     panded memory Paradox can use, but this should only be a valid concern
     with version 3.0. Prior to that Paradox did not access expanded or ex-
     tended memory directly. Starting with 3.5, use of extended memory is
     the preferred (and with 4.x the only) method of operation.

     Paradox can access a maximum of 16 meg of extended memory. You will
     always get a GP 0000 abort as Paradox loads if there is more than 16
     meg of extended memory available. For 3.5, the cure is simple. Just
     add -extk #### to the Paradox command line, where #### is 16000 or
     less. This applies when 3.5 is being run from DOS, DesqView, OS2, or
     Windows when Windows is *not* being run in 386 Enhanced Mode (which is
     highly unlikely). When running 3.5 under Windows 386 Enhanced Mode,
     (which is the way Windows is usually configured) Paradox will only
     operate in Real Mode. You must include -real on the Paradox command
     line, either for the Program Item or in the .pif file, if any. As a
     side note, 3.5 always requires -share and -win on the command line if
     you are running it under Windows, and DOS SHARE needs to be loaded.
     These issues are covered in more depth in other sections.

     Paradox 4.x operatess under the DPMI memory mangement standard (3.5
     uses the VCPI standard, which is why it must run in Real Mode under
     Windows, but explaining what that really means is beyond the scope of
     this discussion). As a practical matter, this means that 4.x will grab
     all available extended memory, unless you specifically tell it not to
     do so, which will totally restrict other DPMI programs from access to
     the memory while Paradox is running, even if Paradox is not currently
     accessing all of the memory at any given moment.

     If you are running Paradox 4.x from DOS, and there is more than 16 meg
     of extended memory available, you must add the following line to your
     autoexec.bat file   SET DPMIMEM=MAXMEM ####   where #### is no greater
     than 16000, and must be in even thousands (5000, 12000, etc.).

     The Collective Wisdom of Paradox for DOS                      Page F 3


     GP - GENERAL PROTECTION FAILURE ABORTS

     You should also use the -extk #### option on the Paradox command line.
     When running 4.x under Windows, the Windows DMPI loader is in control
     of memory, and the -extk #### option on the command line is all that
     matters. As with 3.5, #### must be 16000 or less.

     POWER FLUCTUATIONS - any computer operation can be affected by changes
     in line voltage. As little as a 5% drop in power can have disasterous
     consequences on whatever is currently happening in RAM memory. This
     can easily result in GP aborts, and can also damage your tables with-
     out directly aborting, which can, of course, lead to other problems.

     You should have an Uninterruptable Power Supply (UPS) attached to
     *every* workstation. Do not route a Laser Printer, or any other peri-
     pheral device that has high power demands of its own, through the UPS.
     Plug these other devices directly into the wall, as you normally do,
     even if you have a UPS.

     TSR CONFLICTS - there are many programs available today that load into
     memory and remain running in the background while you run other pro-
     grams (TSR stands for Terminate And Stay Resident). Besides the basic
     drivers that load when you boot your workstation (video, network, disk
     cache, DOS itself, etc.), other common TSRs can be calculators, print
     spoolers, e-mail systems, sound cards, and disk compressors. Sometimes
     a direct conflict will arise between specific programs. Sometimes the
     problem will be the order the TSRs are loaded in memory. In some cases
     a given TSR creates a problem only because it is "loaded high" while
     some other, and also harmless-in-its-own-right, TSR is loaded. Finding
     the source of the conflict can be maddening, and time-consuming. When
     you have no idea where to start, start like this:

     1. Strip your config.sys down to just FILES and BUFFERS, plus whatever
        you absolutely *must* have in config.sys and/or autoexec.bat for
        the machine to boot properly. This is called a "clean boot" or a
        "bare bones boot".

     2. Load Paradox and see if you can get the problem to appear.

     3. Start adding other drivers, TSRs, and parameters to config.sys and/
        or autoexec.bat, one at a time, until you can get the problem to
        show up again.

     DOS's EMM386.EXE is often used as the memory manager. When running 3.5
     you cannot use the NOEMS switch with EMM386. You need to use the RAM
     switch instead. EMM386 will reserve 256k of available memory as ex-
     panded memory if no number follows the word RAM on that line in your
     config.sys. When running 4.x, if you must use the NOEMS switch (even
     though we haven't found any common programs that require that expanded
     memory be turned off) you should use -emk 0 on the Paradox command
     line, to tell Paradox to avoid looking for a PageFrame. There could
     also be Include (memory address) parameters to EMM386, or other memory
     managers, that can create problems. This is beyond the scope of this
     discussion.

     Paradox 4.x comes with a diagnostic program called DPMIINST.EXE. The

     The Collective Wisdom of Paradox for DOS                      Page F 4


     GP - GENERAL PROTECTION FAILURE ABORTS

     primary purpose of DPMIINST is to determine if a particular machine
     is compatible with DPMI standards (usually 286s and a few old 386s).
     This can be used to test the machine's BIOS in the following manner:

     Run DPMIINST with the -F parameter.

     Certain machine BIOS's may return a BIOS checksum that causes DPMIINST
     to mis-interpret the machine. You can bypass an incorrect BIOS check-
     sum, forcing a correct evaluation of the machine (DPMIINST -h will
     yield a help screen for these switches):

          DPMIINST -a -v

     This will request a verbose analysis of the machine without immediate
     attempts at updating.

     The verbose feature will display results in the format:

          Enable A20 method:   ee
          Disable A20 method:  dd
          Shutdown method:     ss
          Shutdown flags:    ffff
          Other flags:       oooo
          BIOS checksum: xxxxxxxx

     These values can then be used with the DPMIINST -f option:

          -f<string>   Force characteristic string to DPMI16BI
                       (format is  ee/dd/ss/ffff/oooo )

          Example:     DPMIINST -fee/dd/ss/ffff/oooo

     As a practical matter, I have never needed to attempt this DPMIINST
     analysis. Hopefully, someone who does have experience in this matter
     will add some details here.

     BAD OR FAILING HARDWARE - a variety of hardware problems can cause GP
     aborts, so don't forget to examine your "pieces parts", too. There are
     many instances where a failing hard drive or controller card, in par-
     ticular, will create problems in Paradox shortly before the normal
     diagnostic tools can identify and report the problem. Loose chips,
     cards, and network cables can also be frequently traced as the source
     of GP abort problems when they only seem to appear on one machine.


     Special thanks to John Moore, whose notes have been used heavily in
     this section.








