Showing posts with label 5.3a. Show all posts
Showing posts with label 5.3a. Show all posts

Sunday, February 22, 2009

Original Welcome Page for Clipper... Clipper... Clipper


This is the original Welcome Page for Clipper... Clipper... Clipper (3rd June 1996) , which I am republishing for historical and sentimental reasons. The only changes that I have made was to fix all the broken links.

Welcome to Chee Chong Hwa's Malaysian WWW web site which is dedicated to Clipperheads throughout the world.
This site started out as a teeny-weeny section of Who the heck is Chee Chong Hwa ? and has graduated into a full blown web site of more than 140 pages (actually hundreds of A4 size pages) ! This is due to its growing popularity and tremendous encouragements from visiting Clipperheads from 100 countries worldwide, from North America, Central America, Caribbean, South America, Europe, Middle-East, Africa and Asia-Pacific. Thanx Clipperheads, you all made this happen !


What is Clipper ?

You may ask, what is this Clipper stuff ? Could Clipper be something to do with sailing as it is the name of a very fast sailing American ship in the 19th century ?
Well, Clipper or to be precise, CA-Clipper is the premier PC-Software development tool for DOS. It was first developed by Nantucket Corporation initially as a compiler for dBase3+ programs. Since then, CA-Clipper has evolved away from its x-base roots with the introduction of lexical scoping & pre-defined objects like TBrowse. As at today, the most stable version ofClipper is 5.2e while the latest version, 5.3a was introduced on 21 May 1996.
As at 11th November, 1996, an unofficial 5.3a fixes file was made available by Jo French. See the About CA-Clipper 5.3a section for more details. BTW, Jo French uploaded the revised 5.3a fixes file on 20th November, 1996.

Latest News


The latest news is that CA has finally released the long-awaited 5.3b patch on 21 May, 1997.
For 5.3b users, you must a take a look at Jo French's comments on unfixed bugs in 5.3b.
BTW, have you used Click ? If you're a serious Clipperprogrammer and need an excellent code formatter, Click is a natural choice. How to get it ? Simple, access Phil Barnett's site via my Cool Clipper Sites.

32-bits Clipper for Windows ?

Have you tried Xbase ++ ? Well, I have and compared to Delphi (my current Windows programming tool of choice), I'm still sticking to Delphi.
Anyway, you should visit the Alaska Home Page. Give it a chance and then draw your own conclusions !.

The Harbour Project

Is this the future of Xbase ? Take a look at at the Harbour Project

Edited on 13th Nov 2015 to remove broken links :-)

Saturday, February 14, 2009

About CA-Clipper 5.3b [21 May 1997]

Clipper 5.3 introduces the native Clipper mouse & GUI programming with the use of
Lightlib as a alternative terminal driver. Unfortunately, 5.3 was found to be buggy and with 
inadequate documentation as to the usage of the mouse & GUI programming. 

While CA-Clipper 5.3a has mainly been created as a maintenance release, there are a few 
enhancements in the product that we hope you will find useful.
These enhancements include new macros in the source code editor (please see the 
"CA-Clipper Workbench Source Code Editor Macros" chapter of this document)
and a new sample application named GDBU. GDBU is a graphics version of CA-Clipper's 
DBU.  This sample application has been written entirely in CA-Clipper 5.3 and demonstrates
the many uses of graphics mode.  The source code to this sample application has been
included in the CLIP53\SOURCE\SAMPLE\GDBU directory.  Feel free to change this source
code as you wish so that you can experiment with the many features that graphics mode has
to offer in CA-Clipper. 

Depending on your system's memory configuration, GDBU may require some extra memory to run properly. If you are experiencing any problems such as the application terminating, please run the OPTEDIT utility on the GDBU.EXE file as follows:
OPTEDIT GDBU.EXE -EXTRAMIN 4096 

This will allow the executable to use sufficient memory throughout the duration of the application.
___________________________________________________________________________________

CA-Clipper Release Notes
Version 5.3b Intl
May 1997
___________________________________________________________________________________

CONTENTS
========
1.  Installation Instructions
2.  What's Fixed in CA-Clipper 5.3b
3.  Other CA-Clipper 5.3 Patches
4.  CA-Clipper File Descriptions
5.  Supported Operating Systems
6.  MISSING STD.CH and SET.CH Documentation
7.  Miscellaneous

1. INSTALLATION INSTRUCTIONS
============================
There are several important pieces of information that you must be aware of
before installing CA-Clipper 5.3b.

* Please backup your existing CA-Clipper 5.3a files and directory structure
before running this installation.

* You must install on top of CA-Clipper version 5.3a.  This installation will
not work properly if you attempt to install over any CA-Clipper version other
than 5.3a.

* CA-Clipper 5.3b can be installed only from DOS.

* You must have 8MB free on the hard disk where CA-Clipper 5.3a is installed.

You must place the files 53A_BI.RTP and PATCH.EXE in the root of the directory
where CA-Clipper 5.3a is installed.

From the DOS prompt, execute the following:

 PATCH /S 53A_BI.RTP > PATCH.LOG

After the patch process has completed, please examine the PATCH.LOG file in
the root of your CA-Clipper 5.3b directory to view the results of the patch.


2. WHAT'S FIXED IN CA-CLIPPER 5.3b
==================================
Below is a list of fixes for CA-Clipper version 5.3b.

Category      Description of Fixed Problem
--------      ----------------------------
Append        APPEND FROM...DELIMITED. If text file record(s) are offset
           by one or more spaces at their beginning, the first FIELD
           in the target database will no longer contain displaced data.

Blob          No longer receive an unresolved external or multiple definition
           error using DBFBLOB.LIB.

DOS Debugger  Protected Mode Debugger LOCAL variable values are no longer
           affected by the presence of a file-wide STATIC.

Error System  DOS error 5 no longer occurs before NETERR() when the opening
           of a exclusive database fails.

Get System    Any Class Object is now permitted to be used with the
           GET system.

           The saved color settings are no longer restored too late
           when using delimiters.

           Using a long GET caption will no longer GPF under Exospace.

           Changed HitTest() to a PUBLIC Function for access from
           MenuSys.Prg to allow mouse recognition on a Get Object while in
           a MenuModal().

           Changed Accelerator() to a PUBLIC Function for access from
           MenuSys.Prg to allow accelerator key recognition on a Get Object
           while in a MenuModal().

           Added GetSystem Array Element to access Menu Item ID Number
           which was not available.

           Added GetSystem Array Element to save and restore CURSOR shape
           and display because it wasn't being properly restored.

           Added code to properly save and restore the CURSOR.

           Added code to properly save and restore the Menu ID Number.

           Following 2 items were changed/added to prevent both Pre and
           Post GET VALIDation from executing twice.
           This was done by:

             Added code to test IIF() a Mouse Hit or Accelerator key
             was pressed:

               1) in GetReader().

               2) in GUIReader().

               3) in TBReader().

             Added code to test EXITing a GET or the READ:

               1) in GetReader().

               2) in GUIReader().

               3) in TBReader().

           All instances of the MenuModal() call are saved to a Menu ID
           Number element in the GetSystem Array because previously it was
           not accessable.

           nHotItem was used to replace the second parameter in each call to
           MenuModal() because the Menu ID Number retrieved was not updated.

           Added missing assignments for GetSystem Array Elements for the
           READVAR() and GETACTIVE() values because they were not reset
           and were not previously available from application code from
           within:

             1) ClearGetSysVars()

             2) RestoreGetSysVars()

           Added ROW(), COL(), and SETPOS() to EraseMsg() because CURSOR
           position was previously not handled as accurately.

