           Changes from CA-Clipper 5.01 to CA-Clipper 5.2

This document contains a summary of changes made to CA-Clipper 5.2. A 
more detailed description of all items will be available in the 
Norton Guide file that comes with your CA-Clipper 5.2. If you have 
further questions please post a message on the Clipper forum on 
CompuServe -- we'll be happy to answer your questions.

By Luiz Quintela
Product Manager
CA-Clipper, CA-Visual Objects for Clipper, CA-C++, CA-CommonView


NEW:  Memory Management

CA-Clipper 5.2 improves the handling of expanded memory.  Version 
5.01 applications would hang in certain circumstances on a machine 
using a LIM 4.0 compatible EMS driver with the page frame disabled. 
CA-Clipper 5.2 requires that you enable the EMS page frame.  If the 
EMS page frame is not detected, EMS will not be used.

NEW:  LIM 4.0 support 

Support for LIM 4.0 has been added.  If CA-Clipper detects a LIM 4.0 
compatible driver, up to 32MB of EMS will be used.

NEW:  RSIS support 

CA-Clipper is now RSIS (Relocatable Screen Interface Specification) 
compliant.  This produces faster screen updates when a RSIS compliant 
driver is loaded.

CHANGED:  Database error handling

In CA-Clipper 5.01, using database commands without an open work area 
would not cause an error.  With the following exceptions, CA-Clipper 
5.2 now produces a "Work area not in use" error.


   ͻ
    Function          Return value             
   Ķ
                                               
    EOF()        -->  .T.                      
    BOF()        -->  .T.                      
    FOUND()      -->  .F.                      
    DELETED()    -->  .F.                      
    RECNO()      -->   0 (zero)                
    LASTREC()    -->   0 (zero)                
    FIELDNAME(1) -->  ""                       
    FCOUNT()     -->   0 (zero)                
    INDEXORD()   -->   0 (zero)                
    INDEXKEY()   -->  ""                       
    DBSTRUCT()   -->  {} (empty array)         
    HEADER()     -->   0 (zero)                
    RECSIZE()    -->   0 (zero)                
    LUPDATE()    -->    /  /   (empty date)    
                                               
   ͼ

CHANGED:  Miscellaneous error handling

Improved error handling in many CA-Clipper commands and functions 
traps and reports missing arguments or invalid arguments passed to 
them.

CHANGED:  Aliases

CA-Clipper now detects illegal characters in the alias and produces 
an EG_BADALIAS error.

CA-Clipper now generates an EG_DUPALIAS error if you attempt to 
create an alias identifier that is already in use.

CHANGED:  Reserved Word

AADD has been added to the Reserved Word list.

NEW:  Unrecoverable error messages

Unrecoverable errors are runtime errors that for some reason cannot 
make use of the error system.  The following runtime unrecoverable 
error messages are now documented:

     24        Write error
     331       String/array memory overflow
     332       String/array memory overflow
     415       Cannot open overlay file
     5302      Conventional memory exhausted
     5304      Conventional memory exhausted
     5306      Conventional memory exhausted
     5312      VM swap file overallocated

CHANGED:  Miscellaneous Fixes

LABEL FORM now uses the SET DEFAULT setting to locate files when the 
.LBL file is not in the default directory and an absolute path name 
is not specified.  DBEDIT() now accepts memory variables and 
expressions as arguments in the <acColumns> array.

When specified, DBEDIT() now properly displays field aliases in 
column headings.  This is consistent with the Summer '87 version of 
CA-Clipper.

WAIT now accepts characters in the range 32 through 255 (ASCII).

MENU TO no longer repaints the screen with the last prompt when you 
press <Esc> to exit the menu.

CHANGED:  COPY FILE

The COPY FILE command now allows control characters to be copied to a 
device (printer, serial port, etc.).

CHANGED:  CREATE FROM

The following clauses have been added.

NEW is an optional clause that designates that the newly created 
database should be opened in a new workarea.

ALIAS <cAlias> is the alias name to use when opening the database in 
a new work area.

VIA <cDriver> is the name of the database driver to use to create the 
database.

CHANGED:  INDEX ON

FOR <lCondition> specifies the conditional set of records on which to 
index.

WHILE <lCondition> specifies another condition that each record 
processed must meet

EVAL <lCondition> specifies a condition that is evaluated either for 
each record processed or at the interval specified by the EVERY 
clause

EVERY <nRecords> specifies a numeric expression that modifies how 
often EVAL is evaluated.

