home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1993 #2 / Image.iso / clipper / cl52bus.zip / 52BUS.TXT < prev    next >
Text File  |  1993-06-25  |  17KB  |  401 lines

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