IDE           Corrected the status bar messages.

           When in the Source Code Editor, the Menu Editor is no longer
           grayed out.

           The Source Code Editor can now support international keyboards
           (international bug).

           If the DEL key is the hot-key for delete module according to
           the file menu, it no longer deletes entities from within module
           specific entity borwser.

           After iconizing the module browser, the module browser is now
           able to be restored.

           Application browser: the DELETE dialog box is now modal.

           Window Editor: 'Next' menu command and hot-key now work properly.

           Rename a application and then do Export.  When the Export dialog
           box is displayed it now has the new application name.

           Menu editor: the "External PRG already exist..." message box
           is now modal.

           When import and build an application in a blank application
           browser, the module browser is no longer shown the first time
           with unknown text.

           Form Editor: Resizing a combo box no longer changes the text.

           Using the default color from the form editor, it is no longer
           difficult to see the blank cursor, (this happens after you choose
           an item from the toolbox on a blue background).

           In source code editor, the menu Editor menu item in the tools
           menu is no longer active.

           When building with editors open, if work has been saved, no
           longer receive the following message box: "Warning! Unsaved work
           will not be included".

           Form Editor properties window is now saved.

Math          MSC 8.0 math error text will no longer be displayed, (e.g.,
           'sqrt: _DOMAIN error' resulting from a call to SQRT(-1)).

Memory        Memory loss no longer occurs when opening and closing databases.

           Memory loss no longer occurs when opening and closing databases
           with CDX indexes.

Menu System   Added calls to the GetSys.Prg PUBLIC Function HitTest() because
           a Mouse Hit on a GET was not detected from a Menu Object.

           Added calls to GetSys.Prg PUBLIC Function Accelerator() because
           GET shortcut keys were not detected while in a Menu Object.

           Added Menu System Array Element to access CURSOR ROW()
           because it was not globally available to the application.

           Added Menu System Array Element to access CURSOR COL().
           because it was not globally available to the application.

           Added Menu System Array Element to access CURSOR position.
           because it was not globally available to the application.

           Added GetList as a new last parameter for MenuModal() because
           access to Get Objects from Menu Objects is required when both
           are used.

           Added code to save and restore the CURSOR Position and shape
           because it was not previously restored properly by assigning the:

             1) Row.

             2) Column.

             3) Shape.

             4) and calling SETPOS().

           Changed Menu System HitTest() Function to MHitTest() to avoid
           conflict with the PUBLIC Function HitTest() in GetSys.Prg.

           Added code to save and restore CURSOR position and shape before
           and after each call to EVAL() for a Menu Object because it wasn't
           properly restored.

           Added missing PARENTHESES in commented out source code because it
           was not previously compilable without syntax errors if it was
           uncommented for usage.

Tools         Linking in the new __WAIT_4.OBJ (located in the OBJ directory)
           before CA-Clipper Tools will eliminate the R6003 and/or GPF
           at startup using AMD or Cyrix processors.

ScrollBar     If the end of a displayed ScrollBar Object ends at MAXROW() and
           MAXCOL() it will no longer cause the screen to scroll.

           Using the Update() method with multiple ScrollBar objects will
           no longer cause erroneous screen painting.

Version       Version() will now display the build number.


3. OTHER CA-CLIPPER PATCHES
===========================
Since the release of CA-Clipper 5.3, several patches for CA-Clipper and
Comix/FlexFile have been released.  All of those patches have been
incorporated into CA-Clipper 5.3b.

These patches are the following:

* OPT_53.EXE - Includes OPTEDIT.EXE which provides a fix for Internal Error
8002.

* CLFLEX1E.ZIP - Contains fixes for Comix and FlexFile libraries.

* CL53UP.ZIP - Contains indexing fix by using SORTOF.OBJ.

* C53AI1.ZIP & C53AI2.ZIP - Contains Revision A Update.

Please note that the use of SORTOF.OBJ is not necessary in version 5.3b.  This
fix has been incorporated into CLIPPER.LIB.


4. CA-CLIPPER FILE DESCRIPTIONS
===============================
The following is a list of the important files that are supplied with
CA-Clipper 5.3b.


BIN Directory
-------------
BLINKER.EXE
CA-Clipper's real mode linker.  For a dual-mode or protected mode
version of Blinker, you can obtain an upgrade from Blink, Inc.

BML2RES.COM
A utility that will extract bitmaps and fonts out of a bitmap library.

BMLDIR.COM
A utility that will list all resource files that exist in a bitmap library.

CACI.BAT
Used by the Workbench to launch CA-Clipper applications.

CL.BAT
A batch file designed to compile and link one .Prg into an .EXE.

CLD.HLP
Help file used with the CA-Clipper debugger.

CLDR.EXE
CA-Clipper's real mode debugger.

CLIPPER.EXE
The CA-Clipper compiler.

DBT53.EXE
A utility to make your Summer '87 memo fields compatibly with CA-Clipper 5.3.

DBU.EXE
A database Utility that allows you to create, modify, and browse DBF files.

DBU.HLP
Help file for DBU.EXE

DBU.ICO
The icon used for DBU in Windows.

EXOSPACE.EXE, EXO1.EXE, EXO2.EXE.
CA-Clipper's protected mode linker, splicer, and loader.

OPTEDIT.EXE
Options editor for CA-Clipper/Exospace .EXEcutable files. See the OPTEDIT.TXT
information on how to fix Internal Error 8002 and remove the Startup BANNER.

PE.EXE
A simple text editor written in CA-Clipper.

PMINFO.EXE
Utility to report a machine's protected mode memory configuration. Useful for
runtime information affecting your CA-Clipper/Exospace created applications.

RES2BML.COM
A utility to create a bitmap library from font and bitmap files.

RL.EXE
CA-Clipper's .FRM Report Form and .LBL Label Form file editor utility.

RMAKE.EXE
Utility used to create CA-Clipper .EXEcutable files. Reads a set of compile
and link rules contained in an .RMK file. May also be used to execute other
utilities, including LIB.EXE, to create other files.

RMINFO.EXE
Utility to report your machine's real mode memory configuration. Useful for
runtime information affecting your CA-Clipper/Exospace created applications.

RO.COM
Toggles ReadOnly attribute of a file, (e.g., RO <.EXE>, permits file Sharing).

TTF2FNT.EXE
A Windows utility which translates Windows true-type fonts into .FNT fonts
which are readable by CA-Clipper.

UNIVESA.EXE
Utility for use with older video cards which are not VESA compatible. Only
useful when working in graphics mode. (Not all video cards are compatible.)


CACI Directory
--------------
CACI.EXE
The CA-Clipper Workbench.

CACI.HLP
The CA-Clipper Windows help file.

CACI_STR.DLL, CACIACT.DLL, CACIADAM.DLL, CACIATOM.DLL, CACICNTR.DLL,
CACICOMP.DLL, CACIDATE.DLL, CACIDED.DLL, CACIEDIT.DLL, CACIERR.DLL,
CACIFED.DLL, CACIINT.DLL, CACILINK.DLL, CACILOAD.EXE, CACILOGW.DLL,
CACIMASK.DLL, CACIMED.DLL, CACIMEM.DLL, CACINMBR.DLL, CACINT10.DLL,
CACIRDD.DLL, CACIRDDB.DLL, CACIRT10.DLL, CACISSYS.DLL, CACISWIN.DLL,
CACITBOX.DLL, CACITIME.DLL, CACIWDCI.DLL, CACIWED.DLL, CACIWED.INI,
CLIPMDLL.DLL, CTL3D.DLL, DBF.DLL, DBFNTX.DLL, RUNAUTO.COM, REMOVE.EXE,
CACI$.DAT, TOOLHELP.DLL
CA-Clipper Workbench support files.

CACIRIDX.EXE
A utility used to reindex your repository.  If you receive a message that your
repository has become corrupted, you can use this utility to reindex the
repository.