ASCENDING specifies that the index keys be sorted in increasing order 
of value.

DESCENDING specifies that the index keys be sorted in decreasing 
order of value.

CHANGED:  REINDEX

EVAL <lCondition> specifies a condition that is evaluated either for 
each record processed or at the interval specified by the EVERY 
<nRecords> clause.

CHANGED:  RESTORE FROM

Various bugs  have been fixed.

CHANGED:  SET ORDER*

SET ORDER* is now classified as a compatibility command.  It is 
recommended that you use the new SET TAG command instead.

CHANGED:  BROWSE()*

BROWSE()* is now classified as a compatibility function.  It is 
recommended that you use the TBROWSE class instead.

NEW:  COLORSELECT()

COLORSELECT() activates the specified color pair, it does not alter 
the current SET COLOR setting.

CHANGED:  DBCREATE()

DBCREATE() now accepts an optional additional parameter <cDriver>.  
<cDriver> is the name of the database driver to use to create the 
database.

CHANGED:  DISPCOUNT()

DISPCOUNT() determines the current display context.

CHANGED:  DISPBEGIN()/DISPEND()

Each call to DISPBEGIN() defines a new display context. Output to the 
display context is suppressed until a matching DISPEND() statement is 
executed.

CHANGED:  MEMOEDIT()

In the previous release of CA-Clipper MEMOEDIT() failed to append a 
NULL character to the end of its return string.

CHANGED:  SCROLL()

You can now scroll columns horizontally.

NEW:  #STDOUT

The new directive #STDOUT causes the compiler to output a literal 
text to the standard output device (stdout) during compilation.

NEW:  ANNOUNCE

ANNOUNCE is a declaration statement that defines a module identifier.

NEW:  EXIT PROCEDURE

The EXIT PROCEDURE statement declares a procedure that will be 
executed on program termination.

CHANGED:  EXTERNAL*

EXTERNAL* is now classified as a compatibility statement.  It is 
recommended that you use the new REQUEST statement instead.

NEW:  INIT PROCEDURE

The INIT PROCEDURE statement declares a procedure that will be 
executed at program startup.

NEW:  REQUEST

REQUEST is a declaration statement that defines a list of module 
identifiers to the linker.

NEW:  Getsys.prg functions

Some of the functions in Getsys.prg have been made public so that you 
can use them when implementing customized Get readers.

CHANGED:  Getsys.prg

Getsys.prg now respects SET BELL ON when SET CONFIRM ON is used.

NEW:  READFORMAT()

READFORMAT() is a function that accesses the current format file in 
its internal code block representation.

NEW:  READKILL()

READKILL() is a function that lets you control whether or not to 
terminate the current READ.

NEW:  READUPDATED()

READUPDATED() is intended primarily for creating new READ Layers.

CHANGED:  GET:subscript

Get:subscript is now an assignable exported instance variable.

CHANGED:  GET:display()

The Get:display() exported method now handles delimiters.

CHANGED:  ERROR.CH

The following generic error codes have been added to ERROR.CH: 
EG_DUPALIAS, EG_BADALIAS, EG_CYCLICAL.

NEW:  ERRORNEW() 

The ErrorNew() creates a new error object.

NEW:  ERRORINHANDLER()

ERRORINHANDLER() is a new function that assures a clean and prompt 
exit from within an application.

NEW:  TBrowse:forceStable()

The new method forceStable() performs a full stabilization of the 
TBrowse.

CHANGED:  TBrowse error handling

Assigning invalid data to TBrowse and TBColumn instance variables 
would not generate an error in version 5.01. Type checking during 
instance variable assignment has been added in CA-Clipper 5.2 to trap 
invalid values and produce a recoverable runtime error.

CHANGED:  Compiler

The compiler now requires a minimum of 25 file handles.  This can be 
accomplished by adding the files statement "FILES=25" to the 
CONFIG.SYS.

CA-Clipper now required DOS 3.3 or greater.

Include files (.ch) may be nested up to a maximum of 15 levels.  This 
limitation was present in previous releases but was not documented.

NEW:  COMMAND.CH

Common.ch has been added to the CA-Clipper 5.2 release.  Common.ch 
incorporates many common/useful psuedo-functions and commands.  
Std.ch is now reserved for CA-Clipper language implementation ONLY.

NEW:  Compiler options

The following compiler options have been added to CA-Clipper 5.2:

/ES  Exit Severity level 0
     Default exit severity level.

/ES0 Exit Severity level 0
     Same as /ES.

/ES1 Exit Severity level 1
     Specifies an exit severity level of 1.

/ES2 Exit Severity level 2
     Specifies an exit severity level of 2.

NEW:  /DEBUG option in Linker

The /DEBUG option is now supported in the POSITIONAL syntax.

CHANGED:  BASE50.???

All the base PLL related files have been changed to reflect the new 
CA-Clipper version 5.2.

NEW:  Error Messages

The following .RTLink error messages are now documented: ert0166, 
eut0032.

CHANGED:  DOS 5.0 PLL problem fixed

The fix for the DOS 5.0 PLL problem ("Illegal format in loadable 
file") is included in the version of RTLINK for CA-Clipper.

NEW:  General Debugger

Instance variable and method names are now displayed when inspecting 
objects instantiated from CA-Clipper's predefined classes (GET, 
TBROWSE, TBCOLUMN, and ERROR).

NEW:  Run menu option

A "run to next routine" option has been added.

NEW:  Monitor menu option

"All" has been added to the Monitor menu.

CHANGED:  Watchpoint window

The delete <del> key can now be used to delete the currently 
highlighted watch point.

CHANGED:  View|Workarea screen

The default database driver of the selected workarea is now 
displayed. Workarea and Index key are hilighted rather than 
designated by "->". Multiple relations are now displayed in the work 
area outline.

CHANGED:  Online Help

Online help now appears in a separate file (CLD.HLP).

CHANGED:  CLD.LIB

CLD.LIB must be linked as an OBJ file and not as a LIB file.

CHANGED:  Command line parameters

You must place a space between the CA-Clipper application name and 
the first CA-Clipper parameter when calling your routine from the 
CLD.EXE command line.

CHANGED:  BP command

An additional parameter, <nLineNum> has been added to the BP command.

CHANGED:  Open mode in DBU

DBU now opens all databases SHARED by default

NEW:  /e switch

The new optional command line parameter (/e) will cause DBU to open 
file EXCLUSIVE to provide backward compatibility.

CHANGED:  RL (Report Label) Utility

.FRM file changes

RL no longer lets you embed semicolons in report headings.  This is 
consistent with dBASE III+.

RL no longer allows the right margin setting to exceed the width of the report.

NEW:  DBMCMD Error messages

DBCMD error messages occur in the database command set and are 
unrelated to a particular driver.  They occur as a result of command 
usage rather than from a failure of the driver itself.

CHANGED:  NTX

The NTX driver now allows you to create conditional indexes by 
specifying a FOR condition. Create indexes using a record scope or 
WHILE condition, allowing you to INDEX based on the order of another 
index. Create both ascending and descending order indexes. Specify an 
expression that is evaluated periodically during indexing in order to 
display an index progress indicator.

NEW:  MDX

The MDX replaceable database drivers is used to access dBASE IV 
compatible index and multiple index (.mdx) file formats.

NEW:  CDX

The CDX driver replaceable database provides access to FoxPro 
compatible database index file formats (.cdx).

NEW:  PDX

The PDX replaceable database driver provides access to Paradox tables 
(.pdx).

NEW:  NOVTERM

The NOVTERM driver provides faster execution when run on some 
non-dedicated network server software.

NEW:  PCBIOS

The PCBIOS driver provides direct BIOS calls rather than direct 
screen writes for systems requiring this form of I/O.

NEW:  ANSITERM

The ANSITERM driver provides ANSI terminal support for systems that require it.

NEW:  Drivers Reference

CA-Clipper 5.2 provides many new and enhanced (changed) commands and 
functions that can be used to access and manipulate databases and get 
specific information about the replaceable database driver (RDD) in 
use.

CHANGED:  APPEND FROM command

The APPEND FROM command syntax has been changed to include the VIA 
clause.

CHANGED:  COPY TO command

The COPY TO command syntax has been changed to include the VIA 
clause.

CHANGED:  DBAPPEND() function

DBAPPEND() has been changed to accept the parameter, lReleaseRecLocks 
which allows you to maintain multiple records locks during an append.

CHANGED:  DBGOTO() function

DBGOTO() has been modified to accept a parameter other than record 
number.

NEW:  DBRLOCK() function

DBRLOCK() is a database function that locks the record identified by 
the specified value <xIdentity>.  In Xbase, <xIdentity> is the record 
number.

