Added some C code to speed up the array sort during startup.
---
Click! can now incorporate a Table and Index cross reference into each
source module header, and can create the list of all modules using files
and indexes.
The following CLICK.INI entries control this behaviour.
TABLE_XREF_FILE=TBL_CROS.TXT
// options are YES, NO
// please note that you must set ADD_CLICK_HEADERS=YES
TABLE_XREF_INTO_SOURCE=YES
// options are YES, NO
// please note that you must set ADD_CLICK_HEADERS=YES
INDEX_XREF_INTO_SOURCE=YES
---
Click! now recognizes when a Clipper FUNCTION or COMMAND is being used
as something other than a function or command.
New rules are:
If a Clipper function is not followed by a (, then it not evaluated as a
Clipper function.
/*
I suppose that means I should convert:
DO SOMEFUNC with a, b, c
...to...
SOMEFUNC( a, b, c )
...in PASS 1
*/
If a Clipper command is found within () or {} or [], then it not
evaluated as a Clipper command.
This will allow code like ...
#define TOP a[1]
#define LEFT a[2]
#define BOTTOM a[3]
#define RIGHT a[4]
aadd(envSTAck_, { row(), col(), setcursor(curs_size), setcolor(newcolor), ;
if(valtype(coords) == "A", { TOP, LEFT, BOTTOM, RIGHT, ;
savescreen(TOP, LEFT, BOTTOM, RIGHT) }, NIL) } )
... to continue to work, even though I find using reserved words as
variables or manifest constants an undesirable style ...
Also, prequalifying what can't be a function or a command has led to a
significant reduction in processing time!
---
The Aligner now recognize and align arrays destined for DBCREATE(),
so that code like...
somevar := {{ 'XXX', 'C', 123, 0 },;
{ 'YYYYY', 'C', 99, 0 },;
{'Z','D',8,0},;
{ 'AFIELD', 'C', 2, 0 } }
... ends up looking like ...
somevar := { { 'XXX' , 'C', 123, 0 }, ;
{ 'YYYYY' , 'C', 99, 0 }, ;
{ 'Z' , 'D', 8, 0 }, ;
{ 'AFIELD', 'C', 2, 0 } }
---
Click! now understands when [ and ] are being used as string delimiters.
So...
x := [asdfasdf'"asdf]
? [this works'"]
x := somefunc( [this works, too] )
...will all be recognized as a string being delimited by [].
---
Click! can now convert && to // when found as a comment marker.
( in CLICK.INI )
CONVERT_&&_TO_//=YES
So...
if x && test
...becomes...
if x // test
...but...
if x &&&&&&&& test
...becomes...
if x //&&&&&& test
---
STORE conversion modified to eliminate this...
for L_count = 1 to 5
store " " to Em_Benefit[L_count,1]
store 0.00 to Em_Benefit[L_count,2]
next
from becoming ...
for L_count = 1 to 5
Em_Benefit[ L_count := 1 ] := " "
Em_Benefit[ L_count := 2 ] := 0.00
next
Now, it correctly identifies internal commas and processes like:
for L_count = 1 to 5
Em_Benefit[ L_count, 1 ] := " "
Em_Benefit[ L_count, 2 ] := 0.00
next
---
Click! has an option to end it's run by returning to DOS with the
original screen and color setting, pausing for a keystroke to end the
run.
RESTORE_SCREEN_ON_EXIT=YES