EXOSPACE.TPL
The default linker template that is used when building from the Workbench.

BLIDUA.TPL
A Blinker template file that can be used for Blinker dual mode applications.
This template only applies if an upgraded version of Blinker has been
purchased from Blink, Inc.

BLIEXT.TPL
A Blinker template file that can be used for Blinker extended mode
applications.  This template only applies if an upgraded version of Blinker has been
purchased from Blink, Inc.

BLIRMD.TPL
A Blinker template file that can be used for real mode applications.  This
template only applies if an upgraded version of Blinker has been purchased
from Blink, Inc.

LIBRARY.TPL
A template file that can be used to create library files.  In order to create
libraries, the executable file LIB.EXE is required.


CACI/DATA Directory
-------------------
CATALOG.VO, REPNAME.IND, REPTYPE.IND, SYSTEM_L.APP, SYSATOM.VO, APPTAB.VO,
SYSTEM_L.PFX, SYSTEM_L.IDX
CA-Clipper Workbench Repository files.

DC_UTILS.PRG, DISKDATA.DBF, DISKID.NTX, SALES.DBF, SALES.PRG, SALESREP.NTX
CA-Clipper Workbench sample files.


INCLUDE Directory
-----------------
All files in this directory with an extension of .CH are CA-Clipper header
files which you can #include in your CA-Clipper applications.

All other files in this directory (.H, .API, and .MAC) are header files which
can be used with C or Assembler code.


LIB Directory
-------------
DBFCDX.LIB, _DBFCDX.LIB
Both .LIBraries are known as the FoxPro 2.6 for DOS Replaceable Data Driver.
Both are required to support .DBF, .CDX, and .FPT or .DBV Child Memo files.
The Parent _DBFCDX Database and INDEXing RDD may be used without the Child
DBFCDX Memo/BLOB RDD. Only linking _DBFCDX is required when no .FPT or .DBV
Memo files are used within the application and in order to use .CDX indexes.
Also, if using the Child DBFCDX RDD, linking DBFMEMO.LIB is not necessary,
as that .LIBrary's functionality is included in DBFCDX.LIB. Single TAG .CDX
and .IDX files are not supported. Default MEMOBLOCK or MBLOCKSIZE SETting is
64 Bytes.

ANSITERM.LIB, NOVTERM.LIB, PCBIOS.LIB
BIOS and device driver files used by CA-Clipper.

C53BLMAX.LNK, C53BLMID.LNK
Maximum and medium overlay scripts to be used with Blinker.

CLD.LIB
Library for CA-Clipper's protected mode Debugger. Remember to link this into
the root of the .EXEcutable in a FILE statement after compiled .OBJs. (There is
no CLD.EXE equivalent of CLDR.EXE, so Restart and .EXEcutable command line
Debugger Options are not available. SET Options with CLIPPERDEBUG=/D /S.)

CLDR.LIB
Library for CA-Clipper's real mode Debugger. Remember to link this into the
root of the .EXEcutable in a FILE statement after compiled .OBJs. Use together
with the CLRD.EXE.

CLIPPER.BML
Bitmap library consisting of numerous fonts as well as bitmaps used by
CA-Clipper to display checkboxes, radiobuttons, scrollbars, etc.  To view the
contents of this file, run BMLDIR.COM.

CLIPPER.LIB
The main library which contains most of the functionality for CA-Clipper.

DBFBLOB.LIB
A FlexFile library which provides support for Binary Large OBject files to be
stored in memo fields. Default MEMOBLOCK or MBLOCKSIZE SETting is 64 Bytes.

DBFMDX.LIB
The dBase IV 1.1 through 2.0 Replaceable Data Driver which may be used to
create .MDX multi-TAG index files.

DBFMEMO.LIB
A FlexFile library which provides support for large memo fields.  Default
MEMOBLOCK or MBLOCKSIZE SETting is 64 Bytes.

DBFNDX.LIB
dBaseIII Plus Replaceable Data Driver which you can use to create .NDX index
files.

DBFNTX.LIB
CA-Clipper's Replaceable Data Driver which can be used to create .NTX index
files. The Child DBFMEMO Memo/BLOB RDD may be used with it to support Child
.FPT (or .DBV) files.

EXOSPACE.LIB
Library used by CA-Clipper's protected mode linker.

EXTEND.LIB
Miscellaneous CA-Clipper functionality is included in this library.

LLIBG.LIB
The Light Lib Graphics library which can be used to create graphics mode
applications.  See the SET VIDEOMODE command for details.

SAMPLES.LIB
A library which was created from many of the samples provided in the samples
directory.

TERMINAL.LIB
CA-Clipper's library which handles output to the screen.  When you use
LLIBG.LIB or any other terminal driver, this library is replaced.


NG Directory
------------
NG.EXE
The Norton Guide engine.  Norton Guides are a DOS help tool which, when used
in conjunction with .NG files, provide online help.

C53G01C.NG, C53G02C.NG, C53G03C.NG, C53G04C.NG
The help files for CA-Clipper 5.3


OBJ Directory
-------------
_MDXSYS.OBJ
Include this object file to set the MDX driver as the default driver for your
application.  Be sure to include DBFMDX.LIB as a library in your link script.

CDXLOCK.OBJ
Use the CDXLOCK.OBJ driver in order to use your CA-Clipper database
concurrently with FoxPro databases.  The CDXLOCK.OBJ driver is necessary to
maintain compatible locking schemes between CA-Clipper and FoxPro.

GT.OBJ
Part of the CA-Clipper General Terminal driver.  This driver provides similar
functionality to TERMINAL.LIB.  TERMINAL.LIB should be used instead of GT.OBJ
except if you are using a 3rd party library which replaces TERMINAL.LIB.

NULSYS.OBJ
If your application does not require any RDDs (including the default DBFNTX
driver), you can include NULSYS.OBJ into your link script as an object file to
avoid having to include the DBFNTX.LIB.  This will increase the speed of your
link as well decreasing the size of your application.

NTXLOCK2.OBJ
This driver will change the locking scheme for your databases so that you can
have more records in a database file.  By default, CA-Clipper will lock
records at 1 billion + the record number.  When databases get large enough it
can bump into this locking area and cause problems.  With NTXLOCK2.OBJ, the
locking offset is moved to 4 billion.  Please note, though, that using
NTXLOCK2.OBJ will create indexes that are not compatible with older versions
of CA-Clipper.

__WAIT_4.OBJ
Linking in __WAIT_4.OBJ before CA-Clipper Tools will eliminate the R6003
and/or GPF at program startup using AMD or Cyrix processors.

MDX*.OBJ, MSG*.OBJ, NTX*.OBJ (except NTXLOCK2.OBJ, see above)
These files provide runtime national language support.  Please read NATION.DOC
for more information.


SOURCE Directory
--------------------
You can modify the source code in these directories as you wish, but please
keep a copy of CA-Clipper's original files.

DBU Files
The files in this directory contain all of the source code for CA-Clipper's
Database Utility.

PE Files
The files in this directory contain all of the source code for CA-Clipper's
text editor.

RL Files
Source code for CA-Clipper's Report and Label Utility.

SAMPLE Files
Miscellaneous samples.

GDBU Files
A new set of sample files for CA-Clipper 5.3a.  This directory contains the
source code for a completely re-written DBU in graphic mode using CA-Clipper
5.3.  All of the source code is provided, including the RMake file, link
script, and bitmap libraries.  Feel free to play with this source code as you
wish as it can help you learn how to use the new Light Lib Graphics library.

SYS Files
Included in this directory are system files which are used by CA-Clipper.
These include the Get System, Browse System, Menu System, Memo System, Error
System, and RDD System.

