home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / CLIPPER / DATABASE / CL52ABUS.ZIP / 52ABUS.TXT < prev    next >
Encoding:
Text File  |  1993-06-25  |  16.9 KB  |  400 lines

  1. Dear CA-Clipper 5.2 Developer:
  2.  
  3.                 This file contains the instructions for applying this 
  4.         patch to CA-Clipper 5.2a (Rev. 197).  Please review these 
  5.         instructions carefully before attempting to apply the patch
  6.         file.
  7.  
  8.                 Also included are the the problem resolutions contained 
  9.         in the patch file for CA-Clipper 5.2b as well as a technical 
  10.         note pertaining to the Virtual Memory Integrity Failure Error 
  11.         message.
  12.  
  13.  
  14. ================================================================================
  15.  
  16.    Here is the procedure for 5.2a (Rev. 197) to 5.2b (Rev. 202) Patching.
  17.  
  18.  
  19. REQUIRED FILES FOR PERFORMING UPDATE.
  20.  
  21.    52BUS.EXE   A self extracting .ZIP file that may be downloaded from 
  22.                the CLIPPER forum (library 0) on CompuServe. (GO CLIPPER).
  23.  
  24.    PATCH.EXE   Updating engine required for use with all 52B *.RTPs. 
  25.                This file is also in Library 0 of the CLIPPER CompuServe 
  26.                forum.
  27.  
  28.  
  29. CONTENTS OF 52ABUS.EXE
  30.  
  31.    52ABBIN.RTP    Updating file for CLIPPER5\BIN
  32.  
  33.    52ABINC.RTP    Updating file for CLIPPER5\INCLUDE
  34.  
  35.    52ABLIB.RTP    Updating file for CLIPPER5\LIB
  36.  
  37.    52BNG.RTP      Updating file for NG
  38.  
  39.    NTXLOCK2.OBJ   Updating file for CLIPPER5\OBJ
  40.  
  41.    DBUNET.PRG     Updating file for CLIPPER5\SOURCE\DBU
  42.  
  43.    52Brl.EXE     Self extracting .ZIP file containing updates for 
  44.                  CLIPPER5\SOURCE\RL
  45.                  
  46.    52Bsampl.EXE  Self extracting .ZIP file containing updates for 
  47.                  CLIPPER5\SOURCE\SAMPLE
  48.  
  49.  
  50. UPDATE PROCESS (using example directories).
  51.  
  52.    o   Make sure that you have placed PATCH.EXE in a directory
  53.        which is in your DOS path.
  54.  
  55.    o   Make a new directory, move 52ABUS.EXE into this new directory and
  56.        execute it. 
  57.                 EXAMPLE:
  58.                         C:\> MD C:\DWNLD
  59.                         C:\> COPY 52ABUS.EXE C:\DWNLD
  60.                         C:\> CD C:\DWNLD
  61.                         C:\DWNLD> 52ABUS
  62.  
  63. *  o   Move NTXLOCK2.OBJ to your CA-Clipper 5.2 OBJ directory.
  64.  
  65.        EXAMPLE:
  66.                C:\DWNLD> COPY NTXLOCK2.OBJ  C:\CLIPPER5\OBJ 
  67.  
  68.  
  69. *  o   Move DBUNET.PRG to your CA-Clipper 5.2 DBU directory.
  70.  
  71.        EXAMPLE:
  72.                C:\DWNLD> COPY DBUNET.PRG  C:\CLIPPER5\SOURCE\DBU 
  73.  
  74.  
  75. *  o   Move 52Brl.EXE to your CA-Clipper 5.2 RL directory.
  76.  
  77.        EXAMPLE:
  78.                C:\DWNLD> COPY 52Brl.EXE  C:\CLIPPER5\SOURCE\RL 
  79.  
  80.    o   Move to your RL directory, execute 52BRL.
  81.        EXAMPLE:
  82.                C:\DWNLD> CD \CLIPPER5\SOURCE\RL
  83.                C:\CLIPPER5\SOURCE\RL> 52BRL
  84.  
  85.                      
  86. *  o   Move to your SAMPLE directory, Move 52Bsampl.EXE to your
  87.        CA-Clipper 5.2 SAMPLE directory.
  88.  
  89.        EXAMPLE:
  90.                C:\CLIPPER5\SOURCE\RL> CD ..\SAMPLE
  91.                C:\CLIPPER5\SOURCE\SAMPLE> COPY C:\DWNLD\52Bsampl.EXE
  92.  
  93.    o   Execute 52BSAMPL 
  94.        EXAMPLE:
  95.                C:\CLIPPER5\SOURCE\SAMPLE> 52BSAMPL
  96.  
  97.  
  98. *  o   Move to your BIN directory, move 52ABBIN.RTP to your
  99.        CA-Clipper 5.2 BIN directory.
  100.        EXAMPLE:
  101.                C:\CLIPPER5\SOURCE\SAMPLE> CD \CLIPPER5\BIN
  102.                C:\CLIPPER5\BIN> COPY C:\DWNLD\52ABBIN.RTP
  103.  
  104.    o   Type PATCH 52ABBIN and watch the patch program update the
  105.        appropriate files.  A summary will be displayed on your screen.
  106.        EXAMPLE:
  107.                C:\CLIPPER5\BIN> PATCH 52ABBIN
  108.  
  109.  
  110. *  o   Move to your LIB directory, move 52ABLIB.RTP to your
  111.        CA-Clipper 5.2 LIB directory.
  112.        EXAMPLE:
  113.                C:\CLIPPER5\BIN\> CD ..\LIB
  114.                C:\CLIPPER5\LIB\> COPY C:\DWNLD\52ABLIB.RTP
  115.  
  116.    o   Type PATCH 52ABLIB and watch the patch program update the
  117.        appropriate files.  A summary will be displayed on your screen.
  118.        EXAMPLE:
  119.                C:\CLIPPER5\LIB> PATCH 52ABLIB
  120.  
  121.  
  122. *  o   Move to your INCLUDE directory, move 52ABINC.RTP to your
  123.        CA-Clipper 5.2 INCLUDE directory.
  124.        EXAMPLE:
  125.                C:\CLIPPER5\LIB\> CD ..\INCLUDE
  126.                C:\CLIPPER5\INCLUDE\> COPY C:\DWNLD\52ABINC.RTP
  127.  
  128.    o   Type PATCH 52ABINC and watch the patch program update the
  129.        appropriate files.  A summary will be displayed on your screen.
  130.        EXAMPLE:
  131.                C:\CLIPPER5\INCLUDE> PATCH 52ABINC
  132.  
  133.  
  134. *  o   Move to your NG directory, move 52BNG.RTP to your
  135.        CA-Clipper 5.2 NG directory.
  136.        EXAMPLE:
  137.                C:\CLIPPER5\INCLUDE> CD \NG
  138.                C:\NG> COPY C:\DWNLD\52BNG.RTP
  139.  
  140.    o   Type PATCH 52BNG and watch the patch program update the 
  141.        appropriate files.  A summary will be displayed on your screen.
  142.        EXAMPLE:
  143.                C:\NG> PATCH 52BNG
  144.  
  145.    o   The update process is now complete.
  146.  
  147.    NOTE:   The process of updating your BIN and LIB files will create a
  148.            sub-directory called \BACKUP appearing off your BIN, INCLUDE, 
  149.            NG and LIB sub-directories (e.g. C:\CLIPPER5\BIN\BACKUP and 
  150.            C:\CLIPPER5\LIB\BACKUP).  These new directories will contain 
  151.            the original version of the patched files.  You may delete
  152.            these files and directories but, if space is available, it
  153.            is recommended that you retain them for future use.
  154.  
  155.  
  156. ================================================================================
  157.  
  158.         The problems resolved by CA-Clipper 5.2B include:
  159.  
  160.  
  161.         1.     Fixed a Virtual Memory Integrity Failure in
  162.                FOPEN() when the file name is numeric instead
  163.                of a character string.
  164.  
  165.         2.     Fixed a Virtual Memory Integrity Failure when
  166.                calling AADD() to increase the size of an
  167.                array.
  168.  
  169.         3.     Fixed a Virtual Memory Integerity Failure
  170.                that occured when an ACHOICE() user function
  171.                deleted elements from the menu selection
  172.                array.  ACHOICE() now allows the user
  173.                function to add, delete, or modify existing
  174.                elements without causing any problems in
  175.                ACHOICE().
  176.  
  177.         4.     Fixed a Virtual Memory Integrity Failure in
  178.                the Internal Runtime Event System.  This was
  179.                causing the DBFCDX driver to hang as well as
  180.                various "unexplainable" errors.
  181.  
  182.         5.     Fixed a Virtual Memory Integrity Failure in
  183.                the debugger when viewing multiple nested
  184.                arrays.  Tbrowse was producing a parameter
  185.                error when viewing multiple nested arrays.
  186.                In some instances this produced a Virtual
  187.                Memory Integrity Failure.
  188.  
  189.         6.     Fixed a Virtual Memory Integrity Failure in
  190.                the debugger's memory allocator.   (STAR
  191.                Issue# 737689)
  192.  
  193.         7.     Fixed INDEXKEY() memory corruption problem.
  194.                INDEXKEY() would occasionally return a
  195.                garbage string when called repeatedly.  This
  196.                sometimes caused a Virtual Memory Integrity
  197.                Failure.
  198.  
  199.         8.     Fixed MEMOEDIT() buffer memory corruption
  200.                problem.  This occurred when MEMOEDIT() was
  201.                called with a user defined function.  This
  202.                would result in various memory related errors
  203.                including a Virtual Memory Integrity Failure.
  204.  
  205.         9.     Fixed slow disk I/O on replaces on large
  206.                DBF's with non-unique indexes.  The
  207.                performance has been improved to a speed
  208.                which is comparable to CA-Clipper 5.01a.
  209.  
  210.        10.     Fixed the releasing of all relations (in all
  211.                workareas) when any child dbf was closed.
  212.                Now closing a child database releases only
  213.                the relations that it is involved with.
  214.  
  215.        11.     Fixed the DBFNDX Replaceable Database Driver
  216.                so that it now properly seeks on a date value
  217.                with SET DELETED ON.
  218.  
  219.        12.     Fixed DBCREATE() to properly return a NIL
  220.                value as documented.
  221.  
  222.        13.     Fixed INDEXORD() so that it now returns a
  223.                zero when no database is open rather than
  224.                generating a runtime error.
  225.  
  226.        14.     Fixed some occurances of internal error 1210
  227.                (database and index are out of sync).
  228.  
  229.        15.     Fixed many occurances of internal error 415
  230.                (can not open external overlay file).
  231.  
  232.        16.     Fixed the Runtime Memory Manager so that it
  233.                now returns an EG_MEM (5300 "Memory Low
  234.                Warning") before generating a memory
  235.                exhausted error.
  236.  
  237.        17.     Fixed Runtime failures that occured when
  238.                CA-Clipper mistakenly tried to use
  239.                non-existent EMS memory.
  240.  
  241.        18.     Fixed FREAD() so that it does not modify
  242.                variables that it shouldn't have access to.
  243.  
  244.        19.     Fixed BROWSE() so that it no longer
  245.                causes the repositioning of a file to BOF()
  246.                when editing takes place in a new record.
  247.  
  248.        20.     Fixed the debugger so that it is no longer
  249.                necessary to specify the default file extension
  250.                (.PRG or .PPO) when opening a file.
  251.  
  252.        21.     Fixed the debugger so that it correctly searches
  253.                the path (indicated by the PATH environment variable)
  254.                when searching for a file to open.
  255.  
  256.        22.     Fixed the debugger so that it does not
  257.                produce "Argument error +" when the F6 key is
  258.                pressed to view databases.
  259.  
  260.        23.     Fixed DBU so it now correctly parses a
  261.                file name that contained a drive letter and
  262.                colon (:) but no backslash (\) (such as
  263.                C:TEMP).
  264.  
  265.        24.     Fixed numerous bugs in the R.L. utility.
  266.  
  267.        25.     Fixed the compiler screen to include the
  268.                missing /t and /z options in order to match
  269.                the documented options.
  270.  
  271.        26.     Fixed the spelling of OrdDestory to
  272.                OrdDestroy in STD.CH for the DELETE TAG
  273.                command.
  274.  
  275.        27.     Fixed the "Guide to CA-Clipper" .NG file so
  276.                that the Norton Guide engine may now be
  277.                unloaded from memory.
  278.  
  279.  
  280. ================================================================================
  281.  
  282.  
  283.         Technical Note: The Virtual Memory Integrity Failure Error Message
  284.  
  285.  
  286.             The Virtual Memory Integrity Failure error message
  287.         (or VMIF for short) refers to a problem that is neither well 
  288.         documented nor well understood.  In this technical note, we will
  289.         explore what the VMIF message indicates, some of the common 
  290.         reasons it occurs, and what measures to take if  you encounter 
  291.         one.
  292.  
  293.             CA-Clipper uses a virtual memory manager to allow 
  294.         applications to access more strings, arrays, and objects than
  295.         conventional memory would otherwise allow.  It accomplishes 
  296.         this by swapping information to and from expanded memory or 
  297.         disk as needed.  Each virtual data item (called a segment) has
  298.         an entry in a descriptor table that maintains its current 
  299.         location and length.  A segment's length can be up to 65,518 
  300.         bytes, while its location may be conventional memory (resident),
  301.         disk or EMS (non-resident).  When CA-Clipper receives a request
  302.         for non-resident data, it always checks the segment's descriptor
  303.         entry to ensure that it's length is non-zero.  Any descriptor 
  304.         whose length is zero is, by definition, invalid because VM does
  305.         not allow zero-byte segments.  Thus, a zero length segment is 
  306.         interpreted as a corruption, and the VMIF error message is 
  307.         displayed. 
  308.  
  309.             Along with the VMIF message is a hexadecimal address that 
  310.         indicates the address of the corrupted descriptor table element.
  311.         This information may be useful to the CA-Clipper Technical 
  312.         Support as well as the development staff.  C and Assembler 
  313.         programmers may also find this information useful in determining
  314.         if and how their code caused the corruption.  A special case is
  315.         the address 0000:0000.  It indicates that a NULL and (possibly
  316.         uninitialized) pointer was used to access virtual data.
  317.  
  318.             While it is true that the VMIF message occurs for
  319.         exactly one condition, that condition can be created in many 
  320.         different ways.  Research indicates that the conditions that 
  321.         lead to a VMIF can be broken down into three distinct 
  322.         categories.
  323.  
  324.             First, several VMIFs can be attributed to Clipper 
  325.         programming bugs.  While a VMIF should never occur solely on 
  326.         the basis of executing Clipper code, a combination of inadequate
  327.         error detection on the part of Clipper runtime and a violation
  328.         of proper programming practices may cause the error to occur.  
  329.         Examples of this have been: calling FOPEN() with numeric data 
  330.         for the file name, deleting array elements from within an 
  331.         ACHOICE() UDF, and assigning NIL to any TBROWSE instance 
  332.         variable that requires a character value.  (Please note that 
  333.         the TBROWSE VMIFs were fixed in the 5.01a release and the 
  334.         ACHOICE() and FOPEN() VMIFs are fixed in the 5.2b release by 
  335.         producing an error when improper values are used.)
  336.  
  337.             The second category is within the CA-Clipper runtime 
  338.         support libraries.  CA-Clipper's runtime support libraries 
  339.         constantly issue calls to the VM system throughout the normal 
  340.         execution of a Clipper application.  On occasion, specific 
  341.         conditions pertaining to runtime activities are not properly 
  342.         handled internally, creating conditions that eventually result 
  343.         in a VMIF.  These instances are always considered problems by 
  344.         the development staff.
  345.  
  346.             The last category is external code typically written in
  347.         C or Assembler by CA-Clipper programmers and third party library
  348.         developers.  These are usually caused by improper use of one of
  349.         CA-Clipper's APIs or by changing the functionality of something 
  350.         within CA-Clipper's runtime that is assumed to remain constant.
  351.  
  352.             Although CA-Clipper's VM system provides detection and 
  353.         reporting, it is almost never the cause of a VMIF.
  354.  
  355.             VMIFs are commonly detected long after the actual 
  356.         corruption occurred.  A module may store a zero-length segment 
  357.         in the segment descriptor table either through use of VM or by
  358.         writing to a wild pointer.  This corruption will not be detected
  359.         until a VM segment is accessed that requires the corrupted 
  360.         segment to be discarded, or swapped to disk or EMS.  The Clipper
  361.         VM subsystem is demand-based.  This means that it only performs
  362.         swapping when swapping is absolutely required.  If a VMIF 
  363.         consistently occurs at a specific point in the execution of an 
  364.         application, it is often not actually caused at this point.  It 
  365.         tells us that a corruption has occurred, but has no means for 
  366.         determining the cause of the corruption or when the corruption 
  367.         actually occurred.
  368.  
  369.             Because VMIFs are detected when the VM system attempts 
  370.         to swap in memory, a change in the amount of conventional memory
  371.         available when an application is executed changes the 
  372.         possibility of the VMIF occurring.  When sufficient real memory
  373.         is available, VM has no need to perform any swapping and any 
  374.         possible VMIFs will not be detected.  When less real memory is 
  375.         available to an application, the entire profile of swapping is 
  376.         changed, and may prevent the VMIF from occurring in a constant 
  377.         location.
  378.  
  379.             This raises the question of how to ensure that the VM 
  380.         system is being called during the testing phase of application 
  381.         development.  A simple and effective method is to use 
  382.         CA-Clipper's //X: parameter to decrease the available memory as 
  383.         much as is feasible.  This will ensure that the VM system will 
  384.         be called with the most frequency.  (The //X: parameter is 
  385.         detailed in the Runtime Environment chapter of the CA-Clipper 5.2 
  386.         Programming and Utilities Guide.)
  387.  
  388.             If a VMIF occurs, try to determine how to reproduce the 
  389.         problem at will and if possible, isolate it to a small example 
  390.         and immediately contact your CA-Clipper Technical Support 
  391.         Representative.  The CA-Clipper Quality Assurance team is also 
  392.         constantly searching for occurrences of VMIFs.  Either way, the 
  393.         CA-Clipper Development team is anxious to correct all internal 
  394.         VMIFs as quickly as possible.
  395.  
  396.  
  397. ================================================================================
  398. ================================================================================
  399.  
  400.