NEW:  DBRLOCKLIST() function

DBRLOCKLIST() is a database function that returns a one-dimensional 
array that contains the identities of record locks active in the 
selected work area.

NEW:  DBRUNLOCK() function

DBRUNLOCK() is a database function that releases the lock on 
<xIdentity> and removes it from the Lock List.  If <xIdentity> is not 
specified, all record locks are released.

CHANGED:  DBSETINDEX()* function

DBSETINDEX() is a database function that adds the contents of an 
Order Bag into the Order List of the current work area.  DBSETINDEX() 
is a compatibility command and therefore not recommended.  It is 
superseded by the ORDLISTADD() function.

NEW:  DELETE TAG command

This command removes an Order from an Order Bag in the current or 
specified work area.

CHANGED:  GO command

The GO command has been enhanced to also work with data format other 
than (.dbf).  In a (.dbf), the parameter, identity, is the record 
number.  In other data formats, identity is the unique primary key 
value.

CHANGED:  INDEX command

The index on syntax has modified to include new clauses.

NEW:  ORDBAGEXT() function

ORDBAGEXT() supersedes the INDEXEXT() and is not recommended.

NEW:  ORDBAGNAME() function

ORDBAGNAME() is an Order management function that lets you access the 
name of the Order Bag in which <cOrderName> resides.

NEW:  ORDCREATE() function

ORDCREATE() is an Order management function that creates an Order in 
the current work area.

NEW:  ORDDESTROY() function

ORDDESTROY() is an Order management function that removes a specified 
Order from multiple-Order Bags.

NEW:  ORDFOR() function

ORDFOR() is an Order management function that returns the character 
string, cForExp, that represents the logical FOR condition of the 
Order.

NEW:  ORDKEY() function

ORDKEY() is an Order management function that returns a character 
expression that represents the key expression of the specified Order.

You may specify the Order by name or with a number that represents 
its position in the Order List.  Using the Order name is the 
preferred method.

NEW:  ORDLISTADD() function

ORDLISTADD() is an Order management function that adds the contents 
of an Order Bag , or a single Order in an Order Bag, to the Order 
List.

NEW:  ORDLISTCLEAR() function

ORDLISTCLEAR() is an Order management function that removes all 
Orders from the Order List for the current or aliased work area.  
When you are done, the Order List is empty. This function supersedes 
the function DBCLEARINDEX().

NEW:  ORDLISTREBUILD() function

ORDLISTREBUILD() is an Order management function that rebuilds all 
the orders in the current or aliased Order List.

NEW:  ORDNAME() function

ORDNAME() is an Order management function that returns the name of 
the specified Order in the current Order List.

NEW:  ORDNUMBER() function

ORDNUMBER() is an Order management function that lets you determine 
the position in the current Order List of the specified Order.

NEW:  ORDSETFOCUS() function

ORDSETFOCUS() is an Order management function that returns the Order 
Name of the previous controlling Order and optionally sets the focus 
to an new Order.

NEW:  RDDLIST() function

RDDLIST() is an RDD function that returns a one-dimensional array 
that lists the available RDDs.

NEW:  RDDNAME() function

RDDNAME() is an RDD function that returns a character string, 
cRDDName, the name of the active RDD in the current or specified work 
area.

NEW:  RDDSETDEFAULT() function

RDDSETDEFAULT() is an RDD function that sets or returns the name of 
the previous default RDD driver and, optionally, sets the current 
driver to the new RDD driver specified by cNewDefaultRDD.

CHANGED:  RECNO() function

The RECNO() function has been changed to work with other data 
formats.

CHANGED:  SEEK command

The SEEK command syntax has been changed to include the new clause, 
SOFTSEEK.

CHANGED:  SET INDEX command

The SET INDEX command syntax has been modified to work with other 
data formats and includes the new clause, ADDITIVE.

CHANGED:  SET ORDER command

The SET ORDER command has been changed to also work with data formats 
other than the traditional Xbase().

CHANGED:  Extend System API

The Extend System is now identified as the Extend API.

NEW:  GT (General Terminal) API

The GT API is the level of system protocols that implements 
CA-Clipper screen and keyboard commands and functions.

NEW:  VM API

The VM API is a set of functions callable from extend functions that 
allow direct communication with the VMM system.

NEW:  RDD API

The database driver programming interface (RDD API) can be used by 
third party developers to create new drivers, allowing CA-Clipper 
applications compatibility with any database engine for which a 
driver is created.


