[<<Previous Entry]
[^^Up^^]
[Next Entry>>]
[Menu]
[About The Guide]
Using CA-Clipper Tools
------------------------------------------------------------------------------
Programming
To use the CA-Clipper Tools functions in your programs, specify the
CT.LIB library during the LINK procedure. If required, also specify the
CTUS.OBJ Extended Driver file. (See the section called "Extended
Driver" below.)
All CA-Clipper rules apply when calling functions. For example, a
function's return must not be assigned to a variable.
Both types of calls are possible:
FUNCTION(par1, par2)
Var=FUNCTION(par1, par2)
Linking
CA-Clipper Tools functions can be linked with MS-LINK (often referred to
as the DOS linker) as well as with RTLink.
Here is an example using MS-LINK:
LINK <Prog1>+<Prog2>+CTUS,,,CT/SE:<nnn> /NOE
With the exception of small test programs, MS-LINK requires that a value
be assigned to the /SE: switch. We cannot recommend an adequate value
for <nnn>.
Here is an example using RTLink in FreeFormat mode:
RTLINK FI<Prog1>,<Prog2>,CTUS LIB CT
RTLink also contains a positional mode. When using this mode, the link
command has to be identical to that in MS-LINK. Further information
regarding RTLink can be found in the CA-Clipper Programming and
Utilities Guide.
PLL Files
CA-Clipper Tools cannot be implemented in conjunction with the
BASE50.PLL file created at CA-Clipper installation. You can, however,
create a new corresponding .PLL file with the linker script file CT.LNK
included in CA-Clipper Tools. Use the following command:
RTLINK @CT
This will exchange a particular module from the CA-Clipper library as
well as several I/O routines out of TERMINAL.LIB for others in CTUS.OBJ
or CT.LIB. The new .PLL file is called CT.PLL. If a new .PLL file is not
created, then the alternative I/O routines and therefore many of the
CA-Clipper Tools functions will not work for all the programs generated
via prelinking.
If the CT.PLL file has been created once, the link procedure can be
called as follows:
RTLINK FI <prog> LIB CT PLL CT
The CTUS.OBJ Extended Driver must not be specified, since it is already
in the .PLL file.
Further CA-Clipper Tools modules have not been included in this or other
.LNK files, since prelinked modules are always loaded at program start
and increase memory usage accordingly. Creation of a .PLL file in
conjunction with other external libraries becomes an individual
procedure. However, all CT.LIB modules can be prelinked. You simply
need to include a public for the desired module by inserting the REFER
command.
Here is an example. By inserting:
REFER COM_BREAK, ACOS
the _COM and _TRI3 modules (serial interfaces and trigonometric
functions) will be prelinked. The names of the module and the publics
can be determined with a library manager like MS-LIB.
CA-Clipper Libraries
None of the preceding examples mentions any of the files belonging to
CA-Clipper itself. This is because, during compiling, CA-Clipper's
default setting enters the names of its four libraries in the resulting
.OBJ file. When you influence this procedure, for example by using the
/r compiler switch, all the required libraries must be called explicitly
at linking.
Static Overlays
Most functions or CA-Clipper Tools modules cannot be stored to a static
overlay, as they contain interrupt service routines. They may not reside
in an overlay. The functions affected are KEYSEC(), KEYTIME(),
SHOWTIME(), SHOWKEY(), PRINTSCR(), PRINTSCRX(), and SETTIC(), as well as
serial interface functions that also work interrupt controlled.
The Extended Driver CTUS.OBJ may never be placed in an overlay, since it
is needed by CA-Clipper for every input and output. Linking CTUS.OBJ in
an overlay will result in a system crash immediately after the start of
your application. Therefore, be aware that the overlay will always have
to be loaded in order for the function to be available.
All CA-Clipper Tools functions can be called from an overlay. The
program code for some functions, however, cannot be placed within an
overlay.
Possible Linking Problems
When implementing CA-Clipper Tools in an existing application for the
first time, the linker warning message "Duplicate Definitions" may
occur. In this case, probably one of your own procedures or functions or
a function from another library has a name that was also used by one of
the CA-Clipper Tools functions. If the name of this other function or
procedure cannot be changed, it must be specified as a separate .OBJ
file. Otherwise CT.LIB must be designated as the last library.
Note, also, that an .OBJ file will always overwrite a library module
with the same name, independent of its position in the LINK command
line. Therefore, the CA-Clipper Tools Extended Driver is delivered as an
.OBJ file.
Extended Driver
In addition to the CT.LIB library, you will find a separate .OBJ module
on your disk called CTUS.OBJ. This is the CA-Clipper Tools Extended
Driver. If this is linked in, it replaces the CA-Clipper library
driver. Above all, the Extended Driver is important for the
implementation of window functions, but it also offers other interesting
possibilities. For this reason all the functions in the chapter on the
Extended Driver in this Reference Guide form a part of this module.
The CTUS.OBJ must only be added to the .OBJ file list to be linked. The
sequence is not important. The Extended Driver replaces the CA-Clipper
library driver module, so storing out to an overlay is not possible. You
will find further information in the Extended Driver chapter.
Debugging
Working with CA-Clipper Tools makes additional debugger features
available. These features are also controlled via the CLIPPER
environmental variable, by setting a switch DEBUG:<n>.
How Problems Arise
There are many possible screen modes, fonts, windows, and virtual
screens, so various problems can arise. The debugger also uses windows,
as you can see on the debugger Windows menu. To avoid a collision with
the windows of your application, the debugger has an additional
windowing system.
Working with One Screen
When working with one screen, the debugger must be able to switch
between the application screen and its own screen. The contents of the
application screen must be saved. This can happen in an area of the
available memory or in a free screen page.
Using a screen page saves memory and offers better performance, but it
takes a screen page of the application. This is, however, taken into
account by CA-Clipper Tools. The MAXPAGE() function, for example,
returns a reduced value. The default value for the application is
screen page, which can be changed with the environmental variable.
Working with Two Screens
Working intensively with CA-Clipper Tools video functions and the
debugger on one screen is difficult. For this situation, the debugger
supports two screens. This is possible because the PC can operate two
cards simultaneously, for example, a Hercules card and a VGA card. The
application output always occurs on the screen from which it was
started, while the debugger output is displayed on the other screen.
This capability is set via the CLIPPER environmental variable, by
specifying DEBUG:2.
DEBUG Values
The DEBUG: <n> switch can be set with a numeric value. Each individual
bit has a certain meaning. At this time, only two bits are used:
------------------------------------------------------------------------
Bit: When set: Default
------------------------------------------------------------------------
1 use PAGE 1
2 two screens 0
------------------------------------------------------------------------
Note: Particular switch combinations in the CLIPPER environmental
variable can lead to problems. Please construct your environmental
variable as follows:
SET CLIPPER=/Fnnn /Ennnn /DEBUG:2 /SWAPPATH:"path"
Reference Sensitive[@]
CA-Clipper can pass parameters of the character string type to a UDF by
reference. This means that what is actually passed is a pointer to the
original, thus avoiding the creation of an internal copy. When a
function takes on this type of parameter and changes it, it is the
original that is actually changed. Here is an example:
VAR := "Hello"
MYFUNC(@VAR)
Passing of parameters by reference has advantages and disadvantages. An
important advantage is that memory usage is reduced. This avoids
runtime errors that result from not having enough memory for string
manipulation. If, on the other hand, you do not want the original
string to be changed, passing of parameters by reference is a
disadvantage.
With a normal call (that is, not by reference), it is the copy that is
changed by the function. The change must then be passed back to the
original:
VAR := "Hello"
VAR :+ MYFUNC(VAR)
Particularly in the case of long strings, this method takes up memory
and time.
It is not a good idea to pass parameters by reference for most of the
CA-Clipper Tools functions. (In some cases there will even be a
difference in the result when a parameter is passed this way.) The
functions then change the string passed as a parameter directly. This
saves memory space and the functions work more quickly, since there are
no internal copy procedures taking place. Watch for the [@] identifier
meaning reference sensitive.
CSETREF()
This function allows you to further optimize memory requirements and
speed for different string functions. This assumes that a function is
only working with data passed as a parameter and avoids internal copies
of returned values as well. When CSETREF() is set, the affected function
no longer returns a value.
You will find more information on this function in the chapter on string
functions.
This page created by ng2html v1.05, the Norton guide to HTML conversion utility.
Written by Dave Pearson