Some functions that are generated by CA-Clipper's form and menu editors call
functions in these files.  Feel free to examine and modify these files as you
wish, but please keep a copy of the original files.


5. SUPPORTED OPERATING SYSTEMS
==============================
CA-Clipper is supported under all MS-DOS versions later than and including
MS-DOS 3.3.

The CA-Clipper Workbench is supported under Windows 3.1, Windows 3.11, Windows
for Workgroups, and Windows 95.  Please note that Windows 95 was NOT
supported in the initial release of CA-Clipper 5.3, but is supported in
CA-Clipper 5.3a and above.  OS/2 (any version) and Windows NT are NOT fully
supported at this time.


6. MISSING STD.CH AND SET.CH DOCUMENTATION
==========================================
DBI Manifest Constants in Reference Guide NG:

DBI_GETSCOPE       34  /* Locate codeblock */

Missing SET COMMANDS in Reference Guide NG:

SET MBLOCKSIZE TO            => Set( _SET_MBLOCKSIZE,  )
SET MFILEEXT TO              => Set( _SET_MFILEEXT,  )
SET STRICTREAD      => Set( _SET_STRICTREAD, <(x)> )
SET STRICTREAD ()            => Set( _SET_STRICTREAD,  )
SET AUTOPEN         => Set( _SET_AUTOPEN, <(x)> )
SET AUTOPEN ()               => Set( _SET_AUTOPEN,  )
SET AUTORDER TO              => Set( _SET_AUTORDER,  )
SET AUTOSHARE TO             => Set( _SET_AUTOSHARE,  )
SET MFILEEXT TO              => Set( _SET_MFILEEXT,  )

SET Manifest Constants in Reference Guide NG:

14   _SET_TYPEAHEAD      Numeric        SET TYPEAHEAD TO
21   _SET_EXTRA          Logical        None
39   _SET_EVENTMASK      Number         SET EVENTMASK TO
40   _SET_VIDEOMODE      Number         SET VIDEOMODE TO
41   _SET_MBLOCKSIZE     Number         SET MEMOBLOCK TO
42   _SET_MFILEEXT       Character      SET MFILEEXT  TO
43   _SET_STRICTREAD     Logical        SET STRICTREAD
44   _SET_OPTIMIZE       Logical        SET OPTIMIZE
45   _SET_AUTOPEN        Logical        SET AUTOPEN
46   _SET_AUTORDER       Logical        SET AUTORDER  TO
47   _SET_AUTOSHARE      Logical        SET AUTOSHARE TO

NATIONMSG Manifest Constants - from several files:

_DIR_TITLE        1 // "Database Files    # Records    Last Update     Size"
_LF_SAMPLES       2 // "Do you want more samples?"
_RF_PAGENO        3 // "Page No."
_RF_SUBTOTAL      4 // "** Subtotal **"
_RF_SUBSUBTOTAL   5 // "* Subsubtotal *"
_RF_TOTAL         6 // "*** Total ***"
_GET_INSERT_ON    7 // "Ins"
_GET_INSERT_OFF   8 // "   "
_GET_INVD_DATE    9 // "Invalid Date"
_GET_RANGE_FROM  10 // "Range: "
_GET_RANGE_TO    11 // " - "
_LF_YN           12 // "Y/N"


7. MISCELLANEOUS
================
Production or Structural Indices (same prefix name as the Parent .DBF), are
opened automatically with the database. Specify #include "Ord.Ch" with these.

Specify #include "Ord.Ch" at the top of each .Prg which perform operations
related to the following activities:

INDEXing
ORDERing
RELATIONs
SCOPE
FILTERing

.CDX files default to auto-opening and order 0 ( Natural ). These defaults
can be changed by SETting AUTOPEN and AUTORDER commands.

SET ORDER TO TAG  or (SET ORDER TO to nullify) with Multi-TAG RDDs.

Corrections to Error Messages and Appendices Guide, Page I-2:
Maximum length of a CHARACTER string:              65,516 bytes
Maximun size string, or CHARACTER or MEMO FIELD    65,516 bytes
Maximum key expression length: .cdx (_DBFCDX RDD)  240 bytes

Monday, January 26, 2009

Which RDD to use ? - DBFCDX versus DBFNTX

