Category : Dbase (Clipper, FoxBase, etc) Languages Source Code
Archive   : C5ANOM07.ZIP
Filename : CL507.TXT
Output of file : CL507.TXT contained in archive : C5ANOM07.ZIP
README About this report.
Report Name: CL507 Report Date: 12/18/90
Author: Compiled by Jo W. French dba Practical Computing of La Canada
290 Starlight Crest Drive
La Canada, CA 91011
(818) 790-3699
CompuServe ID: 74730,1751
Notes: Supercedes CL506. See Credits. ~ indicates change from last issue.
This report pertains to Clipper(r) 5.0. Each item herein contains the
applicable version number. It has been compiled from messages posted
on CompuServe forums from 09/15/90 through 12/17/90. The author has
verified most, but not all, of the stated anomalies. The severity of
each item is best left to the reader's judgement; however, those items
which will 'crash' the system are so noted.
Verification Conditions.
a) COMPILER: Clipper 5.0 version 1.03 dtd 09/15/90.
b) LINKER: RTLINK version 3.11 as supplied by lanquage vendor.
No Incremental Linking was used.
c) SYSTEM: IBM PS/2 Model 80 with 4Mb RAM, 222 Mb Fixed Disk.
d) DOS Version: IBM DOS version 3.30.
e) CONFIG.SYS:
DEVICE=c:\dos\vdisk.sys 1536 512 128 /E
DEVICE=c:\qemm\qemm.sys RAM
SHELL=c:\command.com /E:512 /P
FILES=51
BUFFERS=8
f) ENVIRONMENT
COMSPEC=C:\COMMAND.COM
PROMPT=$p$g
PATH=C:\dos;C:\bat;C:\;C:\me;C:\ws5;F:\clipper5\bin;D:\trh;
C:\qemm;F:\ng;
LIB=F:\clipper5\lib;
INCLUDE=F:\clipper5\include;
OBJ=F:\clipper5\obj;
PLL=F:\clipper5\pll;
CLIPPER=F21;
g) EXTENDED MEMORY: 1536Kb (DOS VDISK)
h) EXPANDED MEMORY: 1536Kb (QEMM vs. 5.0)
i) TSR's: All TSR's are loaded above 9FFF using QEMM's LOADHI.
----------------------------------------------------------------------------
Credits That's Thanks Folks!
My Thanks to the Sysops and Members of CompuServe for their
countless hours of cussing, working and losing sleep to present
solutions to the anomalies presented herein. Keep up the Good Work!
This is NOT an official Nantucket(r) publication.
Please report errors and ommissions to: Jo W. French 74730,1751
Note: See Read Me
----------------------------------------------------------------------------
ACOPY() Fails to copy under certain conditions.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
ACOPY() fails to copy when the 4th parameter,
parameter list; e.g., ACOPY(
Cause
Unknown.
Work Around(s)
Place a valid number in this parameter position; e.g.,
ACOPY(
Notes
ACOPY(
----------------------------------------------------------------------------
AEVAL() Undocumented return reference.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
AEVAL() documentation does not mention the presence of a second return
reference; i.e., the element number.
Cause
Documentation omission.
Work Around(s)
Annotate your documentation.
Notes
This permits things like the following:
AEVAL(array, { | value, element | array[element] = value * 2 } )
which replaces each element with 2 times the original value.
seealso "DBEVAL()"
----------------------------------------------------------------------------
ALLTRIM() Returns runtime error if embedded in a macro.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
When ALLTRIM(cVar) is included in a macro statement, a runtime
error occurs when the macro is expanded.
Cause
ALLTRIM(cVar) is a psuedo-function, created by directive in STD.CH; i.e.,
#translate Alltrim(
Work Around(s)
1) Create a real function, ALLTRIM(cVar), in your .PRG; e.g.,
FUNCTION ALLTRIM
PARAMETERS cVar
RETURN LTRIM(TRIM(cVar))
2) Create the above function and compile using the /N option.
Include the resultant .OBJ file when linking.
Note: You may delete the #translate line from MYNAME.CH.
3) Create the above function and compile using the /N option.
Add the resultant .OBJ file to a .LIB file; e.g., EXTEND.LIB.
Note: You may delete the #translate line from MYNAME.CH.
4) Replace all ALLTRIM(cVar) references in your .PRG with
LTRIM(TRIM(cVar)).
Note
See Support Bulletin 4 in the NANFORUM Library.
seealso "RIGHT()" "STD.CH"
----------------------------------------------------------------------------
APPEND 'Sticks' at EOF() ??. ~
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
The following is extracted from a message posted by ron 70671, 156:
When appending records to a file and successfully writing to and unlocking
that record, a SKIP -1, or lookup with the SEEK command, results in the
record pointer going to EOF(). GO TOP and GO BOTTOM do not work and
neither does SKIP -1.
Cause
Unknown
Work Around(s)
Close .dbf and re-open for subsequent operations.
Notes
Netware 386 3.1 LAN with MS-DOS 4.01 and 3.3 workstations. 35 files open.
Problem not reproducible with same database and only 4 other files open.
Index and .dbf are updated successfully.
----------------------------------------------------------------------------
ARRAYS/Externals AADD() and ASIZE() .. Incompatible with C/ASM. ~
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
If an array is declared using the form:
LOCAL aArray := {}
and AADD() or ASIZE() are used to size the array, the array is not
compatible with externals such as C and ASM.
Cause
Unknown
Work Around(s)
If the array is declared and sized using the form:
LOCAL aArray[20]
it can be used with C and ASM.
----------------------------------------------------------------------------
ASORT() Array sort with NIL elements out of order.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
When ASORT() is used on an array containing NIL elements, the last
non-NIL data will appear in the last element; e.g., AA, BB, NIL,
NIL, CC.
Cause
Unknown.
Work Around(s)
After sorting an array which contains NIL elements, perform the
following operation:
FOR i = LEN(aArray) TO 1 STEP -1
IF aArray[i] = NIL
ADEL(aArray,i)
ENDIF
NEXT
which will place all NIL elements at the end of the array; e.g.,
AA, BB, CC, NIL, NIL.
----------------------------------------------------------------------------
BOF() Set to .F. on each database access.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
1) BOF() is reverts to .F. each time the database is accessed; e.g.,
IF
2) BOF() will return .T. under the following example:
USE test
GO LASTREC() + 1
? BOF() // => .T.
Cause
Unknown.
Work Around(s)
1) Assure that BOF() is evaluated before evaluating other database items.
In the example above, change it to read IF BOF() .and.
----------------------------------------------------------------------------
BASE50.PLL Pre-linking with this file may 'hang' the system.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
A user, without EMS, reported that his system 'hung' when indexing a
7674 record file containing a 6 character field. He was pre-linking
BASE50.PLL
Cause
Unknown.
Work Around(s)
In the reported incident, the problem was cured by NO pre-linking
or pre-linking with Roger Donnay's, FULLBASE.PLL. See FAST50.ZIP
in NANFORUM's LIB 17.
seealso "INDICES" "MEMORY/VMM"
----------------------------------------------------------------------------
CALL()* Parameters are passed in reverse order.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
When CALL proc WITH a, b, c is executed the receiving procedure will
receive the parameters as c, b, a.
Cause
Unknown.
Work Around(s)
Reverse order of parameter list or use extend system.
seealso "EXTEND System"
----------------------------------------------------------------------------
CLD Debugger anomalies.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
1. Linking CLD.LIB, as a LIB, does not work.
2. RESTART command does not work, gives SYNTAX ERROR.
3. PASS POINTS does not work as described in documentation.
4. LIST only lists Break Points not Watch Points and Trace Points.
5. F6 DBF file view: Moving in alist of tables when one or more is
empty or EOF() causes the debugger to bomb.
6. Only one command line parameter is recognized; i.e., when
CLD testprog par1 par2 is executed, par2 is NIL.
7. Other. See CLDBUG.ZIP in the NANFORUM LIB for 4 other anomalies;
i.e., date display, ambiquous variables, erroneous commands and
accessing the error class exported variable e.args.
Cause
Unknown.
Work Around(s)
1. Link CLD.LIB as an .OBJ; i.e., RTLINK FI yourfile, CLD.LIB
2. Unknown.
3. Use 'PASSPOINT' instead of 'PP'.
4. Unknown.
5. Pressing a menu hot key and RESTART off the menu will get things
back in order.
6. Unknown.
7. See referenced file.
----------------------------------------------------------------------------
CLOSE-UP Problem with CLOSE-UP remote operation.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
Keys not recognized when using CLOSE-UP remote operation, specifically
in MENU TO operation.
Cause
Incorrect CLOSE-UP settings.
Work Around(s)
Set CLOSE-UP keys to Advanced (requires version 3.0A).
----------------------------------------------------------------------------
COL() Returns start of 'get' display vs end in S'87.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
COL() returns the column at the start of a get display in Clipper 5.0
vis-a-vis the end of the get display in Summer '87.
Cause
Unknown.
Work Around(s)
Adjust screen display commands accordingly or use the new Get Class
functions; e.g.,
...
@ 0,0 say "Input" GET VALID myfunc
READ
FUNCTION myfunc
LOCAL g := getactive()
@ g:row, g:col + len(g:buffer) + 1 SAY '
RETURN .t.
----------------------------------------------------------------------------
COMPILER Miscellaneous observations. ~
Clipper Version 1.03 dtd 09/15/90.
Observations
1) IF the /P parameter is used in SET CLIPPERCMD and in the command
line, the result is no .ppo file.
2) Fatal compiler errors, or aborting the compile, will leave, what
one user has dubbed, 'compiler turds'; i.e., compiler working files
on your disk.
3) Reminder, per the manual, pg. 3-2, SET CLIPPERCMD or command line
options MUST be separated by a space (or the remainder will be ignored).
4) /O Compiler Option ( Programming and Utilities Guide, pg 3-10)
If only a path is supplied, it must end with \.
----------------------------------------------------------------------------
DBEVAL() Documentation interpretation. ~
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
DBEVAL() documentation states that DBEVAL() returns NIL. This statement
should not limit your imaginative use of this function, as illustrated
below.
Cause
Not Applicable.
Work Around(s)
Not Applicable.
Notes:
* This example fills a multi-dimensional array with the contents of a ~
* .dbf file using DBEVAL and AEVAL.
* It also demonstrates the dynamic attribute of STATIC arrays and
* use of AEVAL's undocumented, second variable.
STATIC aArray := {}
LOCAL n, y
CLS ; USE test NEW ; ASIZE(aArray,LASTREC())
DBEVAL( {|| ;
aArray[RECNO()] := {} , ASIZE(aArray[RECNO()], FCOUNT()), ;
AEVAL(aArray[RECNO()],{|x,e| aArray[RECNO(),e] := FIELDGET(e)} ) } )
USE
QOUT() ; QOUT()
AEVAL(aArray, { |x,e| AEVAL(aArray[e], { |x| QQOUT(x), QQOUT(" ") }), ;
QOUT() })
seealso "AEVAL()"
----------------------------------------------------------------------------
DBU Miscellaneous anomalies. ~
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
1) If you try to change the name of a memo field, of an existing indexed
(with DBU) database, and answer 'Yes' to the warning that 'Memos will
be lost..'; you will lose all the records in your database as well.
2) You may end up in an 'run-away' situation (Alt C to break) in the
following set of circumstances: (Note: files containg 1000+? records)
a) Open a database and Index with DBU.
b) (F5) Browse the database.
c) Before the screen has completely refreshed the database information,
press (F7) to perform a seek operation (select seek).
d) Enter an index key and 'Watch the fun begin'. (Thanks Kelly!)
Cause
Unknown.
Work Around(s)
Unknown.
----------------------------------------------------------------------------
SET DELETED ON DELETED() records may still be visible. ~
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
Under certain combinations of physical file order (adjacent records),
indexing and filtering, it can be shown that DELETED() records in a file
may remain visible.
Cause
Unknown.
Work Around(s)
Test for DELETED() records; i.e.; in an example, the following showed
a deleted record. Adding .AND. .NOT. DELETED() to the filter cured the
problem. Thanks to a user for submitting test program, files, et al!
SET DELETED ON
USE test NEW
SET INDEX TO test
SET FILTER TO .....
GO TOP
WHILE .NOT. EOF()
? DELETED()
SKIP
END
----------------------------------------------------------------------------
DELIMITED | SDF COPY TO or APPEND FROM anomalies.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
COPY and APPEND commands, using certain delimiters, do not produce
the desired result. Further, certain APPEND FROM commands will
append junk until all available disk space is exhausted.
Cause
Unknown.
Work Around(s)
Unknown. Nantucket to supply.
Notes:
1) COPY commands; using SDF, DELIMITED or DELIMITED WITH comma; work.
2) APPEND commands; using SDF, DELIMITED or DELIMITED WITH comma; work,
only if the text file ends in ^^Z or
try to append 'records' until out of disk space, causing a crash.
3) DELIMITED WITH commands, other than those above, fail to produce
the desired results. A hi-bit character will be used as the delimiter.
4) The Detroit Area Clipper Users Group BBS (313-651-7841) has a file,
DBAPPDEL.ZIP (E. Mark Kothe) which contains a program for appending
with a BLANK delimiter.
----------------------------------------------------------------------------
DIRECTORY() Resultant array may == NIL.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
The array created by the DIRECTORY() function will == NIL if no files
meet the
Work Around(s)
Annotate your documentation. Test result for NIL.
----------------------------------------------------------------------------
ERRORSYS.PRG Not compatible with S'87.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
Clipper 5.0's ERRORSYS.PRG is incompatible with S'87 routines.
Work Around(s)
A user has uploaded ERRSUB.ZIP to NANFORUM to resolve differences.
----------------------------------------------------------------------------
EXTEND System Changes made to a variable may effect other variables.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
When a pointer points to more than one variable and one of the variables
is changed in an ASM or C function, the other variables may be changed.
Work Around(s)
a) Make a local copy of the variable and pass it to the function.
b) Break the pointer relationship before passing the variable.
Notes This subject is slightly over the author's head, so forgive
the terminology
a) The following is an abstract of a forum message on the subject:
Fm: Pedro P. Polakoff [3PS] 73157,2412
Here is code that will demonstrate that:
1. _parc() returns a pointer to the actual data.
2. cVar1:=cVar2:="Foobar" points both variables at the same
block of memory much as a C char * does.
CLIPPER PORTION ---
static cVar1
static cVar2
function str_test
cVar1:=cVar2:="Foobar" // HERE IS THE ASSIGNMENT
QOut(cVar1,cVar2)
ChangeStr(cVar2) // NOTE NOT PASSED BY REFERENCE
QOut(cVar1,cVar2)
return(NIL)
C PORTION ---
#include
CLIPPER changestr()
{
char *str;
register int p;
byte q='A';
if(PCOUNT==1 && ISCHAR(1)){
str=_parc(1); // pointer to pointer
for(p=0;p<_parclen(1);p++){str[p]^=q;} // directly changed
}
_ret(); // NIL return
}
b) Another example can be found in EXTBUG.ZIP in the NANFORUM LIB 17.
Uploaded by Francois Batte 70022,3424.
seealso "CALL()*"
----------------------------------------------------------------------------
FCREATE Norton Guide documentation error.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
FCREATE's attribute definition is incorrect in the Norton Guide.
Work Around(s)
Use the documentation in the manual or refer to FILEIO.CH.
The correct attributes are:
0 Create normal read/write file (default)
1 Create read-only file
2 Create hidden file
4 Create system file
----------------------------------------------------------------------------
FIELDWBLOCK() Does not work per 'Guide' description.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
FIELDWBLOCK(
USE test1 ALIAS one NEW; nOne:= Select() // cFieldName is keyid
USE test2 ALIAS two NEW; nTwo:= Select() // cFieldName is last_name
? EVAL(fieldwblock ("last_name", nTwo)) // works ok.
? EVAL(fieldwblock ("keyid", nOne)) // does not work.
Work Around(s) as submitted by MIKE SCHINKEL 73567,3612.
USE test1 ALIAS one NEW; nOne:= Select()
USE test2 ALIAS two NEW; nTwo:= Select()
? one->( EVAL( FieldWBlock( "keyid", nOne ) ) ) // Both these
? ( nOne )->( EVAL( FieldWBlock( "keyid", nOne ) ) ) // are same.
? two->( EVAL( FieldWBlock( "last_name", nTwo ) ) ) // Both these
? ( nTwo )->( EVAL( FieldWBlock( "last_name", nTwo ) ) ) // are same.
Notes
A description of FIELDWBLOCK's behaviour, as submitted by Manuel
Gonzalez 71121,1442, is as follows:
1) If the work-area number fed to FIELDWBLOCK is the same as the current
work area and the field exists, it returns the field's value when
it's EVALuated.
2) If the work-area number fed to FIELDWBLOCK is the same as the current
work area and the field does not exist, it returns NIL.
3) If the work-area number fed to FIELDWBLOCK is not the same as the
current work area and the field does not exist in the work area
specified, ERRORSYS says: "Variable does not exist: (fieldname)."
4) If the work-area number fed to FIELDWBLOCK is not the same as the
current work area and the field DOES exist in the work area spe-
cified, FIELDWBLOCK returns NIL. EVALuating FIELDWBLOCK bombs.
----------------------------------------------------------------------------
GETSYS.PRG Modifications and corrections. ~
Clipper Version 1.03 dtd 09/15/90.
Problem Statements
1) Unable to enter characters having an ASCII value > 127 in GET's.
2) Control W or Control End exits getlist.
3) Unable to enter negative decimal numbers using decimal point
movement.
4) When a GET ... WHEN
entry is at the top or bottom of the getlist, the system appears to
lock up.
5) An 'unselected' color setting is ignored until the GET is entered ~
and exited.
Cause
1) Line 413 of an unmodified GETSYS.PRG reads as follows:
if (nKey >= 32 .and. nKey <= 127)
2) GETSYS.PRG option
3) Unknown.
4) GETSYS.PRG programming error.
5) Unknown.
Work Arounds
1) Line 413 may be edited, with caution, to permit a greater range of
entries. Check for conflicts with any SET KEY's or SET FUNCTION's.
GETSYS.PRG should be compiled and linked with your .PRG.
2) The GETSYS.PRG has an #ifdef NOTDEF in the program. If you
#define NOTDEF at the beginning of the file, CTRL W and CTRL END
will move to the last valid item of the getlist.
3) Enter negative decimal numbers, with PICTURE template #, as
spaces up to the position before the decimal point, then minus,
then number OR enter minus, then zeros until cursor jumps past
decimal point, then number.
4) The following changes to GETSYS.PRG will correct the problem.
5) Unknown.
Note: This group of changes should be ignored if the 'Ira' fixes,
below, are incorporated.
********************************************************************
The changes commence at line 242 of the original program.
// 242 if (localReadExit)
i := 0
// 244 else
// 245 i := 0
// 246 direction := BACKWARD
// 247 end
end
else
if ( --i < 1 )
* going backward, at top of getlist
if (localReadExit)
i := 0
else
i := 2 // changed 255, was i := 1
********************************************************************
GETSYS.PRG should be compiled with the /N option and linked with
your .PRG.
Note: The following changes to GETSYS.PRG have been submitted by
Ira Emus (76702,672) to 'fix a bunch of anomalies you might find when
using the WHEN keyword.' :
********************************************************************
186 LOCAL nKey := 0, cKey // change
242 IF (LocalReadExit) .OR. nKey == K_ENTER // change
246 i := nLen-1 // change
256 i := 2 // change
334 new := if( localReadExit, 0, 1 ) // reference
335 GetExitRequested := new == 0 // Add
341 new := if( localReadExit, 0, nLen ) // reference
348 GetExitRequested := new == 0 // Add
183 local g, passcount := 0 // change
246 direction := BACKWARD // reference
247 passcount++ // add
256 direction := FORWARD // reference
257 passcount++ // add
260 IF passcount = 2 // add
261 i := 0 // add
262 ENDIF // add
263 loop // reference
264 end // reference
265 passcount := 0 // add
260 g:display() // Add
261 loop // reference
********************************************************************
The above 'Ira' changes have been 're-ordered' by another user
as follows:
"The changes are reordered so that the added lines are in reverse
order so that line numbers don't change their reference line number.
183->182 means 'Ira' code showed line 183 but it should have been 182.
Changed Lines:
183->182 local g, passcount := 0 // change
186->185 LOCAL nKey := 0, cKey // change
242 IF (LocalReadExit) .OR. nKey == K_ENTER // change
246->245 i := nLen-1 // change
256->255 i := 2 // change
Added Lines:
341->334 new := if( localReadExit, 0, nLen ) // reference
348->335 GetExitRequested := new == 0 // Add
334->327 new := if( localReadExit, 0, 1 ) // reference
335->328 GetExitRequested := new == 0 // Add
These 7 line numbers are difficult to tell exactly where g:display()
goes since two changes were made here. They've been combined.
Original code reference:
263->260 loop // reference
264->261 end // reference
After additions (with new line numbers for loop and end).
260 IF passcount = 2 // add
261 i := 0 // add
262 ENDIF // add
260->263 g:display() // add
263->264 loop // reference
264->265 end // reference
265->266 passcount := 0 // add
These four lines are correct.
256 direction := FORWARD // reference
257 passcount++ // add
246 direction := BACKWARD // reference
247 passcount++ // add "
Note
Author's note: I think the 'differences' may be due to Version 1.02 vs.
1.03 - hope everyone can decipher 'em. Thanks to Ira!
seealso "\SOURCE\SYS" "READ" "PICTURE"
----------------------------------------------------------------------------
Get:Delete() Documentation omission.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
Get:Delete() Syntax is not in documentation.
Cause
Documentation omission.
Work Around(s)
Annotate your documentation to add the definition to the GET Class,
Cursor Movement Methods definitions
delete() Deletes the character under the cursor
----------------------------------------------------------------------------
GetNew() Error in syntax documentation.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
GetNew() Syntax is not correct in documentation.
Cause
Error in documentation.
Work Around(s)
Edit your documentation to reflect the correct syntax:
GetNew([
[
----------------------------------------------------------------------------
Get:VarGet() Get Class, missing manual documentation.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
The definition of VarGet() is missing from the manual, but included
in the Norton(r) Guide.
Cause
Ommission.
Work Around(s)
Annotate your manual to include VarGet() as follows:
varGet() Returns the current value of the Get variable ^r^CEA^r
varGet() --> GetVarValue
Returns the current value of the Get variable. For simple Get
variables this is equivalent to executing Get:block:
aGet:varGet() == EVAL(aGet:block)
However, if the Get variable is an array element, EVAL(aGet:block)
will not return the value of the Get variable; in this case use of
varGet() is required. An example of varGet() may be found in the
READMODAL() function, defined in Getsys.prg.
----------------------------------------------------------------------------
Get:VarPut() Get Class, missing manual documentation.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
The definition of VarPut() is missing from the manual, but included
in the Norton(r) Guide.
Cause
Ommission.
Work Around(s)
Annotate your manual to include VarPut() as follows:
varPut() Sets the Get variable to the passed value ^r^CEA^r
varPut() --> Value
Sets the Get variable to the passed value. For simple Get variables
this is equivalent to executing Get:block with an argument:
aGet:varPut(aValue) == EVAL(aGet:block, aValue)
However, if the Get variable is an array element, EVAL(aGet:block,
aValue) will not set the value of the Get variable; in this case use
of varPut() is required.
----------------------------------------------------------------------------
IF(
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
IF(
a compiler error will occur; e.g.,
SET RELATION TO field + IF(
Cause
Pre-processor action
Workaround(s)
1) Use IIF() instead of IF()
2) Make IF() into an expression; e.g., field + (IF(
----------------------------------------------------------------------------
IF nX == 0 May return incorrect logic.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
Given the assignment, nX := 0.6, the test, IF (nX == 0) will return
true.
Cause
Unknown.
Workaround(s)
1) IF nX == 0.0 works ok.
2) IF 0 == nX or IF 0.0 == nX work ok.
3) IF | IFF( nX == 0, action1, action2 ) work ok.
4) IF ROUND( nX, 2 ) == ROUND( 0, 2 ) works ok.
----------------------------------------------------------------------------
INCREMENT RTlink option, problems.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
Users have reported problems when attempting to use the Incremental
Linking feature of RTLINK.
Cause
Unknown.
Work Around(s)
Avoid the use of this feature until a fix is available.
----------------------------------------------------------------------------
INDICES Numerous reported problems.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
Numerous reported problems re' indices; e.g., SEEK's, SET RELATION TO's
and PACK's. Numerical indices containing appended blanks are out of
order. Indexing on a child relation will destroy the child's index.
Cause
Unknown.
Work Around(s)
Unknown. Suggest use of character type index keys. The following
function will handle negative numbers and treat blanks as zeros.
FUNCTION num2str(nNumber)
RETURN ( PADL(LTRIM(STR(IF(nNumber<0,ABS(1/nNumber),nNumber),;
LEN(STR(nNumber))+2,LEN(STR(nNumber))-AT(".",STR(nNumber))+2)),;
LEN(STR(nNumber))+2,IF(nNumber<0,"-","0")) )
A workaround for indexing on a child's data is to use a UDF. Example:
SELECT 2
USE test2 ALIAS S
INDEX ON key_id TO test2
SELECT 1
USE test1 ALIAS P
INDEX ON RELFUNC(P->key_id) TO test1
FUNCTION RELFUNC(idkey)
LOCAL cRetVal
SELECT 2
SEEK idkey
cRetVal = IF( !S->(EOF()), S->last_name+S->first_name,;
SPACE(LEN(S->last_name+S->first_name)) )
SELECT 1
RETURN cRetVal
Note: The index file created by indexing on a number field has a
different internal representation depending upon whether the file was
created by Summer '87 or Clipper 5.0.
seealso "MEMORY/VMM" "PACK" "SET RELATION"
----------------------------------------------------------------------------
INSTALL Installation Problems
See Support Bulletins 1 and 2 in NANFORUM LIB 16.
----------------------------------------------------------------------------
LABEL FORM A runtime error occurs on second execution.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
If the user attempts to execute a second label report, a runtime
(assignment) error will occur.
Cause
LBLRUN.PRG programming error.
Work Around(s)
Edit lines 115 to 119 of the original LBLRUN.PRG as follows:
aLabelData := {}
aBandToPrint := {}
nCurrentCol := 1
cBlank := ""
lOneMoreBand := .T.
Re-compile and link with programs requiring LABEL FORM.
seealso "NOCONSOLE" "SET CONSOLE"
----------------------------------------------------------------------------
LOCAL Inline assignment clarification.
Clipper Version 1.03 dtd 09/15/90.
Clarification:
Inline assignments of the following form:
LOCAL a := b := c:= 0
result in LOCAL a and PRIVATE b and c
----------------------------------------------------------------------------
MANUAL Missing documentation.
Clipper Version 1.03 dtd 09/15/90.
As noted in the README file, the following function or statement
definitions are missing from the manual:
BREAK() Branch out of a BEGIN SEQUENCE...END construct F
DECLARE* Create and initialize private memory variables and arrays S
DEVOUT() Write a value to the current device F
FIELDBLOCK() Return a set-get code block for a field variable F
FIELDGET() Retrieve the value of a field variable F
FIELDPUT() Set the value of a field variable F
FIELDWBLOCK() Return a set-get block for a field in a given work area F
GETACTIVE() Return the currently active Get object F
MEMVARBLOCK() Return a set-get code block for a given memory variable F
OUTERR() Write a list of values to the standard error device F
OUTSTD() Write a list of values to the standard output device F
SETBLINK() Toggle asterisk (*) interpretation in SETCOLOR() F
SETMODE() Change display mode to specified number of rows, columns F
Note: These definitions have been uploaded as MAN001.TXT and MAN002.TXT
in the NANFORUM library.
The following match-marker description is also missing from the manual:
<(idMarker)> Extended Expression match-marker
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Extended Expression match-marker: matches a regular or
extended expression, including a filename or path specification. It
is used in combination with the smart stringify result-marker to
assure that extended expressions won't get stringified, while
normal, unquoted string file specifcations will.
----------------------------------------------------------------------------
MEMORY/VMM Numerous reported VMM crashes.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
Numerous problems have been reported re' memory related crashes.
Cause
Unknown.
Work Around(s)
Unknown, however:
a) One user, Pedro P. Polakoff [3PS] 73157,2412 reports:
Anyone who is having problems with the VMM error: 5317 (Swap space
exhausted), especially when using linker's other than RTLink, can
solve the problem by using the following function call:
Function VMMKickStart()
local cDummy:=Space(8000) // Warplink Base
-- or --
local cDummy:=Space(16000) // Blinker Base
return(NIL)
as the very first executed line of your program.
b) If the system locks up when indexing, and you linked WITH
BASE50.PLL, try linking WITHOUT BASE50.PLL or linking with
Roger Donnay's suggested FULLBASE.PLL. (See FAST50.ZIP in
NANFORUM LIB 17, New Uploads.)
Notes
See Support Bulletins 3 and 4 in NANFORUM LIB 16.
----------------------------------------------------------------------------
MENU TO w/SETKEY Setkey() receives incorrect parameters.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
The set key procedure does not receive the correct parameters for
cproc, cline and, cvar.
Cause
Unknown.
Work Around(s)
1) Tech support at Nantucket suggests the following work around to be
placed at the top of all setkey() procedures :
if procname(3) == "__MENUTO"
cproc := procname(4)
else
cproc := procname(3)
endi
2) The following alternative(s) have been suggested by a user.
First create an #include file called BUGFIX.CH as follows:
#define FIXCPROC procname(if(procname(3)=='__MENUTO',4,3))
#define FIXCLINE procline(if(procname(3)=='__MENUTO',4,3))
#define FIXCVAR readvar()
and modify your set key procedure by placing the following at the
top of each procedure:
cproc := FIXCPROC
cline := FIXCLINE
cvar := FIXCVAR
OR (Combination of above.)
#define FIXCPASS(x,y,z);
x := procname(if(procname(3)=='__MENUTO',4,3)) ;;
y := procline(if(procname(3)=='__MENUTO',4,3)) ;;
z := readvar()
Place the following at the top of setkey procedures:
FIXCPASS(cproc,cline,cvar)
seealso "PROCNAME()"
----------------------------------------------------------------------------
MISC Miscellaneous clarification/anomalies. ~
Clipper Version 1.03 dtd 09/15/90.
a) CL.BAT (Support Bulletin S50004.TXT)
This batch file was not supplied with Clipper 5.0.
Here are the intended contents:
CLIPPER %1
RTLINK FI %1
b) NDX File Support ( Card contained with Clipper 5.0 )
You must request this feature from Nantucket(r). Not available
as of late November.
c) SETBLINK(), SETMODE() (NG Function Descriptions)
These are environmental or screen attributes; hence, they may
change the full screen when invoked. SETMODE() should be followed
by a CLS or CLEAR SCREEN. You may want to save the screen before
invoking either of these functions.
d) MEMVARBLOCK() (NG Function Description)
MEMVARBLOCK() cannot be used to create set-get blocks for LOCAL
or STATIC variables.
e) A 'splash of color' may remain at 0, 65 after using SETCOLOR()
and GET. This can be eliminated by SET SCOREBOARD OFF.
f) Code block parameter visibility - documentation anomaly.
Page 1-21 of the Clipper 5 Reference, last sentence, 2nd paragraph
reads: "....a declaration that occurs within a code block (a block
parameter), applies to that code block and any code blocks nested
within it.". The block parameter IS NOT visible to nested code blocks,
unless you pass it.
g) In certain incidences, terminating a macro expression with a period,
'.', does not work; e.g.,
FUNCTION IndexFile(cKey, cIndexName)
INDEX ON &cKey. TO (cIndexName)
RETURN (NIL)
Result: Compiler "Error C2081 Macro of declared symbol: '&cKey.'
h) Menu.prg example on page 1-2 of the Reference Manual has as its
first line '#include "Database.prg" ...'. This directive should
be placed at the end of the program (it includes generic database
functions).
i) Cursor anomalies. Try using SET CLIPPER=CGACURS if you are
experiencing cursor anomalies. Reference: NG Environment.
j) Re-direction. Clipper 5.0 does not accept command line parameters
re-directed from a text file; e.g. CLIPPROG < TEXTFILE.
k) Internal Error Numbers are not documented.
l) STATIC arrays. Documentation anomaly, pg. 1-57. Contrary to the
documentation, STATIC arrays are also dynamic.
m) The following program results in a run-time error because x was not
initialized; however, the error message, "Error BASE/1087 Argument
error: -- " should reference ++ instead.
function main
local x
x++
return nil
----------------------------------------------------------------------------
MULTI-STATEMENT Multi-statement lines, CAUTION.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
When using multiple statements on one programming line; i.e.;
separating commands with a semi-colon; there are several commands
which will cause erroneous results, if they are not at the end of
line.
Cause
Pre-processor action.
Work Around(s)
Make sure that the following commands, if used, appear at the end
of the line, ONLY.
ENDDO <*x*> SET STEP <*x*>
ENDIF <*x*> SET SAFETY <*x*>
ENDCASE <*x*> SET TALK <*x*>
ENDFOR <*x*> SET PATH TO <*path*>
SET ECHO <*x*> SET COLOR TO <*spec*>
SET HEADING <*x*> SET COLOUR TO <*spec*>
SET MENU <*x*> RUN <*cmd*>
SET STATUS <*x*> ! <*cmd*>
COPY TO <(file)> DELIMITED WITH <*delim*>
APPEND FROM <(file)> DELIMITED WITH <*delim*>
seealso "STD.CH" "DELIMITED | SDF" "SET COLOUR"
----------------------------------------------------------------------------
Numerics Problem with numbers > 2 ** 31.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
Certain large numbers, entered as variables, return unexpected
values. Examples:
Assignment ? nVar
nVar := 4503599627436033 => 4503599627436033
nVar := 4503599627436032 => 4503599627436032
nVar := 4503599627436031 => 65535
nVar := 4503599627403264 => 35868
nVar := 4503599627403263 => 32767
nVar := 4503599627370498 => 2
nVar := 4503599627370497 => 1
nVar := 4503599627370496 => 0 // 2 ** 54
nVar := 4503599627370495 => -1
nVar := 4503599627370494 => -2
nVar := 4503599627337729 => -32767
nVar := 4503599627337728 => 4503599627337728
nVar := 4503599627337727 => 4503599627337727
Cause
Unknown.
Work Around(s)
Append '.0' to the variable at assignment; e.g.,
nVar := 4503599627370496.0 => 4503599627370496.0
Notes
The above example 'ranges' about 2 ** 54. Similar, but not identical,
results will occur when nVar > 2 ** 31. Attempts to assign nVar as
ROUND(nNumber,nPlaces) or nNumber * 1.0 failed to cure the problem;
however, if nVar is created as a result of say 2 ** 32, the assignment
appears to be correct.
----------------------------------------------------------------------------
NG MODE Un-documented Norton(r) Guide Mode.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
NG can be executed in a mode which will permit it to unload from
memory when F10 or Escape is used to exit the program.
Cause
Documentation omission.
Work Around(s)
Enter NG TEST.NG at the DOS prompt. When NG receives the specific
parameter TEST.NG, it will load in the above described mode.
Annotate your documentation.
Note TEST.NG is the specific parameter to be used. This is NOT
the name of an existing file.
----------------------------------------------------------------------------
NOCONSOLE Not documented as REPORT | LABEL FORM option.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
NOCONSOLE parameter to REPORT | LABEL FORM .. commands is missing.
Cause
Syntactical ommissions in documentation. Note: FRMRUN.PRG | LBLRUN.PRG
programming uses the presence | absence of a NOCONSOLE parameter to
SET CONSOLE accordingly. See SET CONSOLE for re-programming solutions.
Work Around(s)
1) Change documentation to reflect addition of this parameter:
REPORT | LABEL FORM
[WHILE
[NOEJECT] [SUMMARY] [NOCONSOLE]
----------------------------------------------------------------------------
OS() Does not return user's operating system.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
OS() returns the operating system programmed into EXAMPLP.PRG.
Cause
Incorrect documentation or non-implementation of function.
Work Around(s)
1) Change documentation to reflect true action of this function.
2) Edit EXAMPLEP.PRG to reflect the desired system, compile and
link with your program.
----------------------------------------------------------------------------
PACK PACK's with multiple open indices may fail.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
PACK's with multiple indices may fail. The BADPAC.ZIP file on
NANFORUM illustrates the problem.
Cause
Unknown. Suspect indexing procedure.
Work Around(s)
Close indices before PACKing. Re-index the files, using INDEX ON rather
than REINDEX. Some users recommend erasing the index files prior to
usage of the INDEX ON. Otherwise, design your program so that PACK's
are not required.
seealso "REINDEX" "INDICES"
----------------------------------------------------------------------------
PICTURE Anomalies with the PICTURE clause.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
1) PICTURE "Y" May return lowercase, if character type variable.
Using @
Using @
will not force UPPER(cVar); i.e., cVar returned will be the same
case as entered by the user.
2) PICTURE "@R may not produce the desired results, per
the following example:
Using @
produces a_b_c_defgh.
3) The PICTURE clause may truncate a variable but will not increase
it's length. Examples:
cVar := ""
@ row, col get cVar PICTURE "!!!!!" // Does not work.
cVar := SPACE(10)
@ row, col get cVar PICTURE "!!!!!" // Will truncate cVar.
Cause
1) Not implemented in STD.CH
2) Unknown.
3) Unknown.
Work Around(s)
1) Place the following line at the beginning of your program or
at the end of MYNAME.CH
#translate PICTURE "Y" => PICTURE "@! Y"
2) Format the string through other means. It appears that this template
will work if four or less items of the input string are to be
formatted at a time; i.e., "8185551212" to "@R (999)999-9999" works
satisfactorily.
3) Exercise caution in programming.
seealso "STD.CH"
----------------------------------------------------------------------------
PROCNAME() Returns wrong value when in SET KEY procedure.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
When PROCNAME() is called from within a SET KEY procedure, the wrong
procedure name is returned.
Cause
Unknown.
Work Around(s)
1) Modify your program to use some other method of identifying
'where you are' for HELP routines, etc.
seealso "MENU TO w/SETKEY"
----------------------------------------------------------------------------
RANGE Compiler errors.
Clipper Version 1.03 dtd 09/15/90.
Problem Statements
1) RANGE compiler error (C2010) when GET is an array element.
Using @
OR
Using @, GET PICTURE .. RANGE ,
Using @
OR
Using @, SAY GET PICTURE .. RANGE
Using @
,
returns a compiler error if the is an array element.
2) WHEN RANGE ( Not Implemented, contrary to documentation.)
Using @, GET PICTURE .. WHEN RANGE ,
returns a compiler error if the is an array element.
2) WHEN RANGE ( Not Implemented, contrary to documentation.)
Using @
OR
Using @, SAY GET PICTURE .. WHEN ;
RANGE
OR
Using @
RANGE
,
returns a compiler error, whereas the documentation reflects that
RANGE | VALID may be used.
Cause
1) Pre-processor action.
2) Not implemented in STD.CH
Work Around(s)
1 & 2) Edit MYNAME.CH lines per the following:
#command @, GET [PICTURE ] ;
[RANGE,
returns a compiler error, whereas the documentation reflects that
RANGE | VALID may be used.
Cause
1) Pre-processor action.
2) Not implemented in STD.CH
Work Around(s)
1 & 2) Edit MYNAME.CH lines per the following:
#command @
[RANGE
] [WHEN] ;
=> ;
SetPos(, ) ;;
AAdd( GetList, _GET_(, <(var)>,, ;
{|_1, _2| RangeCheck(_1, _2,,
=> ;
SetPos(
AAdd( GetList, _GET_(, <(var)>,
{|_1, _2| RangeCheck(_1, _2,
)}, <{when}>) )
#command @, SAY [PICTURE ] ;
GET [PICTURE] [RANGE ,
#command @
GET [PICTURE
] [WHEN] ;
=> ;
@, SAY [PICTURE ] ;;
@ Row(), Col()+1 GET [PICTURE] ;
[RANGE,
=> ;
@
@ Row(), Col()+1 GET [PICTURE
[RANGE
] [WHEN];
Note:
The documentation lists the useage as RANGE or VALID. The above two
changes bring the action into compliance with the documentation. The
following 4 changes to MYNAME.CH, submitted by John Beckner, will
permit both RANGE and VALID to be used concurrently:
#command @, ;
GET [PICTURE] [WHEN ] [RANGE ,
Note:
The documentation lists the useage as RANGE or VALID. The above two
changes bring the action into compliance with the documentation. The
following 4 changes to MYNAME.CH, submitted by John Beckner, will
permit both RANGE and VALID to be used concurrently:
#command @
GET [PICTURE
];
=>;
@, GET [PICTURE ] [WHEN ];
[VALID {|_1| _1 >= .and. _1 <=
=>;
@
[VALID {|_1| _1 >=
}]
#command @, ;
GET [PICTURE] [WHEN ];
[RANGE,
#command @
GET [PICTURE
[RANGE
VALID];
=>;
@, GET [PICTURE ] [WHEN ];
[VALID {|_1| () .and. _1 >= .and. _1 <=
=>;
@
[VALID {|_1| (
}]
#command @, SAY [PICTURE ];
GET [PICTURE] [WHEN ] [RANGE ,
#command @
GET [PICTURE
];
=>;
@, SAY [PICTURE ];;
@, col()+1 GET [PICTURE ] ];
[VALID {|_1| _1 >= .and. _1 <=
=>;
@
@
[VALID {|_1| _1 >=
}]
#command @, SAY [PICTURE ];
GET [PICTURE] [WHEN ];
[RANGE,
#command @
GET [PICTURE
[RANGE
VALID];
=>;
@, SAY [PICTURE ];;
@, col()+1 GET [PICTURE ] [WHEN ];
[VALID {|_1| () .and. _1 >= .and. _1 <=
=>;
@
@
[VALID {|_1| (
}]
seealso "STD.CH"
----------------------------------------------------------------------------
READ Command documentation.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
READ command documentaion re' Navigation Keys is incorrect.
Cause
Incorrect documentation.
Work Around(s)
1) Annotate your documentation as follows:
\hTable 4-9: READ Navigation Keys\e
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
\hKey Action\e
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Leftarrow Character left. Does not move cursor
to previous GET
Rightarrow, Ctrl-D Character right. Does not move cursor
to next GET
Ctrl-Leftarrow, Ctrl-Z Word left
Ctrl-Rightarrow, Ctrl-B Word right
Uparrow, Ctrl-E Previous GET
Dnarrow, Ctrl-X, Return, Ctrl-M Next GET
Home, Ctrl-A First character of GET
End, Ctrl-F Last character of GET
Ctrl-Home, Ctrl ] Beginning of first GET
* Ctrl-End, Ctrl-W Beginning of last GET
OR Terminate READ saving current GET
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
\hTable 4-12: READ Exit Keys\e
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
\hKey Action\e
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Ctrl-C, PgUp, PgDn Terminate READ saving current GET
* Ctrl-End, Ctrl-W Terminate READ saving current GET
OR Beginning of last GET
Ctrl-W, Ctrl-C, PgUp, PgDn Terminate READ saving current GET
Return, Ctrl-M Terminate READ from last GET
Esc Terminate READ without saving current GET
Uparrow Terminate READ from first GET if
READEXIT()=.T.
Dnarrow Terminate READ from last GET if
READEXIT()=.T.
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Note: Action of Ctrl-End, Ctrl-W is dependent upon whether or not
NOTDEF is defined in GETSYS.PRG.
seealso "GETSYS.PRG"
----------------------------------------------------------------------------
REINDEX Does not re-create index file header.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
REINDEX uses the existing index file header. If this is corrupted,
the resultant index file will also be invalid.
Cause
Unknown.
Work Around(s)
1) Use INDEX ON to create new indices. Some users have suggested
erasing the existing index file prior to INDEX ON usage.
seealso "INDICES" "PACK"
----------------------------------------------------------------------------
REPORT FORM Anomalies with Report forms.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
1) REPORT FORM will not display character report fields which are
4 or less characters, unless the field width is set to five.
2) The expression *** Total *** is appended to a report containing
numeric fields, whether or not totals are requested. If group
action is elected, ** Subtotal ** and * Subsubtotal * will
show in the report, whether or not totals are requested.
3) REPORT FORM will not print a report which does not contain at
least one character field.
Cause
1) FRMRUN.PRG. MLCOUNT() and MEMOLINE() do not work with a linelength
parameter less than 4.
2) FRMRUN.PRG programming error.
3) FRMRUN.PRG programming error.
Work Around(s)
1) Set report field width to 5 for character fields less than 5
characters OR re-program FRMRUN.PRG as follows:
XMEMOLINE Function:
IF nLineLength < 5
RETURN ( SUBSTR(cString, nLineLength * (nLineNumber-1) + 1,;
nLineLength) )
ELSE
RETURN( MEMOLINE( cString, nLineLength, nLineNumber, nTabSize,
lWrap ) )
ENDIF
XMLCOUNT Function:
IF nLineLength < 5
RETURN ( INT(LEN(cString) / nLineLength) + ;
IF( LEN(cstring) % nLineLength == 0, 0, 1 ) )
ELSE
RETURN( MLCOUNT( cString, nLineLength, nTabSize, lWrap ) )
ENDIF
2) Define a STATIC variable, say totalflag. Set this flag to .F. in
the __ReportForm function, after the LOCAL statements. Reset this
flag in the "// Column total elements" loop:
IF aReportData[RP_COLUMNS,nCol,RC_TOTAL] // reference
totalflag := .t. // add
FOR nGroup := 1 TO LEN(aReportTotals) // reference
and apply this flag as desired throughout the program. Compile
and link with your programs requiring this function.
3) Modify FRMRUN.PRG, about line 380, as follows:
// Only run through the record detail if this is NOT a summary report
IF !aReportData[ RP_SUMMARY ]
// Determine the max number of lines needed by each expression
nMaxLines := 1 // Changed from 0 to 1.
FOR nCol := 1 TO LEN(aReportData[RP_COLUMNS])
....
seealso "NOCONSOLE" "SET CONSOLE"
----------------------------------------------------------------------------
RESERVED WORDS Comments on reserved words.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
Numerous users have reported problems which have been traced to the
use of variable names which conflict with Clipper 5.0 commands or
statements.
Work Around(s)
Exercise caution in the choice of variable names. Remember, if your
variable name is four characters long and these characters match the
first four letters of a Clipper 5.0 or UDC command, you've got problems.
Just avoid this situation as well as names that match Clipper 5.0
commands and statements. Remember also, If you create a UDF of the same
name as a Clipper 5.0 function, its action will supersede Clipper's.
----------------------------------------------------------------------------
RESTORE ADDITIVE parameter unreliable.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
RESTORE FROM ADDITIVE may corrupt Public/Private variables.
Cause
Unknown. To be 'fixed' by Nantucket(r).
Work Around(s)
Use some other method of storing / retrieving variables; e.g., a .dbf
file.
----------------------------------------------------------------------------
RIGHT() Returns runtime error if embedded in a macro.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
When RIGHT(cVar) is included in a macro statement, a runtime
error occurs when the macro is expanded.
Cause
RIGHT(cVar) is a psuedo-function, created by directive in STD.CH; i.e.,
#translate Right(, ) => Substr( , -(), )
Work Around(s)
1) Create a real function, RIGHT(cVar), in your .PRG; e.g.,
FUNCTION ALLTRIM
PARAMETERS cVar, nVar
RETURN SUBSTR(cVar, -nVar, nVar)
2) Create the above function and compile using the /N option.
Include the resultant .OBJ file when linking.
Note: You may delete the #translate line from MYNAME.CH.
3) Create the above function and compile using the /N option.
Add the resultant .OBJ file to a .LIB file; e.g., EXTEND.LIB.
Note: You may delete the #translate line from MYNAME.CH.
4) Replace all RIGHT(cVar) references in your .PRG with
SUBSTR(cVar, -nVar, nVar).
Note
See Support Bulletin 4 in the NANFORUM Library.
seealso "ALLTRIM()" "STD.CH"
----------------------------------------------------------------------------
ROUND() Returns unpredictable results.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
The ROUND() function, like its predecessor in S'87, does not return
the desired result, in certain cases.
Cause
Unknown.
Work Around(s)
The following function seems to do the trick:
FUNCTION ROUNDIT(nNumber, nPlaces)
nPlaces := IF( nPlaces == NIL, 0, nPlaces )
RETURN IF(nNumber < 0.0, -1.0, 1.0) * ;
INT( ABS(nNumber) * 10 ^ nPlaces + 0.50 + 10 ^ -12 ) / 10 ^ nPlaces
Notes
FYI, here are some particularly unique numbers:
1.265 146.795 8.245 18.435 10.165 16.685
1.025 4.645 8.155 35.105 286.335 4.515 4.225
----------------------------------------------------------------------------
S50005.TXT Nantucket(r) - Things that you should know.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
Nantucket(r) has issued Support Bulletin, S50005.TXT, available in
NANFORUM LIB 16, which lists comments and workarounds concerning the
following subjects.
1) Duplicate fields in a COPY TO command
2) BEGIN SEQUENCE...END with multiple GETS
3) SET KEY and undefined functions
4) Translation rules
5) Displaying long gets
6) Omitting spaces before macros
7) TBrowse limit exceeded
8) Passing color strings by reference to SETCOLOR()
9) 00/00/00 is an invalid date
Cause
Unknown.
Work Around(s)
See subject document.
----------------------------------------------------------------------------
SET COLOUR Incorrect syntax in STD.CH.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
SET COLOUR directives in STD.CH need to be changed to enable
command recognition.
Cause
Incorrect programming.
Work Around(s)
Edit the SET COLOUR lines, in MYNAME.CH, to read as follows:
#command SET COLOUR TO [<*spec*>] => SetColor( # )
#command SET COLOUR TO ( ) => SetColor( )
seealso "STD.CH" "MISC"
----------------------------------------------------------------------------
SET CONSOLE OFF Turned back on by REPORT | LABEL FORM TO ...
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
When SET CONSOLE OFF is used prior to a REPORT | LABEL FORM
TO PRINT | FILE, it appears to be ignored.
Cause
Syntactical ommissions in documentation. Note: FRMRUN.PRG | LBLRUN.PRG
programming uses the presence | absence of a NOCONSOLE parameter to
SET CONSOLE accordingly.
Work Around(s)
1) Change documentation to reflect addition of this parameter:
REPORT | LABEL FORM [TO PRINTER] [TO FILE ][]
[WHILE] [FOR ][PLAIN | HEADING ]
[NOEJECT] [SUMMARY] [NOCONSOLE]
2) Use NOCONSOLE in Clipper 5.0 programs.
3) Change the following lines:
FRMRUN.PRG:
* lConsoleOn := SET( _SET_CONSOLE, !lNoConsole )
lConsoleOn := IF( !lNoConsole, SET(_SET_CONSOLE),;
SET(_SET_CONSOLE, .F.) )
LBLRUN.PRG
* LOCAL lConsoleOn := .T. // CONSOLE status
LOCAL lConsoleOn // CONSOLE status
* IF lConsole == NIL
* lConsole := .T.
* ENDIF
* IF lConsole // To the screen
* lConsoleOn := SET( _SET_CONSOLE, lConsole )
* ENDIF
lConsoleOn := IF( !lNoConsole, SET(_SET_CONSOLE),;
SET(_SET_CONSOLE, .F.) )
Compile and link these programs with your program when these
functions are required.
seealso "NOCONSOLE"
----------------------------------------------------------------------------
SET RELATION Anomalies reported using this command.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
SET RELATION TO ... INTO ... The following two anomalies have been
reported:
1) Corruption of a child index when replacing non-key child fields.
2) Deleted records are not recognized as deleted in the child.
Cause
Unknown.
Work Around(s) Note: Assumes Parent is selected.
1) Select Child; SET ORDER TO 0; Replace; SET ORDER TO 1; Select Parent.
2) Select Child; SEEK; select Parent - the SEEK command differentiates
between deleted and non-deleted records.
seealso "INDICES"
----------------------------------------------------------------------------
SET TYPEAHEAD Limited to 15 characters. ~
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
Various user tests have shown that setting the
parameter greater than 15 does not increase the size of the buffer.
Cause
Unknown.
Work Around
Unknown.
----------------------------------------------------------------------------
SKIP ALIAS case mis-translated. ~
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
SKIP ALIAS (nWorkArea) is translated by the pre-processor to:
__dbSkip( alias (nWorkArea) ) which is incorrect.
Cause
Ordering of SKIP translations in STD.CH
Work Around
Change the order of the SKIP translations in MYNAME.CH as follows:
// old
// #command SKIP ALIAS => -> ( __dbSkip(1) )
// #command SKIP ALIAS => -> ( __dbSkip() )
// #command SKIP => __dbSkip( )
// #command SKIP => __dbSkip(1)
// new
#command SKIP => __dbSkip( )
#command SKIP ALIAS => -> ( __dbSkip(1) )
#command SKIP ALIAS => -> ( __dbSkip() )
#command SKIP => __dbSkip(1)
SKIP ALIAS (nWorkArea) will then be correctly translated to:
(nWorkArea) -> ( __dbSkip(1) )
----------------------------------------------------------------------------
SORT ON Produces incorrect result with negative numbers.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
When SORT is used on a number field, the result is incorrect if the
file to be sorted contains negative numbers.
Cause
Unknown.
Work Around(s)
Unknown. Suggest using the function presented under INDICES to index
the file and then use COPY.
seealso "INDICES"
----------------------------------------------------------------------------
STD.CH Comments re' header file STD.CH
STD.CH is a header file. The pseudo-functions therein are hard coded
in CLIPPER.EXE; i.e., STD.CH is not automatically 'included' when a
.PRG is compiled but its pseudo-functions are.
It is suggested that users may wish to copy STD.CH to another file;
e.g., MYNAME.CH; make changes as desired to MYNAME.CH, and force
the inclusion of MYNAME.CH at compile time with the /UMYNAME.CH
option. A header file included in this fashion will take precedence
over the STD.CH pseudo-functions hard coded in CLIPPER.EXE.
----------------------------------------------------------------------------
TEXT/ENDTEXT Space after ENDTEXT causes compiler error.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
If source code has a space following the ENDTEXT, the compiler will
produce an error. The error may be C2033, Missing ENDTEXT or possibly,
C3001 Memory Overbooked.
Cause
Unknown.
Work Around(s)
Remove white space after ENDTEXT
----------------------------------------------------------------------------
TONE/ISPRINTER Conflict with Tom Rettig Library, TR.LIB
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
Inclusion of the TONE() function in a program linked with TR.LIB,
using RTLINK, produces an undefined symbol error; e.g., the following
program:
? isprinter()
? tone()
Cause
Unknown.
Work Around(s)
Remove isprint from TR.LIB using a library manager; e.g., LIB.EXE.
Notes
Mr. Rettig will 'fix', subsequent to Nantucket's promised 'fix disk'.
----------------------------------------------------------------------------
TYPE() Comments on Clipper 5.0 return values.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
1) TYPE("LocalVar" or "StaticVar") returns 'U'.
2) TYPE("PrivateObject") returns 'A'.
Cause
1) TYPE("cVar") uses macro expansion to evaluate variables.
2) Unknown.
Work Around(s)
Use VALTYPE(var)
Notes
TYPE("Undeclared_Var") Returns 'U'
VALTYPE("Undeclared_Var") Returns runtime error
----------------------------------------------------------------------------
USE READONLY Network reports file opened in R/W mode.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
A user has reported that his network reported file opened in R/W mode,
despite use of READONLY parameter. This has been verified by Nantucket(r)
Cause
Unknown.
Work Around(s)
To be supplied by Nantucket(r).
----------------------------------------------------------------------------
// Undocumented feature.
Clipper Version 1.03 dtd 09/15/90.
Feature Statement
1) //INFO Undocumented diagnostic feature. Create a program with the
single command 'wait'. Compile and link. Execute the program with the
parameter //INFO. This will illustrate the type of diagnostic
information available; e.g.,
Clipper (R) 5.0 Rev. 1.03 USASCII
DS=4A80:0000 DS avail=40KB OS avail=277KB EMM avail=1536KB
Press any key to continue...(Fixed Heap=21KB)
2) // can also be used to SET CLIPPER parameters from the command line;
e.g., Program //E0 //F31.
Cause
Documentation ommission.
Work Around(s)
Annotate your documentation.
----------------------------------------------------------------------------
\INCLUDE Comments on \CLIPPER5\INCLUDE\ Files.
The following header files in the \CLIPPER5\INCLUDE\ sub-directory
should be included in .PRG files which need them.
ACHOICE.CH MEMOEDIT.CH
BOX.CH SET.CH
DBEDIT.CH SETCURS.CH
DBSTRUCT.CH EXTEND.H (5.0 with C)
DIRECTRY.CH EXTENDA.MAC (A'86)
ERROR.CH EXTENDA.INC (S'87)
FILEIO.CH EXTASM.INC (C)
INKEY.CH
A special case is the STD.CH header file, also in this sub-directory.
seealso "STD.CH"
----------------------------------------------------------------------------
\LIB Comments on \CLIPPER5\LIB\ Files. ~
File notes:
CLIPPER LIB Automatically linked with Rtlink unless overridden.
DBFNTX LIB Automatically linked with Rtlink unless overridden.
EXTEND LIB Automatically linked with Rtlink unless overridden.
TERMINAL LIB Included in BASE50.PLL
_VDISPLAY.........SCR
_VKEYBOARD........KEYBD
_VMOUSE...........MOUSE
EXTENDLI ORG
CLD LIB
RTLUTILS LIB
Function Location Changes
S'87 EXTEND.LIB 5.0 LOCATION
AFIELDS CLIPPER.LIB
ALLTRIM CLIPPER.EXE (STD.CH)
HEADER CLIPPER.LIB
LEFT CLIPPER.LIB
LUPDATE CLIPPER.LIB
NEXTKEY CLIPPER.LIB
RECSIZE CLIPPER.LIB
RESTSCREEN CLIPPER.LIB
RIGHT CLIPPER.EXE (STD.CH)
SAVESCREEN CLIPPER.LIB
SETCOLOR CLIPPER.LIB
VERSION CLIPPER.LIB
Lo-level file routines
The following functions are in EXTEND.LIB, not CLIPPER.LIB as stated
in the documentation:
FCLOSE FCREATE FERASE FERROR FOPEN
FREAD FREADSTR FRENAME FSEEK FWRITE
----------------------------------------------------------------------------
\SOURCE\SYS Comments on \CLIPPER5\SOURCE\SYS\ Files.
The following files in the \CLIPPER5\SOURCE\SYS sub-directory
are hard coded in CLIPPER.EXE. They may be modified, compiled
and linked to make changes.
FRMDEF.CH LBLBACK.PRG
FRMBACK.PRG LBLRUN.PRG
FRMRUN.PRG ERRORSYS.PRG
LBLDEF.CH GETSYS.PRG
seealso "STD.CH"
----------------------------------------------------------------------------
READ Command documentation.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
READ command documentaion re' Navigation Keys is incorrect.
Cause
Incorrect documentation.
Work Around(s)
1) Annotate your documentation as follows:
\hTable 4-9: READ Navigation Keys\e
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
\hKey Action\e
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Leftarrow Character left. Does not move cursor
to previous GET
Rightarrow, Ctrl-D Character right. Does not move cursor
to next GET
Ctrl-Leftarrow, Ctrl-Z Word left
Ctrl-Rightarrow, Ctrl-B Word right
Uparrow, Ctrl-E Previous GET
Dnarrow, Ctrl-X, Return, Ctrl-M Next GET
Home, Ctrl-A First character of GET
End, Ctrl-F Last character of GET
Ctrl-Home, Ctrl ] Beginning of first GET
* Ctrl-End, Ctrl-W Beginning of last GET
OR Terminate READ saving current GET
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
\hTable 4-12: READ Exit Keys\e
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
\hKey Action\e
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Ctrl-C, PgUp, PgDn Terminate READ saving current GET
* Ctrl-End, Ctrl-W Terminate READ saving current GET
OR Beginning of last GET
Ctrl-W, Ctrl-C, PgUp, PgDn Terminate READ saving current GET
Return, Ctrl-M Terminate READ from last GET
Esc Terminate READ without saving current GET
Uparrow Terminate READ from first GET if
READEXIT()=.T.
Dnarrow Terminate READ from last GET if
READEXIT()=.T.
ÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ
Note: Action of Ctrl-End, Ctrl-W is dependent upon whether or not
NOTDEF is defined in GETSYS.PRG.
seealso "GETSYS.PRG"
----------------------------------------------------------------------------
REINDEX Does not re-create index file header.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
REINDEX uses the existing index file header. If this is corrupted,
the resultant index file will also be invalid.
Cause
Unknown.
Work Around(s)
1) Use INDEX ON to create new indices. Some users have suggested
erasing the existing index file prior to INDEX ON usage.
seealso "INDICES" "PACK"
----------------------------------------------------------------------------
REPORT FORM Anomalies with Report forms.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
1) REPORT FORM will not display character report fields which are
4 or less characters, unless the field width is set to five.
2) The expression *** Total *** is appended to a report containing
numeric fields, whether or not totals are requested. If group
action is elected, ** Subtotal ** and * Subsubtotal * will
show in the report, whether or not totals are requested.
3) REPORT FORM will not print a report which does not contain at
least one character field.
Cause
1) FRMRUN.PRG. MLCOUNT() and MEMOLINE() do not work with a linelength
parameter less than 4.
2) FRMRUN.PRG programming error.
3) FRMRUN.PRG programming error.
Work Around(s)
1) Set report field width to 5 for character fields less than 5
characters OR re-program FRMRUN.PRG as follows:
XMEMOLINE Function:
IF nLineLength < 5
RETURN ( SUBSTR(cString, nLineLength * (nLineNumber-1) + 1,;
nLineLength) )
ELSE
RETURN( MEMOLINE( cString, nLineLength, nLineNumber, nTabSize,
lWrap ) )
ENDIF
XMLCOUNT Function:
IF nLineLength < 5
RETURN ( INT(LEN(cString) / nLineLength) + ;
IF( LEN(cstring) % nLineLength == 0, 0, 1 ) )
ELSE
RETURN( MLCOUNT( cString, nLineLength, nTabSize, lWrap ) )
ENDIF
2) Define a STATIC variable, say totalflag. Set this flag to .F. in
the __ReportForm function, after the LOCAL statements. Reset this
flag in the "// Column total elements" loop:
IF aReportData[RP_COLUMNS,nCol,RC_TOTAL] // reference
totalflag := .t. // add
FOR nGroup := 1 TO LEN(aReportTotals) // reference
and apply this flag as desired throughout the program. Compile
and link with your programs requiring this function.
3) Modify FRMRUN.PRG, about line 380, as follows:
// Only run through the record detail if this is NOT a summary report
IF !aReportData[ RP_SUMMARY ]
// Determine the max number of lines needed by each expression
nMaxLines := 1 // Changed from 0 to 1.
FOR nCol := 1 TO LEN(aReportData[RP_COLUMNS])
....
seealso "NOCONSOLE" "SET CONSOLE"
----------------------------------------------------------------------------
RESERVED WORDS Comments on reserved words.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
Numerous users have reported problems which have been traced to the
use of variable names which conflict with Clipper 5.0 commands or
statements.
Work Around(s)
Exercise caution in the choice of variable names. Remember, if your
variable name is four characters long and these characters match the
first four letters of a Clipper 5.0 or UDC command, you've got problems.
Just avoid this situation as well as names that match Clipper 5.0
commands and statements. Remember also, If you create a UDF of the same
name as a Clipper 5.0 function, its action will supersede Clipper's.
----------------------------------------------------------------------------
RESTORE ADDITIVE parameter unreliable.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
RESTORE FROM
Cause
Unknown. To be 'fixed' by Nantucket(r).
Work Around(s)
Use some other method of storing / retrieving variables; e.g., a .dbf
file.
----------------------------------------------------------------------------
RIGHT() Returns runtime error if embedded in a macro.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
When RIGHT(cVar) is included in a macro statement, a runtime
error occurs when the macro is expanded.
Cause
RIGHT(cVar) is a psuedo-function, created by directive in STD.CH; i.e.,
#translate Right(
Work Around(s)
1) Create a real function, RIGHT(cVar), in your .PRG; e.g.,
FUNCTION ALLTRIM
PARAMETERS cVar, nVar
RETURN SUBSTR(cVar, -nVar, nVar)
2) Create the above function and compile using the /N option.
Include the resultant .OBJ file when linking.
Note: You may delete the #translate line from MYNAME.CH.
3) Create the above function and compile using the /N option.
Add the resultant .OBJ file to a .LIB file; e.g., EXTEND.LIB.
Note: You may delete the #translate line from MYNAME.CH.
4) Replace all RIGHT(cVar) references in your .PRG with
SUBSTR(cVar, -nVar, nVar).
Note
See Support Bulletin 4 in the NANFORUM Library.
seealso "ALLTRIM()" "STD.CH"
----------------------------------------------------------------------------
ROUND() Returns unpredictable results.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
The ROUND() function, like its predecessor in S'87, does not return
the desired result, in certain cases.
Cause
Unknown.
Work Around(s)
The following function seems to do the trick:
FUNCTION ROUNDIT(nNumber, nPlaces)
nPlaces := IF( nPlaces == NIL, 0, nPlaces )
RETURN IF(nNumber < 0.0, -1.0, 1.0) * ;
INT( ABS(nNumber) * 10 ^ nPlaces + 0.50 + 10 ^ -12 ) / 10 ^ nPlaces
Notes
FYI, here are some particularly unique numbers:
1.265 146.795 8.245 18.435 10.165 16.685
1.025 4.645 8.155 35.105 286.335 4.515 4.225
----------------------------------------------------------------------------
S50005.TXT Nantucket(r) - Things that you should know.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
Nantucket(r) has issued Support Bulletin, S50005.TXT, available in
NANFORUM LIB 16, which lists comments and workarounds concerning the
following subjects.
1) Duplicate fields in a COPY TO command
2) BEGIN SEQUENCE...END with multiple GETS
3) SET KEY and undefined functions
4) Translation rules
5) Displaying long gets
6) Omitting spaces before macros
7) TBrowse limit exceeded
8) Passing color strings by reference to SETCOLOR()
9) 00/00/00 is an invalid date
Cause
Unknown.
Work Around(s)
See subject document.
----------------------------------------------------------------------------
SET COLOUR Incorrect syntax in STD.CH.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
SET COLOUR directives in STD.CH need to be changed to enable
command recognition.
Cause
Incorrect programming.
Work Around(s)
Edit the SET COLOUR lines, in MYNAME.CH, to read as follows:
#command SET COLOUR TO [<*spec*>] => SetColor( #
#command SET COLOUR TO (
seealso "STD.CH" "MISC"
----------------------------------------------------------------------------
SET CONSOLE OFF Turned back on by REPORT | LABEL FORM TO ...
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
When SET CONSOLE OFF is used prior to a REPORT | LABEL FORM
TO PRINT | FILE, it appears to be ignored.
Cause
Syntactical ommissions in documentation. Note: FRMRUN.PRG | LBLRUN.PRG
programming uses the presence | absence of a NOCONSOLE parameter to
SET CONSOLE accordingly.
Work Around(s)
1) Change documentation to reflect addition of this parameter:
REPORT | LABEL FORM
[WHILE
[NOEJECT] [SUMMARY] [NOCONSOLE]
2) Use NOCONSOLE in Clipper 5.0 programs.
3) Change the following lines:
FRMRUN.PRG:
* lConsoleOn := SET( _SET_CONSOLE, !lNoConsole )
lConsoleOn := IF( !lNoConsole, SET(_SET_CONSOLE),;
SET(_SET_CONSOLE, .F.) )
LBLRUN.PRG
* LOCAL lConsoleOn := .T. // CONSOLE status
LOCAL lConsoleOn // CONSOLE status
* IF lConsole == NIL
* lConsole := .T.
* ENDIF
* IF lConsole // To the screen
* lConsoleOn := SET( _SET_CONSOLE, lConsole )
* ENDIF
lConsoleOn := IF( !lNoConsole, SET(_SET_CONSOLE),;
SET(_SET_CONSOLE, .F.) )
Compile and link these programs with your program when these
functions are required.
seealso "NOCONSOLE"
----------------------------------------------------------------------------
SET RELATION Anomalies reported using this command.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
SET RELATION TO ... INTO ... The following two anomalies have been
reported:
1) Corruption of a child index when replacing non-key child fields.
2) Deleted records are not recognized as deleted in the child.
Cause
Unknown.
Work Around(s) Note: Assumes Parent is selected.
1) Select Child; SET ORDER TO 0; Replace; SET ORDER TO 1; Select Parent.
2) Select Child; SEEK; select Parent - the SEEK command differentiates
between deleted and non-deleted records.
seealso "INDICES"
----------------------------------------------------------------------------
SET TYPEAHEAD Limited to 15 characters. ~
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
Various user tests have shown that setting the
parameter greater than 15 does not increase the size of the buffer.
Cause
Unknown.
Work Around
Unknown.
----------------------------------------------------------------------------
SKIP ALIAS
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
SKIP ALIAS (nWorkArea) is translated by the pre-processor to:
__dbSkip( alias (nWorkArea) ) which is incorrect.
Cause
Ordering of SKIP translations in STD.CH
Work Around
Change the order of the SKIP translations in MYNAME.CH as follows:
// old
// #command SKIP ALIAS => -> ( __dbSkip(1) )
// #command SKIP
// #command SKIP
// #command SKIP => __dbSkip(1)
// new
#command SKIP
#command SKIP ALIAS => -> ( __dbSkip(1) )
#command SKIP
#command SKIP => __dbSkip(1)
SKIP ALIAS (nWorkArea) will then be correctly translated to:
(nWorkArea) -> ( __dbSkip(1) )
----------------------------------------------------------------------------
SORT ON
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
When SORT is used on a number field, the result is incorrect if the
file to be sorted contains negative numbers.
Cause
Unknown.
Work Around(s)
Unknown. Suggest using the function presented under INDICES to index
the file and then use COPY.
seealso "INDICES"
----------------------------------------------------------------------------
STD.CH Comments re' header file STD.CH
STD.CH is a header file. The pseudo-functions therein are hard coded
in CLIPPER.EXE; i.e., STD.CH is not automatically 'included' when a
.PRG is compiled but its pseudo-functions are.
It is suggested that users may wish to copy STD.CH to another file;
e.g., MYNAME.CH; make changes as desired to MYNAME.CH, and force
the inclusion of MYNAME.CH at compile time with the /UMYNAME.CH
option. A header file included in this fashion will take precedence
over the STD.CH pseudo-functions hard coded in CLIPPER.EXE.
----------------------------------------------------------------------------
TEXT/ENDTEXT Space after ENDTEXT causes compiler error.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
If source code has a space following the ENDTEXT, the compiler will
produce an error. The error may be C2033, Missing ENDTEXT or possibly,
C3001 Memory Overbooked.
Cause
Unknown.
Work Around(s)
Remove white space after ENDTEXT
----------------------------------------------------------------------------
TONE/ISPRINTER Conflict with Tom Rettig Library, TR.LIB
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
Inclusion of the TONE() function in a program linked with TR.LIB,
using RTLINK, produces an undefined symbol error; e.g., the following
program:
? isprinter()
? tone()
Cause
Unknown.
Work Around(s)
Remove isprint from TR.LIB using a library manager; e.g., LIB.EXE.
Notes
Mr. Rettig will 'fix', subsequent to Nantucket's promised 'fix disk'.
----------------------------------------------------------------------------
TYPE() Comments on Clipper 5.0 return values.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
1) TYPE("LocalVar" or "StaticVar") returns 'U'.
2) TYPE("PrivateObject") returns 'A'.
Cause
1) TYPE("cVar") uses macro expansion to evaluate variables.
2) Unknown.
Work Around(s)
Use VALTYPE(var)
Notes
TYPE("Undeclared_Var") Returns 'U'
VALTYPE("Undeclared_Var") Returns runtime error
----------------------------------------------------------------------------
USE READONLY Network reports file opened in R/W mode.
Clipper Version 1.03 dtd 09/15/90.
Problem Statement
A user has reported that his network reported file opened in R/W mode,
despite use of READONLY parameter. This has been verified by Nantucket(r)
Cause
Unknown.
Work Around(s)
To be supplied by Nantucket(r).
----------------------------------------------------------------------------
//
Clipper Version 1.03 dtd 09/15/90.
Feature Statement
1) //INFO Undocumented diagnostic feature. Create a program with the
single command 'wait'. Compile and link. Execute the program with the
parameter //INFO. This will illustrate the type of diagnostic
information available; e.g.,
Clipper (R) 5.0 Rev. 1.03 USASCII
DS=4A80:0000 DS avail=40KB OS avail=277KB EMM avail=1536KB
Press any key to continue...(Fixed Heap=21KB)
2) // can also be used to SET CLIPPER parameters from the command line;
e.g., Program //E0 //F31.
Cause
Documentation ommission.
Work Around(s)
Annotate your documentation.
----------------------------------------------------------------------------
\INCLUDE Comments on \CLIPPER5\INCLUDE\ Files.
The following header files in the \CLIPPER5\INCLUDE\ sub-directory
should be included in .PRG files which need them.
ACHOICE.CH MEMOEDIT.CH
BOX.CH SET.CH
DBEDIT.CH SETCURS.CH
DBSTRUCT.CH EXTEND.H (5.0 with C)
DIRECTRY.CH EXTENDA.MAC (A'86)
ERROR.CH EXTENDA.INC (S'87)
FILEIO.CH EXTASM.INC (C)
INKEY.CH
A special case is the STD.CH header file, also in this sub-directory.
seealso "STD.CH"
----------------------------------------------------------------------------
\LIB Comments on \CLIPPER5\LIB\ Files. ~
File notes:
CLIPPER LIB Automatically linked with Rtlink unless overridden.
DBFNTX LIB Automatically linked with Rtlink unless overridden.
EXTEND LIB Automatically linked with Rtlink unless overridden.
TERMINAL LIB Included in BASE50.PLL
_VDISPLAY.........SCR
_VKEYBOARD........KEYBD
_VMOUSE...........MOUSE
EXTENDLI ORG
CLD LIB
RTLUTILS LIB
Function Location Changes
S'87 EXTEND.LIB 5.0 LOCATION
AFIELDS CLIPPER.LIB
ALLTRIM CLIPPER.EXE (STD.CH)
HEADER CLIPPER.LIB
LEFT CLIPPER.LIB
LUPDATE CLIPPER.LIB
NEXTKEY CLIPPER.LIB
RECSIZE CLIPPER.LIB
RESTSCREEN CLIPPER.LIB
RIGHT CLIPPER.EXE (STD.CH)
SAVESCREEN CLIPPER.LIB
SETCOLOR CLIPPER.LIB
VERSION CLIPPER.LIB
Lo-level file routines
The following functions are in EXTEND.LIB, not CLIPPER.LIB as stated
in the documentation:
FCLOSE FCREATE FERASE FERROR FOPEN
FREAD FREADSTR FRENAME FSEEK FWRITE
----------------------------------------------------------------------------
\SOURCE\SYS Comments on \CLIPPER5\SOURCE\SYS\ Files.
The following files in the \CLIPPER5\SOURCE\SYS sub-directory
are hard coded in CLIPPER.EXE. They may be modified, compiled
and linked to make changes.
FRMDEF.CH LBLBACK.PRG
FRMBACK.PRG LBLRUN.PRG
FRMRUN.PRG ERRORSYS.PRG
LBLDEF.CH GETSYS.PRG
Very nice! Thank you for this wonderful archive. I wonder why I found it only now. Long live the BBS file archives!
This is so awesome! 😀 I’d be cool if you could download an entire archive of this at once, though.
But one thing that puzzles me is the “mtswslnkmcjklsdlsbdmMICROSOFT” string. There is an article about it here. It is definitely worth a read: http://www.os2museum.com/wp/mtswslnk/