CA-Clipper 5.2e/5.3 comes with the following replaceable database drivers or RDDs

  • DBFNTX - Native Clipper
  • DBFCDX - Foxpro 2 compatible
  • DBFMDX - DBase IV compatible
  • DBFNDX - dBase III plus compatible
  • DBFPX - Paradox compatible

    You should note that the DBFCDX driver that comes with 5.2e is the Successware SIX driver while 5.3/5.3a comes with the Lodestone COMIX driver.

    The most popular RDDs as can be seen from posts on comp.lang.clipper are DBFCDX & DBFNTX. As for me, I use both drivers as appropriate. Therefore I shall limit this section to the DBFCDX & DBFNTX drivers.

    The following information is extracted from NGs that came with CA-Clipper 5.2e

    • RDD Architecture
    • DBFNTX - CA-Clipper Native RDD
    • DBFCDX - Foxpro 2.0 Compatible RDD

    CA-Clipper's RDD Architecture

    CA-Clipper supports a driver architecture that allows CA-Clipper applications to use Replaceable Database Drivers (RDDs). The RDD system makes CA-Clipper applications data-format independent. Such applications can, therefore, access the data formats of other database systems, including the dBASE IV (.mdx), FoxPro (.cdx), and Paradox (.db) formats on a variety of equipment. This driver architecture can even support database drivers that are not file-based, although all of the drivers supplied with CA-Clipper 5.2 are file-based.

    The concept of replaceable drivers is not new to this version of CA-Clipper. In previous versions, the use of the default database driver (DBFNTX.LIB) was hidden by the fact that it was automatically linked into your application. In fact, this is still the case. The DBFNTX driver has been replaceable since it was first introduced in version 5.0. Before this version, the DBFNTX driver was the only RDD supplied as part of the system.

    With the introduction of the new RDDs, CA-Clipper provides many new and enhanced commands and functions that access and manipulate databases. These language elements can enable your applications to access data regardless of the RDD under which it is ordered. There are also commands and functions that give you specific information about the RDDs in use.

    DBFNTX - CA-Clipper Native RDD

    DBFNTX is the default RDD for CA-Clipper. This new database driver replaces the DBFNTX database driver supplied with earlier versions of CA-Clipper and adds a number of new indexing features. With DBFNTX, you can:

  • 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

    As an update of the default database driver, DBFNTX is linked into and used automatically by your application unless you compile using the /R option.

    New Features

    The replaceable driver lets you create and maintain (.ntx) files using features above and beyond those supplied with the previous DBFNTX driver. The new indexing features are supplied in the form of several syntactical additions to the INDEX and REINDEX commands. Specifically you can:

  • Specify full record scoping and conditional filtering using the standard ALL, FOR, WHILE, NEXT, REST, and RECORD clauses

  • Create an index while another controlling index is still active

  • Monitor indexing as each record (or a specified record number interval) is processed using the EVAL and EVERY clauses

  • Eliminate separate coding for descending order keys using the DESCENDING clause

    Compatibility

    Index files (.ntx) created with the original DBFNTX driver are compatible with DBFNTX and can be used in new applications without reindexing. Index files (.ntx) created with this version of DBFNTX will also work with previous CA-Clipper applications provided that you use no FOR, WHILE, , or DESCENDING clauses.

    Important! Indexes produced with DBFNTX using FOR or DESCENDING are incompatible with earlier version (.ntx) files. If you attempt to access them with the original DBFNTX database driver or programs compiled with versions earlier than CA-Clipper 5.2, you will get an unrecoverable runtime error. In CA-Clipper, this generates an "index corrupted" error message, causing the application to terminate.

    New Locking Scheme

    The DBFNTX database driver implements a new locking scheme to resolve several problems identified in previous versions of CA-Clipper and to prevent potential problems that might arise when running CA-Clipper applications in a network environment. This section discusses these changes and their implications, including compatibility issues.

    Lock Time-outs

    Problem: Index locking in previous versions of CA-Clipper was handled automatically by the database driver, and had no time-out provision. This created the potential for problems in network environments if a workstation died while holding a lock. If this situation occurred all other workstations waiting for an index lock would appear to freeze while waiting to obtain their lock. This could also happen if a user placed a CA-Clipper application in the background on a multitasking system without sufficient processing time allocated to it. Eventually, most network operation systems would clear a connection that had no activity for a specified period of time. This would free the lock and everything would resume as normal, but frustrated users may have rebooted their machines possibly causing file corruption.

    Solution: In CA-Clipper 5.2 the NTX driver will generate a recoverable runtime error if it fails to lock the index after a predetermined number of retries. The default error handler for this system simply returns (.T.) to retry the operation. This emulates the behavior of previous CA-Clipper versions.

    Error Handling

    Time out handling: The handling of this error is problematic because the lock is issued from various internal index routines. Therefore the only safe recoveries are to retry or quit. Choosing to default from the error or issuing a break will more than likely leave the index in a corrupted state. If either of the options is employed, the application should immediately recreate the index. The preferred way to handle a time out such as this is to alert the user of the situation so they don't think their machine has hung, and then have the network administrator determine what workstation is causing the problem. When the problem workstation is cleared, the users that have timed out can select retry and continue processing.

    NTXERR.PRG: The file NTXERR.PRG contains the source code for the default error handler INIT procedure. This error handler can be modified to allow user-defined error handling for index lock time-outs. Care should be exercised when modifying the error handler as detailed above.

    Compatibility: The lock time-out capability when used in conjunction with the default error handler is totally compatibility with previous versions of CA-Clipper. No changes are made to the NTX file structure and no action is required by the developer to activate the time-out functionality.

    New Lock Offset

    Problem: Index locking, which is transparent to the developer, uses a single-byte semaphore locking system. This semaphore was placed at a virtual offset (beyond the physical end of file) in the index file. In previous versions of CA-Clipper, this offset was located at one billion (1,000,000,000) which was adequate at the time. But many systems today are capable of producing indexes that are large enough to cause the actual data present at the lock offset to become physically locked. This leads to problems when trying to read or write to the data at that offset.

    Solution: The solution is to move the offset where locking occurs to a location at a greater offset. We have chosen FFFFFFFF hex, which is the largest offset possible under the DOS operating system. The problem with this solution is that new applications using the index will be locking this new byte while old applications using the same index will lock the old position. Clearly this would cause both applications to fail because each could have a lock on the file at the same time.

    To avoid this, the signature of the index (in the index header) is modified to prevent pre-CA-Clipper 5.2 applications from being able to open the index. CA-Clipper 5.2 applications can detect the correct offset to use by the flag in the header and will automatically use the correct one. In Figure 7-1 below, each bit represents a flag:

    BIT 7 6 5 4 3 2 1 0 FLAG R R R O P I I C

    R Reserved I Index type - both bits set (NTX) C Index created with a Condition, condition in header T Created as a Temporary index O New Offset for exclusive (semaphore) lock

    Figure 7-1: Bit Field for the Signature Byte of a CA-Clipper 5.2 NTX File

    Activation

    If CA-Clipper 5.2 automatically modified the signature in the header when it created indexes, programs with automatic reindexing routines would be creating indexes that appeared corrupt to pre-CA-Clipper 5.2 applications. This has an obvious problem with backward compatibility. Therefore, in order to create indexes with the new signature, the developer must link in the module NTXLOCK2.OBJ with the full knowledge that this will create indexes that older applications will not be able to access.

    Header Changes

    The signature byte of a .NTX file is 6 for an unenhanced NTX index. The inclusion of the NTXLOCK2.OBJ will cause the signature to become 26 hex. (6 hex ORed with 20 hex). See Figure 7-1 for an illustration of all the possible values for the signature byte.

    Error Handling

    CA-Clipper 5.2 applications will automatically recognize the signature byte of the header, and depending on the signature value, will use the correct index lock location. Applications built with previous versions of CA-Clipper, however, do not have the capability to detect the optional new information in the signature byte. Therefore, when an order application tries to open a file that has been created with the NTXLOCK2.OBJ linked in it will produce a Corruption Detected error.

    Compatibility

    The new locking location, if used, is not backward compatible with applications compiled with previous versions of CA-Clipper.

    Indexes created by applications built with a previous version of CA-Clipper can be used by CA-Clipper 5.2 using the new location and will not be modified unless the index is recreated in application.

    Since older applications have no knowledge of the new index locking scheme nor of the significance of the header signature, these applications will assume the index is corrupt and will produce an Index Corrupted error.

    Conditional Indexing

    Conditional indexes are a feature of the DBFNTX driver. This section discusses this feature of the DBFNTX driver in some detail, giving you specific information about the implementation of conditional indexes. Compatibility issues are also discussed.

    Conditional indexes are produced by using a FOR condition in the index creation process. These indexes are made fully maintainable by storing the FOR condition in the index header. This condition is subsequently retrieved and compiled each time the index in opened. During updates, items are added to the index only if they meet the criteria of the condition.

    Since older applications do not have the ability to recognize and use the condition stored in the header, they must be prevented from opening the index since they corrupt the index. This is accomplished by modifying the signature of the index (in the index header) preventing pre-CA-Clipper 5.2 applications from being able to open the index. CA-Clipper 5.2 applications can detect the flag in the header and will automatically use the stored FOR condition correctly.

    Temporary Indexes

    Temporary indexes are produced by using any scoping clause other than the FOR condition in the index creation process. These indexes are not automatically maintainable because the condition is not stored for later use. These indexes can be made maintainable if the condition can be expressed as a FOR condition and is added using the FOR clause. But the main use of temporary indexes is for fast creation of indexes for read- only browses or reports that operate on a subset of the database.

    Since older applications would not operate properly with indexes that do not contain all the keys in a given database, they must be prevented from using them. This is accomplished by modifying the index signature to prevent pre-CA-Clipper 5.2 applications from being able to open the index.

    EOF()

    If an index is created with a FOR condition and an attempt is made to update the index with a key that does not match the condition, the update is suppressed and the index is placed at EOF(). This is consistent with the current behavior for indexes created with the unique flag when an update is attempted with a non-unique key.

    Also if a navigational action is attempted (SKIP) and the current record is not found in the index, the index will place the record pointer at EOF(). This is true for both conditional and temporary indexes.

    Installing DBFNTX Driver Files

    DBFNTX is supplied as the file DBFNTX.LIB.

    The CA-Clipper installation program installs this driver as the default in the \CLIPPER5\LIB subdirectory on the drive that you specify, so you need not install the driver manually.

    Important! Before installing CA-Clipper, you may want to rename the DBFNTX.LIB that currently resides in your \CLIPPER5\LIB directory to DBFNTX.001. The new version, when installed, will overwrite DBFNTX.LIB. If you do not rename or otherwise protect the old version of DBFNTX.LIB, you will lose it.

    Linking the DBFNTX Database Driver

    Since DBFNTX is the default database driver for CA-Clipper, there are no special instructions for linking. Unless you specify the /R option when you compile, the new driver will be linked into each program automatically if you specify a USE command or DBUSEAREA() function without an explicit request for another database driver. The driver is also linked if you specify an INDEX or REINDEX command with any of the new features.

    Using the DBFNTX Database Driver

    In applications written for the new DBFNTX driver, you can use the INDEX and REINDEX commands exactly as you have used them in the past. The index files (.ntx) you create and maintain in this way are completely compatible with those created using previous versions of the driver.

    Changes to existing code are necessary only if you use the new indexing features. The (.ntx) files you create using the new features will have a slightly different header file and cannot be used by programs linked with a previous version of the driver.

    Using (.ntx) and (.ndx) Files Concurrently

    You can use (.ntx) and (.ndx) files concurrently in a CA-Clipper program like this:

    // (.ntx) file using default DBFNTX driver

    USE File1 INDEX File1 NEW

    // (.ndx) files using DBFNDX driver

    USE File2 VIA "DBFNDX" INDEX File2 NEW

    Note, however, that you cannot use (.ntx) and (.ndx) files in the same work area. For example, the following does not work:

    USE File1 VIA "DBFNDX" INDEX File1.ntx, File2.ndx

    Compatibility with dBASE III PLUS

    The default DBFNTX driver makes CA-Clipper programs behave differently than traditional dBASE programs. Some of these differences are discussed below.

    Supported Data Types

    The DBFNTX database driver supports the following dBASE III PLUS- compatible data types for key expressions:

  • Character

  • Numeric

  • Date

  • Logical

    Supported Key Expressions

    When you create (.ntx) files using the DBFNTX driver, you can use all CA-Clipper or user-defined functions compatible with dBASE III PLUS as well as other functions accepted by the extended CA-Clipper functionality.

    Error Handling

    The indexing behavior of DBFNTX and DBFNDX in a CA-Clipper application is identical unless otherwise noted. With the default DBFNTX driver, you can handle most errors using BEGIN SEQUENCE...END SEQUENCE as illustrated in the next section.

    FIND vs SEEK

    In CA-Clipper, you can use the FIND command only to locate keys in indexes where the index key expression is character data type. This differs from dBASE III PLUS where FIND supports character and numeric key values.

    Note: In CA-Clipper programs, always use the SEEK command or the DBSEEK() function to search an index for a key value.

    The DBFNTX driver lets you recover from data type errors raised during a FIND or SEEK. However, since Error:canDefault, Error:canRetry or Error:canSubstitute are set to false (.F.), you should use BEGIN SEQUENCE...END to handle such SEEK or FIND data type errors. Within the error block for the current operation, issue a BREAK() using the error object that the DBFNTX database driver generates, like this:

    bOld := ERRORBLOCK({|oError| BREAK(oError)}) . . . BEGIN SEQUENCE SEEK xVar RECOVER USING oError // Recovery code END . . .

    ERRORBLOCK(bOld)

    Sharing Data on a Network

    The DBFNTX driver provides file and record locking schemes that are different from dBASE III PLUS schemes. This means that if the same database and index files are open in CA-Clipper and in dBASE III PLUS, CA-Clipper program locks are not visible to dBASE III PLUS and vice versa.

    Warning! Database integrity is not guaranteed and index corruption will occur if CA-Clipper and dBASE III PLUS programs attempt to write to a database or index file at the same time. Therefore, concurrent use of the same database (.dbf) and index (.ndx) files by dBASE III PLUS and CA-Clipper programs is strongly discouraged and not supported by Computer Associates.

    DBFCDX - Foxpro 2.0 Compatible RDD

    DBFCDX is the FoxPro 2 compatible RDD for CA-Clipper. As such, it connects to the low-level database management subsystem in the CA-Clipper architecture. When you use the DBFCDX RDD, you add a number of new features including:

  • FoxPro 2 file format compatibility

  • Compact indexes

  • Compound indexes

  • Conditional indexes

  • Memo files smaller than DBFNTX format

    Overview of the DBFCDX RDD

    The DBFCDX driver lets you create and maintain (.cdx) and (.idx) files with features different from those supplied with the original DBFNTX driver and is compatible with files created under FoxPro 2. The new features are supplied in the form of several syntactical additions to the INDEX and REINDEX commands. Specifically, you can:

  • Create indexes smaller than those created with the DBFNTX driver. The key data is stored in a compressed format that substantially reduces the size of the index file.

  • Create a compound index file that contains multiple indexes (TAGs), making it possible to open several indexes under one file handle. A single (.cdx) file may contain up to 99 index keys.

  • Create conditional indexes (FOR / WHILE / REST / NEXT).

  • Create files with FoxPro 2 file format compatibility.

    Compact Indexes

    Like FoxPro 2, The DBFCDX driver creates compact indexes. This means that the key data is stored in a compressed format, resulting in a substantial size reduction in the index file. Compact indexes store only the actual data for the index keys. Trailing blanks and duplicate bytes between keys are stored in one or two bytes. This allows considerable space savings in indexes with much empty space and similar keys. Since the amount of compression is dependent on many variables, including the number of unique keys in an index, the exact amount of compression is impossible to predetermine.

    Compound Indexes

    A compound index is an index file that contains multiple indexes (called tags). Compound indexes (.cdx)'s make several indexes available to your application while only using one file handle. Therefore, you can overcome the CA-Clipper index file limit of 15. A compound index can have as many as 99 tags, but the practical limit is around 50. Once you open a compound index, all the tags in the file are automatically updated as the records are changed.

    Once you open a compound index, all the tags contained in the file are automatically updated as the records are changed. A tag in a compound index is essentially identical to an individual index (.idx) and supports all the same features. The first tag (in order of creation) in the compound index is, by default, the controlling index.

    Conditional Indexes

    The DBFCDX driver can create indexes with a built-in FOR clause. These are conditional indexes in which the condition can be any expression, including a user-defined function. As the database is updated, only records that match the index condition are added to the index, and records that satisfied the condition before, but don't any longer, are automatically removed.

    Expanded control over conditional indexing is supported with the revised INDEX and REINDEX command options as in the new DBFNTX driver.

    Installing DBFCDX Driver Files

    The DBFCDX driver is supplied as the file, DBFCDX.LIB.

    The CA-Clipper installation program installs this driver in the \CLIPPER5\LIB subdirectory on the drive that you specify, so you need not install the driver manually.

    Linking the DBFCDX Database Driver

    To link the DBFCDX database driver into an application program, you must specify DBFCDX.LIB to the linker in addition to your application object files (.OBJ).

    1. To link with .RTLink using positional syntax:

    C>RTLINK ,,,DBFCDX

    2. To link with .RTLink using freeformat syntax:

    C>RTLINK FI LIB DBFCDX

    Note: These link commands all assume the LIB, OBJ, and PLL environment variables are set to the standard locations. They also assume that the CA-Clipper programs were compiled without the /R option.

    Using the DBFCDX Database Driver

    To use FoxPro 2 files in a CA-Clipper program:

    1. Place REQUEST DBFCDX at the beginning of your application or at the top of the first program file (.prg) that opens a database file using the DBFCDX driver.

    2. Specify the VIA "DBFCDX" clause if you open the database file with the USE command.

    -OR-

    3. Specify "DBFCDX" for the argument if you open the database file with the DBUSEAREA() function.

    -OR-

    4. Use RDDSETDEFAULT( "DBFCDX" ) to set the default driver to DBFCDX.

    Except in the case of REQUEST, the RDD name must be a literal character string or a variable. In all cases it is important that the driver name be spelled correctly.

    The following program fragments illustrate:

    REQUEST DBFCDX . . . USE Customers INDEX Name, Address NEW VIA "DBFCDX"

    -OR-

    REQUEST DBFCDX RDDSETDEFAULT( "DBFCDX" ) . . . USE Customers INDEX Name, Address NEW

    Using (.idx) and (.ntx) Files Concurrently

    You can use both (.idx) and (.ntx) files concurrently in a CA-Clipper program like this:

    // (.ntx) file using default DBFNTX driver

    USE File1 INDEX File1 NEW

    // (.idx) files using DBFCDX driver

    USE File2 VIA "DBFCDX" INDEX File2 NEW

    Note, however, that you cannot use (.idx) and (.ntx) files in the same work area. For example, the following does not work:

    USE File1 VIA "DBFNTX" INDEX File1.ntx, File2.idx

    Using (.cdx) and (.idx) Files Concurrently

    You may use (.cdx) with (.idx) files concurrently (even in the same work area); however, in most cases it is easier to use a single (.cdx) index for each database file or separate (.idx) files. When using both types of index at the same time, attempting to select an Order based on its Order Number can be confusing and will become difficult to maintain.

    File Maintenance under DBFCDX

    When an existing tag in a compound index (.cdx) is rebuilt using INDEX ON...TAG... the space used by the original tag is not automatically reclaimed. Instead, the new tag is added to the end of the file, increasing file size.

    You can use the REINDEX command to "pack" the index file. REINDEX rebuilds each tag, eliminating any unused space in the file.

    If you rebuild your indexes on a regular basis, you should either delete your (.cdx) files before rebuilding the tags or use the REINDEX command to rebuild them instead.

    DBFCDX and Memo Files

    The DBFCDX driver uses FoxPro compatible memo (.fpt) files to store data for memo fields. These memo files have a default block size of 64 bytes rather than the 512 byte default for (.dbt) files.

    DBFCDX memo files can store any type of data. While (.dbt) files use an end of file marker (ASCII 26) at the end of a memo entry, (.fpt) files store the length of the entry. This not only eliminates the problems normally encountered with storing binary data in a memo field but also speeds up memo field access since the data need not be scanned to determine the length.

    Tips For Using DBFCDX

    1. Make sure index extensions aren't hard-coded in your application. The default extension for DBFCDX indexes is (.idx), not (.ntx). You can still use (.ntx) as the extension as long as you specify the extension when you create your indexes. The best way to determine index extensions in an application is to call ORDBAGEXT().

    For example, if you currently use the following code to determine the existence of an index file:

    IF .NOT. FILE("index.ntx") INDEX ON field TO index ENDIF

    Change the code to include the INDEXEXT() function, as follows:

    IF .NOT. FILE("index"+ORDBAGEXT()) INDEX ON field TO index ENDIF

    2. If your application uses memo fields, you should convert your (.dbt) files to (.fpt) files.

    There are some good reasons for using (.fpt) files. Most important is the smaller block size (64 bytes). CA-Clipper's (.dbt) files use a fixed block size of 512 bytes which means that every time you store even 1 byte in a memo field CA-Clipper uses 512 bytes to store it. If the data in a memo field grows to 513 bytes, then two blocks are required.

    When creating (.fpt) files, the block size is set at 64 bytes to optimize it for your needs. A simple conversion from (.dbt) files to (.fpt) files will generally shrink your memo files by approximately 30%.

    3. Add DBFCDX.LIB as a library to your link command or link script.

  • Clipper - Brief Version History

    this page is suggested by Viktor Szel of Budapest, Hungary who also provided most if not all of the following materials.He posed a this question to me ... How about some "back to the good old days" history page including the very first versions of Nantucket Clipper ?

    By the way, you may have noticed that there are some missing dates... Anyone out there like to fill in the missing dates ?

    Here comes a brief version list:

  • Nantucket Clipper'85 Winter - 1985

  • Nantucket Clipper'86 Autumn - 31 October 1986

  • Nantucket Clipper'87 Summer - 21 December 1987

  • Nantucket Clipper 5.00 - 1990

  • Nantucket Clipper 5.01 - 15 April 1991

  • CA Clipper 5.01a - ?

  • CA Clipper 5.20 - 15 February 1993

  • CA Clipper 5.2a - ?

  • CA Clipper 5.2b - 25 June 1993

  • CA Clipper 5.2c - ?

  • CA Clipper 5.2d - 25 March 1994

  • CA Clipper 5.2e - 07 February 1995

  • CA Clipper 5.30 - 26 June 1995

  • CA Clipper 5.3a - 20 May 1996

    Here comes some command line help screen from previous versions:

    The Clipper Compiler, Winter '85


    Copyright (c) 1985, 1986 Nantucket Inc., All Rights Reserved. Developed by Brian Russell (Happy Birthday Sean) Richard McConnell Rick Spence David Dodson Kevin Shepherd Jon P. Rognerud options: -n (enhanced ative code) -l (no ine numbers) -s (syntax check only) @list.clp (list of files to compile) A>clipper b:main.prg -l A>clipper @list.clp -n

    The Clipper Compiler, Summer '87


    Copyright (c) Nantucket Corp 1985-1987. All Rights Reserved. Microsoft C Runtime Library Routines, Copyright (c) Microsoft Corp 1984-1987. All Rights Reserved.

    Richard McConnell & Brian Russell, Sr. VP

    Kevin Shepherd

    Dennis Dias

    Rick Spence

    David Dodson

    Jon P. Rognerud

    Fred Ho

    options: -l (no ine numbers)

    -m (compile one odule only)

    -o (bject file drive and/or path)

    -p (

    ause for disk change)

    -q (uiet)

    -s (syntax check only)

    -v (ariables are assumed M->)

    @list.clp (list of files to compile)

    A>clipper a:main.prg -p -ob: C>clipper @list.clp -l -q

    Clipper (R) Version 5.01


    Copyright (c) Nantucket Corp 1985-1991. All Rights Reserved. Microsoft C Floating Point Support Routines Copyright (c) Microsoft Corp 1984-1987. All Rights Reserved.

    Designed by Rich McConnell

    Written by Denny Dias, Basil Hosmer and Rich McConnell

    Options:

    /a automatic memvar declaration

    /b debug info

    /credits credits screen

    /d[=] #define

    /i #include file search path

    /l suppress line number information

    /m compile module only

    /n no implicit starting procedure

    /o object file drive and/or path

    /p generate pre-processed output (.ppo) file

    /q quiet

    /r[] request linker to search (or none)

    /s syntax check only

    /u[] use command def set in (or none)

    /v variables are assumed M->

    /w enable warnings

    @ compile list of modules in


    Clipper (R) Version 5.2


    Copyright (c) 1985-1993, Computer Associates International, Inc. Microsoft C Floating Point Support Routines Copyright (c) Microsoft Corp 1984-1987. All Rights Reserved.

    Options:

    /a automatic memvar declaration

    /b debug info

    /credits credits screen

    /d[=] #define

    /es[] set exit severity

    /i #include file search path

    /l suppress line number information

    /m compile module only

    /n no implicit starting procedure

    /o object file drive and/or path

    /p generate pre-processed output (.ppo) file /q quiet

    /r[] request linker to search (or none)

    /s syntax check only

    /u[] use command def set in (or none)

    /v variables are assumed M->

    /w enable warnings

    @ compile list of modules in

    Contributed by Steve Read, USA in July 1999

    Some additional info for your 'Brief Version History' section
    
    Sorry about any line wrapping.
    
    *====  Nantucket Clipper versions  ====*
    
    198? Nantucket Software founded
    
    Clipper            Winter 84       (Shipped on 25 May 1985)
    
    Clipper            Winter 85       (1985)       ProLocked version
    
    Clipper            Autumn 86       (10/31/86 02:00:00)
    PLink86plus      2.21
    
    Clipper            Summer 87       (12/21/87)
    PLink86plus      2.24
    
    Clipper            5.0   Rev. 1.03 USASCII (09/15/90)
    RTLink           3.11
    
    Clipper            5.01            (04/15/91)
    RTLink           3.13
    Clipper            5.01  Rev. 1.29
    Clipper            5.01  Rev. 1.47
    Clipper            5.01a
    
    Clipper Tools II   2.0
    Clipper Tools II   2.5
    
    CA-Clipper Compiler Kit for dBASE IV
    2.0             (11-06-93 02:00:00)
    (formerly Matt Whelan's Compiler Kit, dBASE IV
    Edition)
    
    
    According to the book written by Larry Heimendinger, former
    President of
    Nantucket Software - "Advanced Clipper", the first version was
    Clipper
    Winter '84, shipped on May 25, 1985.
    
    In "Advanced Clipper" by Larry Heimendinger is a complete history of
    the
    development of Clipper and Nantucket is outlined.
    
    The very first Clipper version was Winter '84 (shipped May '85) and
    had
    a manual of.... 54 pages (knowledge of dBASEIII was assumed). Winter
    '85: 200 pages of documentation, additions of VALID clause and
    SAVE/RESTORE SCREEN commands. Autumn '86 added the "==" operator,
    one-dimensional arrays, and usage of functions as commands. Summer
    '87
    (released after Christmas) brought further enhancements and a
    completely
    revised documentation. I don't know about any patches, I know about
    them
    only from the BBS's...
    
    Clipper 5.0 was announced at the June 1989 Clipper Developer's
    Conference in Los Angeles, by Nantucket.
    
    *====  Computer Associates Clipper versions  ====*
    
    1992 Computer Associates International purchased Nantucket Corp.
    
    Clipper Tools II      2.?
    
    CA-Clipper            5.01a
    CA-Clipper            5.01ae          (clipper.lib 16/10/92 6:00)
    
    CA-Clipper            5.20 (Rev. 196) (02-15-93 05:20)
    CA-Clipper            5.2a (Rev. 197) (03-15-93 05:21)
    CA-Clipper            5.2b (Rev. 202) (06-10-93 05:22)
    CA-Clipper            5.2c (Rev. 204) (08-06-93 05:23)
    CA-Clipper            5.2d (Rev. 215) (03-25-94 05:24)
    CA-Clipper            5.2e (Rev. 216) (02/07/95 05:25)
    
    CA-Clipper Tools III  3.0             (02-23-93 03:00) CT30
    patched files)
    (09-01-95 03:52) Clip52
    patched files)
    (09-01-95 03:53) Clip53
    patched files)
    CA-Clipper Tools III  3.0a
    CA-Clipper Tools III  3.0b
    
    CA-Clipper            5.3             (06-26-95 05:30)
    CA-Clipper            5.3a            (05-20-96 05:31)
    CA-Clipper            5.3b (Rev. 338) (05-20-97 05:32)
    
    *====  Computer Associates Visual Objects versions  ====*
    
    CA-Visual Objects     1.0   (16-bit) released in December 1994
    CA-Visual Objects     1.0a
    CA-Visual Objects     1.0b
    CA-Visual Objects     1.0c
    CA-Visual Objects     1.0d  stable version of 1.0x
    CA-Visual Objects     2.0   (32-bit)
    CA-Visual Objects     2.0.0 (Build 770)
    CA-Visual Objects     2.0b3
    CA-Visual Objects     2.5   to be released in July 1999
    
    *===*  Notes  *====*
    Visual Objects        1.x   The 16-bit versions. the early versions
    of
    VO1 was very flaky but is now stable
    (VO1d).
    
    Visual Objects        2.0   The 32-bit versions. Vo2 is superb and can  match anything on the market. The
    advance news of the next release, 2.5, looks exciting
    
    
    
    


  • Welcome to Clipper... Clipper... Clipper


    In 1997, then using Delphi 3, I had already created 32-bits Windows applications for HRIS, ERP and CRM. In 2007, using Ruby on Rails, an AJAX powered CRM site running on Apache & MySQL was created and I am now using Visual Studio .Net 2008 to create web-based projects and Delphi 7 for Win32 applications using SQL2005 & DBFCDX.

    So, why then am I reviving the Original Clipper... Clipper... Clipper via a Blog as CA-Clipper is a programming language for the DOS world ? Believe it or not, there are still some clients using my mission-critical CA-Clipper applications for DOS installed in the late 80's and up to the mid 90's. This is testimony to CA-Clipper's robustness as a language :-)

    With the widespread introduction of Windows 7 64-bits as the standard O/S for new Windows based PCs & Notebooks, CA-Clipper EXE simply will not work and it has become imperative for Clipper programmers to migrate immediately to Harbour to build 32/64 bits EXEs

    Since 28th January 2009, this blog has been read by 134,389 (10/3/11 - 39,277) unique visitors (of which 45,151 (10/3/11 - 13,929) are returning visitors) from 103 countries and 1,574 cities & towns in Europe (37; 764 cities), North America (3; 373 cities) , Central America & Caribeans (6; 13 cities), South America(10; 226 cities), Africa & Middle-East (12; 44 cities) , Asia-Pacific (21; 175 cities). So, obviously Clipper is Alive & Well : -)


    TIA & Enjoy ! (10th October 2012, 11:05; 13th November 2015)


    Original Welcome Page for Clipper... Clipper... Clipper

    This is the original Welcome Page for Clipper... Clipper... Clipper, which I am republishing for historical and sentimental reasons. The only changes that I have made was to fix all the broken links. BTW, the counter from counter.digits.com is still working :-)

    Welcome to Chee Chong Hwa's Malaysian WWW web site which is dedicated to Clipperheads throughout the world.

    This site started out as a teeny-weeny section of Who the heck is Chee Chong Hwa ? and has graduated into a full blown web site of more than 140 pages (actually hundreds of A4 size pages) ! This is due to its growing popularity and tremendous encouragements from visiting Clipperheads from 100 countries worldwide, from North America, Central America, Caribbean, South America, Europe, Middle-East, Africa and Asia-Pacific. Thanx Clipperheads, you all made this happen !


    What is Clipper ?

    You may ask, what is this Clipper stuff ? Could Clipper be something to do with sailing as it is the name of a very fast sailing American ship in the 19th century ?

    Well, Clipper or to be precise, CA-Clipper is the premier PC-Software development tool for DOS. It was first developed by Nantucket Corporation initially as a compiler for dBase3+ programs. Since then, CA-Clipper has evolved away from its x-base roots with the introduction of lexical scoping & pre-defined objects like TBrowse. As at today, the most stable version ofClipper is 5.2e while the latest version, 5.3a was introduced on 21 May 1996.

    As at 11th November, 1996, an unofficial 5.3a fixes file was made available by Jo French. See the About CA-Clipper 5.3a section for more details. BTW, Jo French uploaded the revised 5.3a fixes file on 20th November, 1996.

    Latest News

    The latest news is that CA has finally released the long-awaited 5.3b patch on 21 May, 1997.

    For 5.3b users, you must a take a look at Jo French's comments on unfixed bugs in 5.3b.

    BTW, have you used Click ? If you're a serious Clipperprogrammer and need an excellent code formatter, Click is a natural choice. How to get it ? Simple, access Phil Barnett's site via my Cool Clipper Sites.

    32-bits Clipper for Windows ?

    Have you tried Xbase ++ ? Well, I have and compared to Delphi (my current Windows programming tool of choice), I'm still sticking to Delphi.

    Anyway, you should visit the Alaska Home Page. Give it a chance and then draw your own conclusions !.

    The Harbour Project

    Is this the future of Xbase ? Take a look at at the Harbour Project

    You are Visitor # ...

    According to counter.digits.com, you are visitor since 3 June 1996.

    If you like or dislike what you see on this website, please drop me a line by clicking the email button at the bottom of this page or better still, by filling out the form in my guest book. If you are not sure what to write,click here to take a look at what other Clipperheads have to say.