This document is a record of the changes made to A-Shell 6.5,
beginning with build 1600 of May 2017. Changes to the previous versions of
A-Shell can be found with their respective software releases on the A-Shell downloads page.
Organization
The notes in this document are shown twice:
• Notes by Version and Date: Includes all A-Shell changes regardless
of type or significance.
• Notes by Subject: Does not include bug fixes.
Navigation
Any time a topic in the table of contents (at left) displays
a little book or folder next to it, click on the topic or mark to expand the
table of contents and see the individual notes.
Text Colors
In the "Notes by version and date" section, the
authors use text colors to keep track of the status of the different
development notes:
• Items
that have been transferred to the A-Shell documentation set (blue)—i.e., the
main A-Shell documentation set has been updated with these changes.
• Items
such as bug fixes and minor revisions, which are not being so transferred (teal).
• Items which need to be
transferred to the main A-Shell documentation but which have not yet gotten
there (black).
A-Shell Release
Notes Version 6.5.1639.2 (26 Jun 2018) |
||
1639.2.3 |
Fix |
SET.LIT 1.2(163): eliminate
some trace messages left in while testing the tracing related enhancements in
SET.LIT 1.2(162). |
1639.2.2 |
Fix |
Compiler edit 863: trace
statements involving more than one comma-delimited term, of which at least
one was a quoted string constant, where being formatted in a confusing way. |
1639.2.1 |
Revise |
Tracing refinement: remove limit on individual output
message length when outputting to the terminal or to a specific file (see SET
TRACE OUTPUT below). Previously the limit was 800 bytes. Note that the
compiler still imposes a limit of 16K per statement, and the debug message
window and ashlog.log outputs impose much smaller limits of their own. |
A-Shell Release
Notes Version 6.5.1639.1 (25 Jun 2018) |
||
1639.1 |
Fix |
AUI: Click strings using the
prefix chr(7)+chr(250) were not being recognized by XTREE. Problem introduced
after 6.5.1627. |
A-Shell Release
Notes Version 6.5.1639.0 (24 Jun 2018) |
||
1639.0.8 |
New |
Language runtime refinement: REF _Ref517798057 \h Substring Assignment |
1639.0.7 |
New |
Compiler enhancement, edit 862: support the /NOTRC option
(or -notrc when using the standalone compiler executable). |
1639.0.6 |
New |
COMPIL.LIT/OCMPIL.LIT/COMPLP.LIT 1.1(135) enhancement: support
/NOTRC switch to ignore all trace related statements during compilation
(++pragma TRACE_xxx, TRACE.xxx, DEBUG.xxx).
|
1639.0.5 |
New |
REF
_Ref517798176 \h ++PRAGMAs
Support Enhanced Tracing |
1639.0.4 |
New |
REF
_Ref517795036 \h Expanded
DEBUG Options in SET.LIT |
1639.0.3 |
New |
Tracing enhancement: new macro $L may be inserted in the
trace message to display the current location counter (as a six digit hex
number, matching the format used in the LSX file). |
1639.0.2 |
New |
REF
_Ref517794966 \h Expanded
xxxxxx.PRINT and xxxxxx.PAUSE statements |
1639.0.1 |
New |
New A-Shell/Windows command line switch: -ntts . This has
the same effect as adding OPTIONS=NTTS to the miame.ini file, but is much
more convenient in situations where you need that feature for just a couple
of sessions (such as for services). |
Compiler/language (edit 861) and runtime tracing
enhancement: syntax for the xxxxxx.PRINT and xxxxxx.PAUSE statements (eg.
TRACE.PRINT, DEBUG.PAUSE) expanded to support a debug level, selection tags,
multiple expressions, and automatic labeling of traced variables.
<TRACE|DEBUG>.<PRINT|PAUSE> {({level},{tags})}
expr1{,expr2,...,exprN}
The optional (level, tags) clause may be used to specify the
minimum debug level needed to activate this trace, and/or a list of tags that
can be used for selecting or filtering which of these statements is enabled at
runtime. If not specified, the default level is 0 for TRACE.xxx and 1 for
DEBUG.xxx. Tags, if specified, must be in the form of a string literal (quoted)
comma-delimited list of case (not case sensitive). Some examples:
debug.print "var1"=var1
trace.print (1) "var1"=var1
debug.print ("beta,i/o,2.0") var3,var4
trace.pause (27,"fn'foo,alpha")
"total="+totx
The first example demonstrates the prior syntax and the fact
that the new clauses are entirely optional.
The second example uses the new clause to specify a debug
level of 1, which makes the trace.print equivalent to debug.print (illustrating
that the only difference between trace.xxx and debug.xxx is the default debug
level). It also illustrates that you can specify just the level without the
tags argument.
The third example illustrates the use of a tags list without
an explicit level (which defaults to 1 for debug.print). It also illustrates
the use of multiple values (i.e. a comma delimited list of values, as allowed
in a normal PRINT statement). Although not obvious from the syntax, another
enhancement in this release is that any variable appearing by itself as a term
in the expression list will automatically be prefixed by a label indicating the
name of the variable being traced. In other words, if var3=30 and
var4="foo", then the trace will look something like: "var3=[30],
var4=[foo]". Note that these automatic print labels are only created for
variables that appear as terms by themselves in the list of expressions to
trace.
The last example shows the case where both a level (27) and
a set of tags "fn'foo,alpha" are specified. Note that the totx in the
expression list will not get an automatic label because it is already part of a
string expression.
Backwards compatibility note: while the new tracing
capabilities do rely partly on updates to the runtime system, programs using
the new syntax and compiled with the new compiler will remain compatible with
older runtimes. (The output will not be as pretty, and the level and tags
arguments will display at the end of each output line, but they won't otherwise
interfere.)
Tracing enhancement: SET.LIT 1.2(162) now supports expanded
DEBUG options in order to take advantage of the expanded trace statement
options:
Option |
Description |
.SET DEBUG ? |
Show syntax options |
.SET DEBUG <level> |
Set debug level |
.SET DEBUG MIN <level> |
Set minimum debug level |
.SET DEBUG TAGS {+}tag1,...tagn |
Set tags to select/filter traces |
.SET DEBUG OUTPUT <dest> |
Specify where trace output goes |
The standard SET DEBUG <level> command is unchanged,
except that the maximum has been increased from 9 to 2^31. Note that except for
programs which explicitly map a variable named DEBUG, the runtime system will recognize
DEBUG as a special system variable whose value is that specified by the SET
DEBUG <level> command.
The DEBUG MIN option allows you set a minimum level, such
that only those trace/debug statements specifying a level >= the DEBUG MIN
level and <= the DEBUG level will be activated. The idea here is to allow
different developers to set exclusive ranges so that they can easily enable
their own debug traces independent of others'. Or to use different ranges for different
modules (although the tags might be more suited for that).
The DEBUG TAGS option allows you to specify a list of tags
(comma delimited) to be matched up with the tags in the actual trace/debug
statements for the purposes of filtering which will be enabled. Tags are not
case sensitive. If the list starts with "+", then individual traces
will be enabled if they meet the debug level criteria OR they contain a
matching tag. Otherwise statements to be enabled must match both criteria, i.e.
satisfy the level AND match one of the tags.
Note that setting the DEBUG TAGS list to "" is equivalent to a
wildcard matching all tags. But within the trace/debug statements themselves,
and empty tag list matches only an empty DEBUG TAGS list.
To select statements by level without regard to tags, set
the DEBUG TAGS to "". To select statements by tags without regard to
level, specify a DEBUG TAGS list starting with "+". (To exclude
traces that don't contain matching tags, use the DEBUG and/or DEBUG MIN levels
to make sure that they won't match up with any of your traces. For example, if
all of your trace statements are of the form DEBUG.xxx, instead of TRACE.xxx,
or all of them explicitly specify a non-zero level, then just use SET NODEBUG
to make sure that none are selected on the basis of the debug level.
Alternatively, set the DEBUG MIN level higher than the DEBUG level.)
Note that all TRACE.xxx and DEBUG.xxx statements
automatically have a special tag associated with them that matches the current
program name, so to select only traces for that program, use the technique just
described with SET DEBUG TAGS +program.
The DEBUG OUTPUT option controls where the trace/debug
output messages go. The options for <dest> are:
<dest> |
Message Destination |
$WIN |
debug message window; default for GUI environment |
$TTY |
main screen; default for text environment |
$LOG |
A-Shell main log file (ashlog.log) |
$NULL |
no output |
$SBX:sbxnam |
redirect to specified sbxnam.SBX |
<filespec> |
an output filespec to output to a file |
Compiler enhancement (included in edit 861) : new ++PRAGMAs
to support enhanced tracing:
++PRAGMA TRACE_BEGIN
{optionlist}
++PRAGMA TRACE.END
{optionlist}
++PRAGMA TRACE.OPTIONS {optionlist}
TRACE_BEGIN and TRACE_END may be used to bracket a section
of code for which automatic TRACE.PRINT statements will be generated after each
program statement. Each auto-generated trace will consist of two lines: first
the source code, then the trace of the variables in that statement. Note that
not all statements will be traced; primarily it is limited to those statements which
operate on variables. Also note that the trace generally occurs after the
statement execution, which means that function and procedure call statements
show up in the trace output after the routine returns. IF statements are an
exception in that they get traced prior to execution (so you can see the IF
statement regardless of whether the condition is true or false).
TRACE_BEGIN / TRACE_END blocks cannot be nested, but a
TRACE_BEGIN doesn't necessarily require a corresponding TRACE_END (the end of
the source code will imply as much). This allows you to simply insert a
++PRAGMA TRACE_BEGIN anywhere in a program, including the very top, to trace
everything from that point on.
The TRACE_OPTIONS pragma only establishes default options
for subsequent manually typed xxxxx.PRINT and xxxxx.PAUSE statements (except
for those which already include their own explicit options).
The optionlist, which is optional in all three cases,
consists of:
(dbglvl, tags,
prefix)
Each field is itself optional, although in order to specify
a subsequent field, you must specify the prior ones. The parentheses are
optional if only the dbglvl field is specified; otherwise they are mandatory.
dbglvl sets the debug level for the statement; the higher
the level, the higher the corresponding DEBUG system variable must be in order
to activate the statement.
tags is a quoted literal string consisting of
comma-delimited symbols to be associated with each xxxxx.PRINT or xxxxx.PAUSE
statement.
prefix is a quoted literal string which, if specified, is
inserted at the start of each xxxxx.PRINT / xxxxx.PAUSE statement, typically
used to specify macros like $#, $T, $P, $L, etc. It comes in handy in
situations where you already have a lot of xxxxx.PRINT statement in the
program, but are having trouble identifying them in the trace output. Rather
than manually modifying each statement to include additional contextual
identifiers, you could simply specify ++PRAGMA TRACE_OPTIONS
(0,"","$L") to insert the location counter into each trace.
For all three PRAGMAs, the optionlist establishes the
default options for subsquent manual or auto-generated xxxxx.PRINT statements.
Language runtime refinement: when an assignment is made to a
substring (aka slice) of a dynamic variable, the variable is now expanded as
needed for the referenced slice to be part of the variable. For example:
map1 var,x,0
var[9;3] = "foo"
print var[9;3]
Previously, the print statement would have printed nothing; the
assignment statement would have had no effect, since the variable var was not
long enough for the [9;3] slice to be applicable.
Now, it will be expanded, with leading bytes filled with
spaces for string type variables or nulls for X type variables, so that the
print statement will always display "foo".
This brings the behavior more into line with the expectation
for dynamic variables, which are normally expanded as needed during assignment
statements. But the slice assignment has always been a very special case.
A-Shell Release Notes
Version 6.5.1638.0 (12 Jun 2018) |
||
1638.0 |
New |
New subroutine REF _Ref517859580 \h MX_SRCHPATH |
New subroutine MX_SRCHPATH (191) searches
for a file in the system path.
xcall MIAMEX,
MX_SRCHPATH, file, foundpath
Parameters
file (String) [in]
filename to search
for (no wildcards or directory)
foundpath (String) [out]
returns
"" if not found, else the full path.
Comments
The search path is
system dependent, but normally includes the current directory, the directory
from which the A-Shell executable was loaded, plus all the directories included
in the PATH environment variable.
One use would be to
check whether a particular external command exists before attempting to launch
it via HOSTEX.SBR.
A-Shell Release
Notes Version 6.5.1637.4 (12 Jun 2018) |
||
1637.4.2 |
Revise |
INPUT
CSV #CH, ARY() refinement: an empty element is now added to the end of the
array if the input data ends with a comma. So for example, the data line { one,two, } will return ARY() with an extent of 3, with the last
field empty. Note that it is still the case that an empty line will return an
array with a zero extent. |
1637.4.1 |
Fix |
XPUTARG: putting a null string
("") to an uninitialized dynamic variable was generating a spurious
error 3. Problem was introduced in 1635.1. |
A-Shell Release
Notes Version 6.5.1637.3 (11 Jun 2018) |
||
1637.3.2 |
Fix |
Compiler edit 860: compiler
was failing to flag a syntax error for WRITECD and WRITETD statements lacking
a comma or semicolon between each field. For example: WRITECD #CH, A, B C This was mostly likely to
occur accidentally when the statement was broken on to multiple lines. The
result was that all the fields would be output, but there would be a missing
delimiter in the output line matching the location of the missing comma in
the input line. Note that probably this should
be applied to all forms of PRINT statements, but a space between PRINT
arguments has long been treated equivalently to a semicolon, which might
actually be the understanding and desired behavior for some programmers, so
we're going to leave it that way for the traditional PRINT statements. |
1637.3.1 |
Fix |
INPUT CSV: null fields were
being ignored when inputting into a base array. For example, if the data
contained { field1,,field3 }, then the statement { input csv #ch,
ary() } was ignoring the null
second field and loading the third field (field3) into ary(2). |
A-Shell Release
Notes Version 6.5.1637.2 (08 Jun 2018) |
||
1637.2 |
Fix |
INPUT CSV: when inputting into
an X type variable, quoted fields were ending up with a spurious quote
character on the end. This was mainly an issue when inputting into a dynamic
array reference (see 1629.0)since it requires use of the X type; otherwise
string or numeric types would mostly likely be used. |
A-Shell Release
Notes Version 6.5.1637.1 (04 Jun 2018) |
||
1637.1 |
Fix |
XTREE: The RGBfgbg foreground
color was not properly overriding the default red foreground for negative
values in numeric columns. |
A-Shell Release
Notes Version 6.5.1637.0 (03 Jun 2018) |
||
1637.0.6 |
Fix |
KILL.LIT 2.2B(126) works
around a problem in which a loophole in MX_GETENV (see above) might cause it
to hang. |
1637.0.5 |
Fix |
Tracing: certain traces were
causing interference with other operations returning string values. For
example, the MALLOC trace was causing MX_GETENV to return the terminal device
instead of the correct value. |
1637.0.4 |
Fix |
MX_GETENV: when retrieving the
entire list of environment variables into a dynamic string, the last several
characters were being truncated. |
1637.0.3 |
New |
A new REF _Ref517860236 \h GDI Printing Directive Option |
1637.0.2 |
Fix |
XTREE: columns with cformat
"BC" (see 1636.0) were in some cases causing subsequent columns to
display with unwanted/unexpected colors. |
1637.0.1 |
Revise |
XTREE
enhancement: footer text (XTR'SHOWFOOTER) may now include embedded CRLF line
breaks in order to show multiple lines (same idea as for headers). For
example: coldef += "1~15~Header::> Footer1" +
chr(13)+chr(10)+"Footer2#~~" |
GDI printing enhancement: the x,y coordinates in all //GDI
directives may now be optionally be expressed relative to the current cursor
position by prefacing the coordinate value with "+" or "-".
For directives with more than one x,y pair (such as //RECTANGLE or //POLYGON),
any relative coordinates are treated as relative to the prior coordinate on the
same axis. Some examples:
//;absolute coordinates - from (100,200) to (300,400) ...
//RECTANGLE,100,200,300,400
//;relative coordinates - from 50 units above the current
x,y cursor,
//;extending 200 to the right and 75 down
//RECTANGLE,+0,-50,+200,+75
Notes:
• While mathematically N
is the same as +N, within the context of GDI directives, they are all strings,
allowing the +N to be recognized and treated differently than N—i.e. as
relative rather than absolute.
• To preserve backwards
compatibility, those directives that intepreted -1,-1 as the current position
will continue to do so.
• The //IMAGE directive
continues to support negative right and bottom coordinates as indicating width
and height. (Fortunately, there is no particular need for negative widths or
heights, so nothing is lost by treating negative and positive relative right
and bottom coordinates the same here.)
A-Shell Release
Notes Version 6.5.1636.0 (26 May 2018) |
||
1636.0.1 |
New |
XTREE enhancement: new REF _Ref515302731 \h Advanced Coldef
Option RGBfgbg |
1636.0.2 |
Fix |
Relax restriction on passing a
locally defined dimx array to func byref. |
1636.0.3 |
Fix |
ATSD.EXE 6.4.111 fixes issue
with bogus "demo mode" and "license expired" message in
the log file. |
1636.0.4 |
New |
The starting key in a FOREACH statement may now
be any kind of expression. |
1636.0.5 |
Fix |
Bug fix/refinement: attempts
to open a file with an empty ("") filespec now generate BASIC error
32 (invalid filename). Previously it treated the filespec as
".DAT", which is a legal filename and would have worked for OUTPUT
or APPEND (thus covering up an application bug). |
1636.0.6 |
New |
Various REF _Ref515703103 \h HTTP.SBR
Enhancements |
There are three parts to configuring this capability:
• Add
the cformat code "BC" to the column definition, which signifies that
the first byte of the column data is reserved for the color index character
(A-Z,a-z) or blank to indicate the standard/default color. Note that although
"BC" may be seen as a sort of combination of the individual B and C
codes, the interpretation of the combined "BC" code completely
replaces their individual meanings.
• Define
a set of RGB values associated with index characters using RGBfg and/or RGBbg
clauses, in the usual way, e.g. RGBbg=50,100,150,A. These colors and their
associated index codes may or may not be used for other purposes in the tree,
but they are needed in order to define the color pairs used by the
"BC" columns.
• Specify
one or more RGBfgbg clauses which associate a new color index code in the same
A-Z,a-z range, with a pair of individual color index codes:
RGBfgbg=fgbg(fg,bg);fgbg(fg,bg)...
e.g.
RGBfgbg=A(A,B);f(Z,q);r(M,);P(,p);Z(,)
Each RGBfgbg clause
can contain one or more fgbg(fg,bg) tuplets separated by semicolons. Each
tuplet starts with a mandatory index character (A-Z,a-z) which will be used to
refer to the combined fg/bg color pair. The fg and bg codes representing the
foreground and background colors are each optional (although the comma is
mandatory); if omitted, that part of the color pair reverts to the default.
Note that although
the individual RGB index characters and the combined FG/BG index characters
both occupy the same range (A-Z,a-z), they refer to different tables of colors.
So you can have 52 individual colors associated with an index character, and in
addition, up to 52 combined pairs associated with an index character. For a
given index character, XTREE knows whether to refer to the individual or combined
color table by the context, e.g. if the column definition contains
"BC", then it will refer to the combined color table, whereas if it
contains only "B" or "C" then it would refer to the
individual table. However, if you have fewer than 26 of each type of color
index you may want to use upper case for one type and lower for the other, just
to reduce confusion.
For example:
coldef +=
"0~0~x~H~RGBbg=50,100,150,A~RGBbg=75,125,175,B~~"
coldef +=
"0~0~x~H~RGBfgbg=A(A,B);B(B,A);C(A,);D(,B);z(,)~~"
The first line
defines two individual RGB colors, indexed as A and B. The second line defines
five fg/bg pairs, indexed as A, B, C, D, and z. (We only partially followed the
advice just given to separate the two types of indices by upper and lower
case.)
The combined fg/bg
index character A refers to foreground color A (50,100,150) and background
color B (75,125,175). Combined fg/bg index character B refers to the same pair,
but with foreground and background refersed. The combined fg/bg index character
C refers to the A foreground color with the default background color. D refers
to the default foreground color with background color B. And z is equivalent to
" " since both the foreground and background colors of the pair are
omitted, i.e. set to default.)
A new sample
program XTRAFGBG in EXLIB [908,21] has been
posted to illustrate this feature.
Compiler bug fix/refinement, edit 859: the starting key in
a FOREACH statement may now be any kind of expression. Previously, it only
allowed a simple variable or a literal string or numeric constant. And in the
case of the numeric constant, although neither the compiler nor runtime
complained, the value wasn't being converted to string before treating it as a
key, so the resulting starting point of the FOREACH loop was not as expected.
As of this compiler
release, any kind of expression that could appear on the right side of an
assignment statement is allowed, including numeric expressions. But be advised
that in the case of a numeric value, the decimal point and any digits to the
right of it are dropped, e.g. 1.9 is treated as "1". If you really
want to use a starting key of something like "1.9", then you should
explicitly format it using a mask.
Note that these changes are contained within the ASHNET
1.11.162 library update and are not actually dependent on any particular
A-Shell version.
• Support secure protocols TLS 1.1 and TLS 1.2
in HTTP.SBR via the new flags:
Symbol |
Value |
Description |
XHTTPF_SSL_TLS11 |
&h01000000 |
TLS 1.1 (or
higher) |
XHTTPF_SSL_TLS12 |
&h02000000 |
TLS 1.2 (or
higher) |
• Fix problems with the ashnet.log file
(XHTTPF_DEBUG) not getting written or released under some circumstances.
• Remove 100 character limit on header lines
included at the top of the request (using XHTTPF_HDRBODY). Maximum length is
now unlimited, which is useful when headers include lengthy signatures or
digests.
• Append a connection failure code to the
XHTTPF_GETSTSTXT return string, as well as the ashnet.log file to assist with
debugging failed connections. See the A-Shell Reference > HTTP.SBR > Connection Failure
Codes for a listing of the codes and meanings.
Code |
Meaning /
Description |
0 |
Sucess |
|
Non-secure
Connections |
1 |
empty
hostname |
2 |
DNS lookup
failed |
3 |
DNS timeout |
4 |
Aborted by
application. |
5 |
Internal
failure. |
6 |
Connect
Timed Out |
7 |
Connect
Rejected (or failed for some other reason) |
50 |
HTTP proxy
authentication failure. |
98 |
Async
operation in progress. |
99 |
Product is
not unlocked. |
|
Secure
Connections (SSL/TLS) |
100 |
TLS internal
error. |
101 |
Failed to
send client hello. |
102 |
Unexpected
handshake message. |
103 |
Failed to
read server hello. |
104 |
No server
certificate. |
105 |
Unexpected
TLS protocol version. |
106 |
Server
certificate verify failed (the server certificate is expired or the cert's signature
verification failed). |
107 |
Unacceptable
TLS protocol version. |
109 |
Failed to
read handshake messages. |
110 |
Failed to
send client certificate handshake message. |
111 |
Failed to
send client key exchange handshake message. |
112 |
Client
certificate's private key not accessible. |
113 |
Failed to
send client cert verify handshake message. |
114 |
Failed to
send change cipher spec handshake message. |
115 |
Failed to
send finished handshake message. |
116 |
Server's
Finished message is invalid. |
A-Shell Release
Notes Version 6.5.1635.1 (17 May 2018) |
||
1635.1 |
Revise |
REF
_Ref514441665 \h Parameter
Passing Refinement |
A-Shell Release Notes Version 6.5.1635.0 (13 May 2018) |
||
1635.0.2 |
New |
Enhancement to REF _Ref514442175 \h \* MERGEFORMAT Add
HMACs to CRYPTO.SBR |
1635.0.1 |
New |
Add new REF _Ref514076940 \h \* MERGEFORMAT GDI
Printing Directive SETTRANSFORM |
When passing expressions to/from functions and SBX
subroutines, if the target is type X, use a physical rather than logical
transfer. This matches the behavior of assignments, and closes a loophole that
previously occurred when the source expression was of the form VAR[x;y] or
VAR[x,y] where VAR was of type X. Previously the transfer was being terminated
at the first null even when the target variable was of type X.
Note that this change affects all variations of XGETARG and
XPUTARG, as well as implicit parameter passing to functions/procedures,
potentially changing the runtime behavior of existing compiled programs, but
only in cases where a string or non-numeric expression is passed to an X type
variable. Given the narrow range of situations affected, and our belief that
the new behavior is more in line with how programmers thought that it had been
working all along, not to mention the fact that it is now consistent with the
assignment statement logic, we feel that the upside of the change overwhelms
the downside. Nevertheless, at least for now, we are not treating it as a bug
fix and therefore not planning to retrofit into the stable 6.4 release.
Programmers concerned about whether this might affect them are advised to do a
global source code search for occurrences of "[" within an XCALL or
func/proc call parameter list, as well as within any "PUTARG"
statement and then check to see whether the receiving variable is of type X and
whether you are counting on the expression being terminated by the first null.
New opcode CRYPTOP_HMAC
allows CRYPTO.SBR to create HMACs (Hash-based Message Authentication Codes),
commonly used for signing web service requests. They combine a hash/digest
algorithm (e.g. SHA256) with a cryptographic key (typically pre-shared between
sender and receiver) to both verify data integrity of a message and
authenticate the sender.
xcall CRYPTO,
CRYPTOP_HMAC, status, src, decoding, dst, encoding, cflags, cipher, key {,
keybits, cmode, padding, cbsrc}
Parameters
src and decoding
specify the source
message and decoding, as with other opcodes.
dst and encoding
specify the
destination for the output of the function. Typically it is encoded using
base64 or hex so as to make it easily insertable into a web document. The
destination length is independent of the source length and instead is
determined by the hash function—e.g. SHA256 results in 32 bytes raw, 43 for
base64, 64 for hex.
cflags
used as for the
other opcodes
cipher
should be set to
CRYPTO_CIPHER_NA (0)
key
as for the
CRYPTOP_ENCODE operation
keybits
may be set to 0 if
the key is encoded in a text format; otherwise it should specify the number of
bytes in a binary-format key.
mode
should be set to
one of the following to specify the hash function to use (default
CRYPTO_MODE_SHA1):
Symbol |
Value |
Description |
CRYPTO_MODE_SHA1 |
20 |
HMAC-SHA1 |
CRYPTO_MODE_SHA256 |
21 |
HMAC-SHA256 |
CRYPTO_MODE_SHA384 |
22 |
HMAC-SHA384 |
CRYPTO_MODE_SHA512 |
23 |
HMAC-SHA512 |
CRYPTO_MODE_MD2 |
24 |
HMAC-MD2 |
CRYPTO_MODE_RIPEMB128 |
26 |
HMAC-RIPEMB128 |
CRYPTO_MODE_RIPEMB160 |
27 |
HMAC-RIPEMB160 |
CRYPTO_MODE_RIPEMB256 |
28 |
HMAC-RIPEMB256 |
CRYPTO_MODE_RIPEMB320 |
29 |
HMAC-RIPEMB320 |
cbsrc
the same as for
other opcodes.
Example
++include
ashinc:crypto.def
map1 text$,s,0,"The
quick brown fox jumps over the lazy dog"
map1
key$,s,64,"key"
map1 hmac$,s,132
map1 status,i,4
! generate
HMAC-SHA256 for text$ using key$
xcall CRYPTO,
CRYPTOP_HMAC, status, text$, "", hmac$, "hex", &
CRYPF_NONE, CRYPTO_CIPHER_NA, key$, 0, CRYPTO_MODE_SHA256
? "hex
encoded hmac-sha256: ";hmac$
New //SETTRANSFORM printing
directive transforms the coordinate space to rotate, translate, shift and/or
stretch the output. Syntax:
//SETTRANSFORM,m11,m12,m21,m22,dx,dy
where:
m11,m12,m21,m22 are floating point multipliers
dx,dy specify a reference point in twips (1440/inch)
The effect of the //SETTRANSFORM
directive is to tranform every point (x1,y1) in the original coordinate space
to a new point (x2,y2) based on the following formulas:
x2 = (x1 * m11) + (y1 * m21) + dx
y2 = (x1 * m12) + (y1 * m22) + dy
Note that the transformation is
independent of SETMAPMODE and affects all subsequent output, with the exception
of //METAFILE.
Examples
//;mirror about horizontal axis at y=7920 (5.5" down)
//SETTRANSFORM, 1, 0, 0, -1, 0, 15840
//;mirror about vertical axis at x=6120 (4.25"over)
//SETTRANSFORM, -1, 0, 0, 1, 12240, 0
//;rotate 180 around point 4.25" over, 5.5" down
(8.5x11 center)
//SETTRANSFORM, -1, 0, 0, -1, 12240, 15840
//;shrink horiz 25%, stretch vert 50%, shift down 1"
and right .5"
//SETTRANSFORM, 0.75, 0, 0, 1.5, 720, 1440
1634.4 |
Fix |
XCALL parameter passing: a
routine used by external libraries (e.g. libashmysql, etc.) for passing
floating point values back to the application was failing to properly handle
certain F4/F6/F8 conversions. The only known ramification was in
FETCHR_FIELDS variation of the SQLOP_FETCH_ROW operation of ASQL, following
the 6.5.1628.0 update. Note that the complete fix also requires updating the
libashmysql module to version 1.4.143. |
1634.3.1 |
Fix |
INMEMO: passing a literal 0
for the channel was generating a link error. Broken in 1628.0. |
1634.3.2 |
Fix |
XTREE refinement for external
buttons: clicking on an external button to simulate a keystroke—for example,
using a floating keypad—now works better with XTREE. Previously it may have
caused XTREE to exit rather than processing the key as if it had been entered
from the keyboard. |
1634.2 |
Fix |
AUI_WINDOW bug fix: querying a
non-existent window was crashing A-Shell. |
1634.1 |
Fix |
AUTLOG.SBR bug fix: floating
point return parameters were not being updated properly. (Problem introduced
in 6.5.1628.0 with the revisions to the XCALL parameter passing mechanism.) |
1634.0 |
Fix |
APEX rendering of JPG images
containing line drawings and text is now substantially improved. |
1633.5 |
Fix |
ATE/ATSD AUXLOC printing
refinement: a server-side printer init file containing DEVICE=PROMPT: will
now be interpreted as DEVICE=AUXLOC:xxxxxx (where xxxxxx is the printer init
file name), rather than DEVICE=AUXLOC:PROMPT: as it was before. Also, on the client
side, ATE will look for an existing ASHCFG:PROMPT.PQI or SYS:PROMPT.INI in
the case of DEVICE=PROMPT:. Both changes make it somewhat easier for the
application to supply printer-independent configuration options in the
printer init file that work even when the user selects a different printer
from the Windows printer dialog. |
1633.4 |
Fix |
XGETARGSBX bug fix: was
failing to support arrays passed byref. |
1633.3 |
Fix |
ATE refinement: client-side
IATIMEOUT handler now recognizes screen output and other server-client
messages as activity. |
1633.2.2 |
Fix |
SCALE bug fix: .IFELSE()
function return value was getting upscaled twice. Same patch as 6.4.1557.2. |
1633.2.1 |
Fix |
XTREE print preview bug
fix/refinement: extend the logic of the 1626.2 for the problem truncating the
last character of some columns in the print version so that it also applies
to the headers and footers. And, fix the problem where the headers became
corrupted after exiting from the print preview display. (Same patch as
6.4.1557.2) |
1633.1.2 |
Fix |
XTREE bug fix: an error trap
(Basic error #69) intended to handle an otherwise sticky ATE communication
error was inadvertently being triggered for certain unrelated conditions. |
1633.1.1 |
Fix |
XTREE bug fix: failing to
specify the FILIDX parameter for file-based mode was causing XTREE to crash. |
1633.0.3 |
Fix |
ATE-related improvements to
handling of SIGHUP. Any call to AUI_EVENTWAIT, XTREE, XTEXT, INFLD, or any
ATE command requiring a response, now trigger error 250. Previously, some of
these operations were not being treated as input, causing delays or
complications with an otherwise clean exit. |
1633.0.2 |
Fix |
Compiler edit 858: very long
FOR statements were potentially failing to compile correctly due to an
overflow, without triggering a compiler error. |
1633.0.1 |
New |
Collections enhancement: REF _Ref508549434 \h \* MERGEFORMAT Writable
Iterators |
Collections
enhancement: writable iterators. You can now update the value of an element in
a collection via direct assignment to the iterator. For example, the following
foreach loop updates the value of each element by appending
"-updated" to it:
dimx $foo,
ordmapm(varstr;varstr)
...
foreach $$i in
$foo()
$$i += "-updated"
next $$i
Notes:
• This technique works with all collection
types (ORDMAP, ORDMAPM, MLIST).
• In the case of ORDMAPM, it is the only way to
change the value of an existing element for which there are duplicate keys.
• In the case of ORDMAP, the direct assignment
to the iterator in the above example would be equivalent to ...
$foo(.key($$i)) +=
"-updated"
... except much faster, since the key
lookup, deletion, and re-addition steps are all eliminated.
• In the case of MLIST, it eliminates the need for
the .ref($$i) function, (which is now effectively deprecated).
• The iterator is only writeable when it
appears on the left side of the equals sign in an assignment statement. In all
other cases, particularly when passing an iterator as an argument to a
function, it remains read-only.
1632 |
New |
Add XTREE popup commands REF _Ref508549681 \h \* MERGEFORMAT $CBSETX,
$CBRSTX, $CBUNDOX |
|
|
(no additional changes for this version) |
XTREE enhancement: new PopupMenu commands:
$CBSETX: same as $CBSET but sets xtr'xvalidate bit
&h08
$CBRSTX: same as $CBRST but sets xtr'xvalidate bit
&h08
$CBUNDOX: same as $CBUNDO but sets xtr'xvalidate bit
&h10
These new
variations of the checkbox set, reset, and undo commands resolve a problem with
the standard ones involving ambiguity over the possible interpretations of the
xtr'validate = 3 that they return.
1631.4 |
Fix |
XTREE bug fix: xtr'xvalidate was being
returned as 2 rather than 3 in case where a cell change occurred and a
checkbox was checked on. |
1631.3 |
Fix |
(Windows) Fix GPF in auxiliary SBX
interface used by APEX and print filters. |
1631.2.2 |
Fix |
Close some ATE-related loopholes related
to AUXLOC printing, serial passthru, and unexpected network disconnects. |
1631.2.1 |
Fix |
Eliminate license expiration
warnings for background jobs. They were not helpful and possibly harmful). |
1631.1.2 |
Fix |
Compiler, edit 857: The /PX logic was
failing to recognize a call to a function that was specified as the
initializer to a MAP statement, thus opening up the possibility that the
function would be removed, leading to a function-not-found error. |
1631.1.1 |
Fix |
ISMROK.SBR bug fix: the last
two parameters—IDX'BLK'SIZ and IDX'TYPE—were not being returned correctly. |
1631.0.5 |
Fix |
Compiler edit 856: close a
loophole that was allowing the compiler to go into an infinite loop in
certain obscure cases involving unterminated literal strings with conditional
compilation blocks. |
1631.0.4 |
Revise |
VUE refinement, edit 371:
maximum supported line length now takes into account the longest line in the
entire file being loaded. To this we add 4K, but in no case will the line
length limit be less than 8K. Previously it only looked at the first 100
lines, and then added 1K, with an overall minimum limit of 4K. |
1631.0.3 |
Revise |
Minor refinement to AUXLOC
printing: if the ATE client fails to respond to the server's request for an
acknowledgment prior to the start of the auxiliary port printing operation,
the operation is aborted with a note in the ashlog. This eliminates the rare
but ugly scenario where a failing network connection or unresponsive ATE
client results in a stream of printed 'garbage' on the screen. |
1631.0.2 |
New |
Add REF
_Ref507779024 \h XTREE
Lookup-and-Fill |
1631.0.1 |
New |
Add REF _Ref507778316 \h \* MERGEFORMAT XTREE
Auto-Sum Column Footers |
coldef +=
"20~10~Qty::=SUM~#E~~
coldef +=
"30~12~| Weight::| =SUM~#E~~
Note that as illustrated in the second example, the
optional header/footer alignment code—"| " for centering—precedes the
"=SUM". Typically is isn't necessary to specify an alignment code for
the footer though, as the =SUM option will automatically use the same alignment
as the column being summed.
Also note that the footer in question here appears at the
bottom of the grid during display and editing operations, not to be confused
with the Advanced Coldef Option "Footer=" which defines a page footer
for printing.
XTREE enhancement: Automatically
fill in a target cell based on the contents of a source cell using a lookup
table. This is similar to the combo/list/substitution capability defined with
ListX and CellListX and enabled by cformat "l" or "ll", except that the
description appears in a separate column from the code—i.e., there is no need
for a combo/dropdown box. Also, the list of code/description pairs is
file-based rather than embedded in the coldef.
The feature is intended for
data-entry cases where the user is entering codes for which you want to provide
immediate visual confirmation by looking them up in a table and displaying the
corresponding description. It fills the gap between small lists, where a combo
box might make more sense, and very large or complex database lookups, where
only an exit to the application would make sense. Between those two extremes,
say lookup tables between 50 and 50 thousand entries, providing the table to
XTREE once and letting it do the lookups internally will be much faster and
more convenient; this is especially true in the ATE case where the turnaround
time to exit and re-enter might be a significant fraction of a second, enough
to slow the data-entry operation.
For example, in a tree used to key
in general ledger transactions, you might use this technique to echo the
account description in a non-editable column when the account code is entered.
Setup requires two new Advanced
Coldef Options:
FileListX=idx,fspec
LookupX=idx,targetcol
FileListX defines the table and
associates it with an single character index code in the range of A-Z or a-z.
Note that the index shares the same space with the ListX and CellListX lists,
so must be unique relative to them. In fact, combo and list substitution
columns, i.e. cformat "l" or "ll", may refer to lists
defined by FileListX just as they can for CellListX.
The fspec can be an AMOS or native spec from the client perspective.
In the case of ATE, the search path will automatically include the %ATE%\Cache
and %ATE%\PermCache directories, and it is up the application to transfer the
file from the server if necessary.
Tip: you may want to use the
Fn'FileAgeDiff() function in the FNFILEAGE.BSI module of the SOSLIB to
determine when your FileListX file becomes out-of-date relative to the data
file it was extracted from. For ATE, the ATEAPX.SBX routine will be handy for
syncing the file to the client.
The file should be formatted as
follows:
code,description
code,description
etc.
As with the List{X} and
CellList{X} lists, if the first character of the first code is neither an
alphabetic character or a numeric digit, it is assumed to be the delimiter;
othewise the delimiter is assumed to be the comma. However, unlike the other
lists types, here the descriptions may may be quoted if they contain the
delimeter. So standard two-column CSV files should be acceptable.
To associate the list with a
source and target column, add the LookupX= clause to the coldef entry for the
source column—i.e. the column containing the code, specifying the index used in
the FileListX definition, and the target column, which is where the description
will be echoed.
The lookup and fill operation is
performed automatically whenever the source column is edited and changed. If
there is no match for the code, the description will be blank. When loading
data into a tree, the lookup will be performed only if the target column is
blank. Chances are that the application already knows the descriptions
associated with the codes being loaded into the tree, so it is probably more
efficient for it to specify them rather than force XTREE to look each one up.
Note that if you want the
looked-up descriptions to be returned to the app with the answer array, use the
"U" code for the description column.
1630.1.3 |
Fix |
File hook: The HFE_ISAM_DEL
and HFE_ISAM_ADD hooks had unnecessary dependencies on each other and on the
HFE_ISAM_WRITEx hooks causing them to be ignored unless all were set. Now
they can all be enabled independently. |
1630.1.2 |
Fix |
Compiler (edit 855) SCALE:
XPUTARG literal argument numbers and literal .EXTENT index numbers were not
being scaled in the RUN file. The updated run-time system will now handle it
either way. |
1630.1.1 |
Fix |
Further work on SCALE:
Conversions between floating point and non-floating point variable types
during XPUTARG operations where not adjusting for SCALE; XPUTARG now tolerates
anomalies in the scaling of the argument number; see compiler edit 855 below. |
1630.0.2 |
Revise |
REF _Ref506904759 \h APEX refinements |
1630.0.1 |
New |
REF _Ref506904724 \h SQLOP_FETCH_ROW Enhancement |
XCALL SQL enhancement:
SQLOP_FETCH_ROW now supports fetching a row into an ordmap:
dimx $rowmap, ordmap(varstr;varx)
...
cmdhdr.opflags = FETCHR_ROWMAP
xcall SQL, SQLOP_FETCH_ROW, cmdhdr, $rowmap()
foreach $$i in $rowmap()
? "Column
name: ";.key($$i);", value: ";$$i
next $$i
Requirements / Comments
• Requires libashmysql
library 1.4.142+
• Related opflags added
to SQL.DEF:
Symbol |
Value |
Description |
FETCHR_ROWMAP |
&h0010 |
Return row as an ordmap |
FETCHR_ORGNAME |
&h0020 |
Add to use org_name instead of name for key |
FETCHR_TBLNAME |
&h0040 |
Add to prefix name with table name |
• If a column name is
blank, possibly because it is an expression, a name will be generated of the
form "expr-#" (1,2,3...)
• The
ordmap(varstr;varx) format will handle any field type. Text fields will appear
as they are stored in the database. Numeric and other formatted field types
will be converted to the standard display representation, the same as for the
FETCHR_ROWSTR and FETCHR_ARRAY formats. BLOB fields will be encoded, and
automatically decoded when assigned to a suitable variable type.
• Reinstate support for the ashico1::xxx icons in APEX.CFG. Support
had been dropped in 6.5.1617 when switching to the new *_i22b.png icons.
• If the new icons are
not found, it reverts to the old icons.
• Installer now renames
the old APEX.CFG to APEX.OLD before updating it.
• The Preview
Preferences button has been added back to the toolbar. It is also available
from the main window Settings menu.
• New spooler switch:
SPSW_NOSAVESTATE (&h02000000) stops APEX from saving the user state on
exit. This might be useful when preview unusual documents to avoid making any
correspondingly unusual state adjustments (zoom, etc.) become the default for
the next normal document.
1629.1 |
Fix |
MX_XCBDATAX bug fix: the
XCBGET and XCBPUT operations were only working correctly if there were no
intervening function or procedure calls. Bug introduced in 6.5.1628. Note
that MX_XCBDATAX is limited to SBX parameters, not function/procedure
parameters, and has been deprecated since the introduction of the XGETARG and
XPUTARG statements. |
1629.0 |
New |
Add language feature: REF _Ref506585719 \h \* MERGEFORMAT INPUT
CSV into a Dynamic Array |
New language feature: INPUT CSV into
a dynamic array. Syntax:
DIMX ary(n), X, 0,
auto_extend
...
INPUT CSV #ch, ary()
The above syntax is
equivalent to...
INPUT CSV #ch, ary(1),
ary(2), ...
where the number of
array elements specified is automatically adjusted at runtime to the number of
fields on the line.
Requirements /
Comments:
• Compiler edit 854+
• The ary() must be allocated with DIMX, and
must be of type X.
• The array element size doesn't have to be 0
(i.e. dynamically sized), but if not, individual fields may be truncated as
needed.
• For auto_extend arrays (highly recommended),
the extent will be set to the number of fields input, with 0 indicating none
(probably EOF).
• In the case of a non auto_extend array, any
fields on the input line beyond the fixed extent of the array will be
discarded.
See the
SOSFUNC:FNCSVUTL.BSI module for an example of using INPUT CSV into an array to
convert each line of a CSV file into an ordmap.
1628.2.2 |
Fix |
Fix XCALL trace to show the
unscaled argument values. |
1628.2.1 |
Fix |
Fix SCALE bug in .EXTENT when
the index # is explicitly specified in the program. |
1628.1.2 |
Fix |
Compiler (edit 853) fixes: (a)
XPUTARG @PARAM was not working properly with SCALE; (b) compiler now properly
complains about a dangling comma at the end of a function/procedure parameter
list. Previously such superfluous commas were ignored, but introduced doubt
as to what the compiler was thinking. |
1628.1.1 |
Revise |
Clean up various
inconsistencies in the SCALE system. SBXs now inherit the scale of the
caller, overriding any SCALE specified in the SBX. There is no longer any
point in specifying SCALE within an SBX. |
1628.0.4 |
Fix |
PRTXLS.SBX 2.0(207) bug fix:
passing the APEX license was in some cases crashing the Linux version. |
1628.0.3 |
Fix |
Compiler edit 851 fixes: (a)
/PX was not properly handling ENDFUNCTION statement with line numbers; (b) /P
and /PX were not properly handling UNDEF statements; (c) built-in macros
ABC_CURRENT_MODULE$ and ABC_CURRENT_ROUTINE$ were in some case returning
garbage. |
1628.0.2 |
Revise |
Compiler edit 852 enhancement:
increase maximum length of a single line of source code, including
continuations, from 3K to 16K. Also increase the
limit on the number of xcall / function / procedure parameters from 128 to
1024. |
1628.0.1 |
Revise |
REF _Ref506576878 \h Redesign Subroutine Parameter
Passing |
Redesign the runtime mechanism for passing parameters to
subroutines, functions and procedures to accomplish multiple goals:
• Eliminate the prior
hard limit of 128 maximum parameters. The runtime system now has no limit; see
below for compiler limits.
• Reduce memory overhead
for typical routines, especially in the case of highly nested functions.
• Eliminate nearly all
cases of internal subroutines that required a specific parameter to be passed
as F,6, improving efficiency but especially flexibility (and eliminating a
source of bugs for unsuspecting programmers.) Subroutines that previously
required F,6 (or in some cases other F,4 or F,8) parameters that now allow any
suitable numeric type: ACCEPN, COMMON, FLOCK, RENAME, SLEEP, ANYCN, DSPLY,
MMENU, PRINT, RDATE, STENO, BLOCKS, CISAM, INFLD, LAPSED, MX_FINDNEXT,
MX_ROUND, MX_USRIO, PRTCHK, SIZE, TCPX, ACCESS, DATES, SERCH, SBRC, BOX1C,
DYNLIB.
Note: 1627.1 is a special interim update of
"CX" version for pre-Vista compatibility |
||
1627.1.3 |
Fix |
DYNLIB bug fix: param types
'z' (char*) and 'Z' (const char*) were incorrectly converting empty strings
("") to NULL. Only 'V' should do that. |
1627.1.2 |
|
Compiler edits 851 and 852, to
be documented with 1628.0. |
1627.1.1 |
Fix |
WS2003/XP compatibility fix:
image DLLs were failing to load due to use of a runtime option not recognized
by the older Windows versions. |
1627.0 |
New |
Add REF _Ref506575838 \h New Advanced
Coldef Options |
XTREE enhancement: add Advanced
Coldef Options:
• LoadOptions=NoRowIf#
• LoadOptions=NoRowIf!
These two options
are similar in concept to the like-named ExportOptions (see 6.5.1626.0 below)
except that they apply to the operation of loading data into the tree. The
NoRowIf# option skips rows with a numeric value # 0, while NoRowIf! skips rows
with a numeric value of 0. Typically the column is defined as a one character
#, but could also be a checkbox.
The intended usage
would be for a situation where you are repeatedly displaying items from a large
array, but with varying filtering such that each iteration of the display may
show different items from the set. Rather than have to maintain two separate
arrays (one with all of the items and one with just those to display), you can
just add a column to the array to indicate (with 0 or 1) whether to display the
item.
Notes
• Only supported with Array Mode (not file or CSV
mode).
• Only applies to opcodes XTROP_CREATE and
XTROP_REPLACE.
• Purely a client-side feature; no special
support or version requirements on the
server side.
• Removing items from a tree, by resetting the
value of the LoadOptions column and then doing an XTROP_REPLACE, is similar to
using XTROP_DELSEL, but the LoadOptions approach is somewhat more flexible
(particularly in its reversibility), and probably easier to use.
• In the ATE environment, using the LoadOptions
technique to add or remove a small number of rows is particularly efficient due
to optimization of the XTROP_REPLACE operation when only a few rows are
changed.
• See the sample program, TSTXFLTR2.BP[908,76]
in the EXLIB for an example.
1626.3 |
Fix |
AUI_IMAGE: the IMGOP_DISPLAY
function was failing to take into account the presence of the top status
line, resulting in the image display being approximately one row higher than
requested when the status line is visible. |
1626.2.2 |
Fix |
XTREE print/preview
refinement: work around a bug in the underlying print preview library which
was, in some display environments, truncating the last character(s) of a each
cell. The workaround involves appending a few spaces to the end of each cell
just before the preview and then removing them on return. |
1626.2.1 |
Fix |
XTREE row indexing patch.
Re-entry into trees without the dragdrop or sortable flags was in some cases
failing to set the caret to the correct row. |
1626.1 |
Fix |
XTREE row indexing patch,
superseded by 1626.2. |
1626.0.4 |
Fix |
Compiler edit 850: the patch
in edit 848 for ++IFMAP and /PX now works for /P as well as /PX. |
1626.0.3 |
New |
Add XTREE REF _Ref506575228 \h PopupMenu
Command $EXPCSV2XL |
1626.0.2 |
Revise |
XTREE export refinement:
checked checkboxes and set radiobuttons are now exported as numeric values.
Unchecked or unset checkbox and radiobuttons continue to be output as blanks.
Previously the exported value was always blank. |
1626.0.1 |
New |
Add values
for the REF _Ref506575323 \h ExportOptions Advanced Coldef Directive |
XTREE enhancements: new values for the ExportOptions
Advanced Coldef Directive:
• ExportOptions=No :
Causes the associated column to be excluded from exporting. Applies to real
columns only.
• ExportOptions=Yes :
Causes the associated column to be included in the export, regardless of
whether the column is hidden in the display view. Note that hidden columns will
be output according to their physical position in the coldef. Applies to real
columns only.
• ExportOptions=NoRowIf#
: Causes the entire row to be excluded from the export if the value of the
corresponding column is not zero (or in the case of a checkbox or radiobutton
cell, is checked / set). This would typically be used with an editable checkbox
column to select rows to include or exclude from the export. Applies to real
columns only.
• ExportOptions=NoRowIf!
: Opposite of NoRowIf#, i.e. excludes the row from the export if the column
value is zero (or unchecked).
• ExportOptions=PhyOrder
: Causes the order of the columns in the export to be based on the physical
order they are defined in the coldef, rather than the display order (which is
otherwise the default). (This option affects all columns, regardless of the
column that it is specified with. Also note that the the option can be abbreviated
to ExportOptions=Phy; any additional characters are ignored.
$EXPCSV2XL is like
$EXPCSV except that after creating the CSV file (which is named
%TEMP%\XTREE##.CSV where ## is the job number), it calls CSV2XL.SBX to convert
it to XLS. If no inispec is specified, the default INI file for CSV2XL will be
XTRCSV2XL.INI (with the search patch consisting of the current ppn, [p,0], and
BAS:. If no XTRCSV2XL.INI is found in any of those locations, is uses the
standard BAS:CSV2XL.INI file.
If the inispec is
specified (AMOS or native format, may include %ENV% vars) then is uses that
filespec without any search path.
Unlike the $EXPCSV
and $EXPTSV options, there is no "+" variation to open the file after
creating it. Instead, this is determined by the CSV2XL initialization file
Launch option.
As with the other
export options, you can enable it globally by adding:
SBR=XTREE_EXPCSV2XL
to the MIAME.INI.
In the case, there is no option for the INI file, which will always be the
XTRCSV2XL.INI, using the search patch specified above.
1625.1 |
Fix |
Compiler (edit 849) bug fix:
default function and procedure parameter values were not being respected in
calls where no named parameters were specified. Problem was introduced in
compiler edit 847. |
1625.0.3 |
Fix |
Runtime bug fix for spurious
subscript out of range errors when passing array base references to
functions. This was a side effect of the 6.4.1556.7 patch which worked for
XCALLs but not functions. |
1625.0.2 |
Fix |
Compiler (edit 848) bug fixes
/ refinements: (1) Passing a named lblref reference to a function without
prefixing the name with @ was compiling but failing to actually pass the
parameter. (2) ++IFMAP and ++IFNMAP now work as expected with /PX.
Previously, since ++IF conditionals are processed during the initial pass but
MAP statements are not, a function that was only referenced within a block of
code conditioned on a seemingly true ++IFMAP would get shaken out out of the
tree, resulting in a function-not-defined error. This is now resolved. Note
that ++IFMAP <var> only applies to global variables, not local or
private variables. |
1625.0.1 |
Revise |
ATE-related server-side
enhancement: .msi packages are now supported along with .exe files in the
A-Shell startup search for updates from the %MIAME%/atesetup directory. |
1624.3 |
Fix |
REF _Ref504755465 \h Indirect/Lblref Function Fixes |
1624.2 |
|
Apply all 6.4 patches thru
1556.7 |
1624.1 |
|
Apply all 6.4 patches thru
1556.5 |
1624.0.6 |
Revise |
(Windows) Remove static
dependencies on ODBC32.DLL, ODBCCP32.DLL, NETAPI32.DLL, RPCRT4.DLL,
IPHLPAPI.DLL, DNSAPI.DLL, OLEAUT32.DLL, CRYPT32.DLL, COMCTL32.DLL,
WININET.DLL, WS2_32.DLL. These standard Windows libraries and now loaded
dynamically if and when needed. There is no change in outward behavior,
except possibly to shave a few nanoseconds from the initial launch, and to
delay any errors caused by missing DLLs to the point where they are really
needed. |
1624.0.5 |
Revise |
(not used) |
1624.0.4 |
Fix |
INSTR(spos,subject,pattern,flags):
(a) When one of the INSTRF_xxx flags was specified, the spos
was being applied to the pattern rather than the subject. This was no problem
if spos=1, but would likely cause failure of the
search otherwise. (b) When REGEX flags were specified, the search was
starting one position prior to spos. |
1624.0.3 |
New |
REF _Ref503939992 \h New CLEAR (ARY) Options |
1624.0.2 |
Revise |
|
1624.0.1 |
Revise |
Compiler edit 845: REF _Ref503939891 \h STRSIZ-related
refinements |
Compiler (edit 847) bug fixes related to indirect/lblref
functions:
• Indirect procedures
are now supported as well as functions. Previously, attempts to use indirect procedures
may have resulting in undefined reference compiler errors.
• Indirect
functions/procedures, , i.e. LBLREF parameters, can now be passed by name, as
expected. The actual function name being passed must be prefixed by the
"@", just as it would when using standard ordered parameters. The
parameter name can optionally be prefixed with @".
For example, assuming a function defined as:
Function Fn'Foo(@callback() as lblref) ...
any of the following syntaxes is supported:
call Fn'Foo(@callback=@Bar())
! @name=@routine
call Fn'Foo(callback=@Bar())
! name=@routine
call Fn'Foo(@Bar())
! @routine (ordered param)
• In the absence of an explicit "as
s#" clause, string arguments to functions and procedures, as well as the
return value of a string function, now defaults to s0 (i.e. dynamic, unlimited)
instead of the current STRSIZ.
• STRSIZ 0 now sets the default string size to
dynamic, as would be expected. Previously it set the default string size to a
fixed length of zero, i.e. making it
impossible for any unmapped string variable to hold a value.
• SWITCH and CASE arguments are no longer
limited by the current STRSIZ. Previously the compiler would complain about it
you were forced to actually change the STRSIZ to accommodate them, which was
not very programmer-friendly.
Note that all of the above are purely compiler adjustments,
i.e. they change the resulting RUN programs, which are backward compatible as
least as far back as 6.0.
Runtime enhancement to support new .CLEAR ARY() options:
• For traditional MAPped arrays, as well as for
DIMX arrays without the AUTO_EXTEND attribute, .CLEAR ARY() simply clears the
contents of the array without affecting its structure. This applies to both
single and multi-dimensioned arrays. The end result is exactly equivalent to
iterating through all of the array elements and setting each to null except
that it is easier to code and faster to execute.
• For DIMX arrays with the AUTO_EXTEND
attribute, the extent of the first dimension of the array is reset to 0. This
is similar to resizing the array to 0 using REDIMX except that the array
remains defined and ready to receive new elements (via auto-extension). Note
that for multi-dimensional arrays, dimensions beyond the first retain their
original extents; this is necessary for re-using the array since only the first
dimension is subject to auto-extension.
1623.0.1 |
Fix |
Fix bug introduced in 1623.0
causing spurious error 63 when passing a collection element to an SBX. |
1623.0.2 |
|
Apply 6.4 patches from 1556.2 |
1623.0.1 |
New |
REF
_Ref502165395 \h Collections
Passing |
Compiler edit 844 and runtime enhancement: Collections can
now be passed by reference in an XCALL to an SBX. On the calling side, the
syntax is the same as for passing a DIMX array of structures, i.e. just specify
the collection name with an empty set of parentheses, e.g.
dimx $coll, ordmap(varstr;varstr)
...
xcall MYSBX, $coll(), ...
The receiving side is also similar to that for receiving a
DIMX array of structures, i.e. you must first declare the receiving array with
a variation of the DIMX statement including the BYREF clause, e.g.
dimx $locoll, ordmap(varstr;varstr), byref
Then use XGETARG or XGETARGS to receive the collection...
xgetargs $locoll(), ...
or
xgetarg 2,$locoll()
See the new MAPDIR.SBX and associated TSTMAPDIR.BP test
program in [907,45] of the SOSLIB for a useful working example.
New |
XTREE enhancement: CellList id codes can now include
both upper and lower case characters, extending the total range from 26 (a-z)
to 52 (a-z, A-Z). |
1621.3.1 |
|
Apply all 6.4 patches thru
1556.1 |
1621.3.2 |
Fix |
Compiler edit 842: When using
the /LF switch without /M, certain ++EXTERN ARRAY() statements for DIMX and
ORDMAP arrays were generating spurious errors: unmapped variable or
mismatched type/size. |
1621.2.2 |
Fix |
Compiler edit 841: the
standalone UNIX compiler was failing to process the -b and -l switches
correctly. It was also failing to fold ++INCLUDE filenames to lower case if
the compiler wasn't running from a directory mapped to a MIAME DEVICE. |
1621.2.1 |
Fix |
Compiler edit 840: certain
references to a collection indexed by an array of structures, e.g.
$coll(struct(i).member), within a foreach loop, were resulting in a spurious
error on the NEXT $$i statement at the bottom of the loop. |
1621.1 |
|
Apply all 6.4 patches thru
1556.0. |
1621.0.4 |
Fix |
MX_FSPEC: a previous
refinement in 6.5.1611 related to the introduction of the FSPECNATIVE option
had the side effect of causing command lines containing both spaces and
filespecs with [p,pn] components to be parsed incorrectly. This was primarily
an issue for LIT commands such as DO.LIT which often have complex argument
lists containg a mixture of filespec-related tokens. |
1621.0.3 |
Fix |
REF _Ref499911303 \h AG_XFUNC Corruption Avoidance |
1621.0.2 |
New |
New REF
_Ref499911389 \h DYNLIB.SBR
Opcode DCOP_DEREF |
1621.0.1 |
New |
New REF
_Ref499911570 \h DYNLIB.SBR
Parameter Type '>' |
New parameter type ">" may be used to identify
an indirect output string parameter, i.e. one that the underlying function
treats as the pointer to the actual output, rather than the output itself. For
example, in the following C function, the output parameter pstring will
actually receive the address of the output string:
void getstring(char **pstring);
To call such a function with DYNLIB, you would use the
following method:
map1 buffer,s,0
! dynamic ok, or size sufficient for output
dlctl.opcode = DCOP_CALL
xcall DYNLIB, dlctl, "getstring(>)v", buffer
The ">" parameter code will cause DYNLIB to
copy the actual output string to the buffer parameter rather than copying its
address.
Warning: this feature is dangerous in that has to trust both
the signature and the underlying library routine to output a valid address
pointer; any discrepancy will likely cause a segmentation fault!
New opcode DCOP_DEREF (4) "dereferences" a pointer
to return the value pointed to. Using the getstring() function in the previous
example, if it was called with the parameter signature "p" instead of
">", to get the address directly, you could then get the value as
follows:
map1 buffer,s,0
map2 address,b,4
dlctl.opcode = DCOP_CALL
xcall DYNLIB, dlctl, "getstring(p)v",
address ! get ptr into address
dlctl.opcode = DCOP_DEREF
xcall DYNLIB, dlctl, address, buffer ! copy string pointed to by address
! into
buffer
This can be useful in dealing with functions that return a
structure containing pointers to strings, rather than the strings themselves.
But any time you are dealing with direct pointers like this, you run the risk
of a segmentation fault if there is any discrepancy between the expected and
actual parameters or behavior of the underlying function.
The string
containing the argument list was previously used in place, but since the area
is within the terminal system output buffer, it was subject to possible
corruption by other functions that use the output system. This could have
interfered with the operation of XGETARG(S). For example, in the following SBX
code, the second XGETARG might have returned incorrect information due to
potential sharing of the same buffer space with DEBUG.PRINT:
XGETARG 1,ARG1
DEBUG.PRINT
"ARG1 = "+ARG1
XGETARG 2,ARG2
This patch eliminates
the danger of such a conflict.
1610.1.2 |
Fix |
XTREE refinement: the force
popup bit in the XTR'XNAVMASK field (&h040) is now always cleared on
exit. Previously there were cases where it might be set, causing an
unexpected popup on the next reentry unless the application cleared the bit. |
1610.1.1 |
Fix |
XTREE SelChgExit
fix/refinement: SelChgExit was not working when navigating between editable
cells with the the keyboard. Clicking with the mouse was triggering the
SelChgExit, except on an editable cell in the first row. Note however that in
the case of cell editing validation, the validation exitcode is likely to
take precedence over the SelChgExit. |
1620.0.2 |
Fix |
Compiler bug fixes (edit 839):
Symbol definitions passed on the command line using /C:sym=value were being
ignored during the first pass of the /P and /PX processing. Also, the
compiler macros ABC_CURRENT_ROUTINE$ and ABC_CURRENT_MACRO$ were in some
cases creating an additional spurious macro "A" which might have
caused a spurious syntax error for a variable "A". |
1620.0.1 |
Add |
Add REF _Ref497757244 \h ASB Statement
DEFALIAS |
Compiler enhancement (edit 838): new statement DEFALIAS
allows aliases to be defined for the names of functions and procedures:
DEFALIAS <routine-alias>() = <real-routine>()
This can be a useful code management technique for isolating
lower level changes or variations in routines—due to differences in versions,
implementation, etc.—from the higher level application. For example, an
application may have many different discount calculation routines based on the
type of discount, some of which might be effectively the same. Rather than
forcing the higher level code to know which discounts are effectively the same,
or forcing you to maintain redundant routines which differ only by name, you
can use DEFALIAS to create aliases. For example, the following statement would
cause any subsequent references to the function Fn'Senior'Discount(qty,gender)
to be converted into references to the function Fn'AARP'Discount(qty,gender):
DEFALIAS Fn'Senior'Discount() = Fn'AARP'Discount()
Notes:
• Currently this applies
only to functions and procedures and not subroutines
• The empty set of
parentheses is mandatory for both the alias and the real routine name.
Currently the alias only affects the name; the arguments are passed through
without change.
• This is purely a
compiler-level mechanism and does not require any runtime support—i.e. IT is
backward compatible to all runtimes.
1619.1 |
Revise |
Relax runtime restriction on
passing a DIMX X0 array byref to an XCALL. |
1619.0 |
Revise |
DYNLIB.SBR enhancement: now supports up to four dynamic libraries simultaneously.
Previously it could only handle one at a time. |
1618.1 |
|
Apply all 6.4 patches thru
1555.6. |
1618.0.3 |
Revise |
LIBASHTLS.DLL refinement (now
1.2.210): Refresh/relink with the latest GnuTLS library version 3.6.0. For convenience,
copies of the GnuTLS binary download packages can be found in
http://www.microsabio.net/dist/other/gnutls. |
1618.0.2 |
|
Apply all 6.4 patches thru
1555.4. |
1618.0.1 |
New |
REF _Ref497035322 \h TCPX.SBR: Add Optional Parameter Sockary() |
xcall
TCPX, opcode, status, buffer, sockidx, flags, timer, hostname, sockary(1)
Argument 4
(normally sockport) is now interpreted as the index
into the sockary, rather than the socket itself. As in the normal case, the
TCPOP_ACCEPT calls expects the 4th argument to be the port to listen on.
The sockary()
parameter should be an array of up to 1025 ST_SOCKARY structures, defined (in
SOSFUNC:FNTCPXARY.BSI) as:
defstruct
ST_SOCKARY
map2 socket,b,3 ! socket value
map2 ready,b,1 ! TCPOP_CHECK sets this to 255 if ready
endstruct
The last element of
this array must be zero; this is how TCPX identifies the end of the array. In
most cases an application would have no need to access this array directly. If
you do want to access it directly, you should. Instead, use the utility
functions in use the utility functions in SOSFUNC:FNTCPXARY.BSI to provide
isolation from possible changes in the structure.
The main advantage
of using the sockary method is that it by setting the sockidx
parameter to 0, TCPX will perform certain operations (mainly TCPOP_CHECK and
TCPOP_CLOSE) on the entire set of open sockets in the array, rather than just
one socket at a time.
For TCPOP_CHECK, if
sockidx is zero, TCPX will wait on all of open
sockets until one of them is ready to read from, subject to the time limit set
by the timer parameter. If there is a socket ready,
it will return sockidx set to the index into the
array for that socket, so that a subsequent TCPOP_READ will read from that
socket. If multiple sockets are ready to read from, TCPX will use a round-robin
scheme so as to not unduly favor those sockets near the start of the array. It
will also return the status parameter set to the
number of sockets that are ready, allowing the application (optionally) to read
from them all by scanning sockary() for those with
the ready flag set. This may or may not be preferable to just calling
TCPOP_CHECK again and relying on it to return the sockidx
of the next ready socket.
For TCPOP_CLOSE, if
sockidx is zero, TCPX will close all of the open
sockets, and return status set to the number that
were closed.
For TCPOP_READ, if sockidx is zero, it will read from whichever socket is
available, although this is probably not useful except in very particular cases.
1617.0.4 |
|
Apply all 6.4 patches thru
1555.1 |
1617.0.3 |
Enhance |
ATE enhancement: Add AM62
emulation. |
1617.0.2 |
New |
INFLD enhancement: new Type
code ||` (vertical bar, vertical bar, grave) forces unconditional destructive
CR; text mode only. |
1617.0.1 |
Revise |
APEX toolbar design refresh:
rearrange the icons to make the grouping somewhat more logical and replace
all of the icon images for a more consistent style. |
1616.0.2 |
Enhance |
Compiler edit 834: Support .ARGTYP(@arg) and
.ARGSIZ(@arg). Concept is similar to that used for XPUTARG @arg (i.e. @arg is
treated essentiall as a macro for the argument number corresponding to the
argument arg as defined in the function/procedure definition or as retrieved
in an SBX using XGETARG(S).) No change to the runtime system required. |
1616.0.1 |
|
Apply all 6.4 patches thru
1554.7 |
1615.0.2 |
|
Sync up to several recent 6.4
patches. |
1615.0.1 |
Fix |
XPUTARG: outputting from an I variable
to an F4 or F6 from within a function or procedure was not working. Same as
6.4.1554.5. |
1614.0.2 |
Enhance |
|
1614.0.1 |
Enhance |
JOBTBL job status tracking:
current location counter is now being tracked. See JSTAT.LIT update above. |
1613.0 |
Revise |
Compiler edit 831: relax limitations on XPUTARG @VAR to
allow the same parameter number to be associated with multiple variables,
provided that the VAR the XPUTARG @VAR statement is never associated with
more than a single parameter #. For example: XGETARGS ONE,TWO,THREE XGETARG 2,DOS
! TWO and DOS now both associated with #2 ... XPUTARG @TWO
! Now allowed (e.g. 2,TWO); previously not |
|
|
(no additional changes for this version) |
612.4.3 |
Fix |
Main window background color
wasn't always being restored after darkening it during a blocking child
process. |
1612.4.2 |
Fix |
Clean up issues related to
ISAM file hooks and native specs. |
1612.4.1 |
Fix |
INPUT CSV: failure to de-quote
last field on line if there were trailing spaces after the last quote. Also
fix problems with inputting quoted fields into variables zero or one byte
larger than the dequoted data. |
1612.3 |
Revise |
APEX refinement: support
SEPARATOR lines in the APEX.CFG file to add a little space between groups of
custom extension buttons. Add a small space to separate the
print/find/preferences from the first custom button. |
1612.2 |
Fix |
PRINT.LIT 3.3(129): auto-logs
user into ASHCFG: if not already logged in. This solves problems with filespec
conversion when printing without a login, as may occur in APEX. |
1612.1 |
|
Migrate 6.4 patches 6.4.1553.5
thru 6.4.1553.7. |
1612.0 |
Revise |
APEX refinement: custom buttons can now use PNG format. |
1611.0 |
|
Migrate all 6.4 patches 6.4.1552.2
thru 6.4.1553.4. |
|
|
(no additional changes for this version) |
1610.1.3 |
Revise |
ERASE.LIT 3.4(131) now
disables the confirmation prompt when running from a submitted task under
UNIX, just as it does for CMD files. |
1610.1.2 |
Fix |
OPTIONS=FSPECNATIVE: wildcard
processing within LIT commands was generally failing to match any files when
the FSPECNATIVE option was set. |
1610.1.1 |
Fix |
SORTIT.SBR: specifying an
array by its first element, e.g. ARRAY(1), was not working for arrays of F4,
F6, or SCALE'd F8. Note that other data types were not affected, nor were
arrays of structures, nor were arrays passed by means of a higher-level
unformatted variable. |
1610.0.1 |
Add |
Windows UI Enhancement: add
Scrollback menu item to toggle visibility of the vertical scroll bar. Same as
CTRL+SHFT+UP. New internal menu identifier IDM_SCROLLBACK = 160 added to
ASHELL.DEF. |
1610.0.2 |
Add |
New
GUI interface command: AG_SCROLLBACK (109) allows program to hide, show, or
toggle the vertical scrollback bar. Syntax: ?
TAB(-10,AG_SCROLLBACK);op;chr(127); where
op is 0 (or empty) to disable/hide the vertical scroll bar, 1 to enable/show
it, and -1 to toggle it. There is no response. |
1610.0.3 |
Add |
AGCMD.LIT
1.0(105) enhanced to support AG_SCROLLBACK: .AGCMD AG_SCROLLBACK -1 ; toggle .AGCMD AG_SCROLLBACK 1 ; show/enable .AGCMD AG_SCROLLBACK 0 ; hide/disable |
1610.0.4 |
Add |
Scrollback-related
enhancements to LIT commands: the following commands now make the scroll bar
visible if the environment supports it (A-Shell/Win or ATE client 6.5.1610+)
and the output of the command causes the screen to scroll: COMPIL.LIT
1.1(134); DIR.LIT 3.3(162); DUMP.LIT 1.0(107); SET.LIT 1.2(161); SYSTAT.LIT
3.2(180); TYPE.LIT 1.0(112). |
1610.0.5 |
Fix |
DATES.SBR: opcode 3
(DTOP_DAYSAFTER) was failing to handle the negative case properly, returning
a large positive number instead of a negative number if date1 was before
date2. Problem was introduced around 6.3.1516. Same as 6.4.1551.7. |
1609.0 |
Add |
Add to XTREE new Advanced
Coldef Options REF _Ref487213192 \h ExportOptions |
|
|
(no additional changes for this version) |
Add to XTREE new Advanced Coldef Options:
ExportOptions=<options>
where <options> is a comma-delimited list of options
related to the export function. It has two defined options:
• Code: applies to ListX
or CellListX columns, causing the code rather than the description to be
exported to the CSV
• Descr (default):
export the description rather than the code.
As with most other Advanced Coldef Options it can be
associated with a zero-column in order to make it the default for all other
columns.
1608.0 |
Add |
Language enhancement: REF _Ref485832365 \h XPUTARG Name Reference #1 |
|
|
(no additional changes for this version) |
Language enhancement, compiler edit 828: Expand XPUTARG
@argname mechanism (see 1607.0) to work for SBXs. This is similar to the
XPUTARG @argname enhancement for functions (edit 825, 6.5.1607). Except that
while that enhancement used the function or procedure definition to associate
argument names with their ordinal numbers, this one uses the combination of
previously seen XGETARGS, XGETARG and XGETARGSBX statements.
To avoid the potential for misunderstandings or ambiguity,
the use of the XPUTARG @argname syntax will only be supported if there is a
perfect one-to-one relationship between argument names and ordinal numbers,
based on the XGETARG* statements seen previously at compile time. In other
words, if one argument variable is retrieved from different argument numbers in
separate XGETARG* statements, or one argument number is retrieved into multiple
variables, the XPUTARG @argname syntax will generate an "undefined or
ambiguous argument" error.
1607.4.3 |
Fix |
Compiler edit 827: • Compiling with /P or
/PX was resulting in spurious "undefined argument" errors in some
cases when using the new XPUTARG @arg syntax. See 6.5.1607.0. • When compiling with
/PX and /LF, unreferenced functions and procedures ending with a two-part
'END' token—e.g. "End Function" or "END PROCEDURE"—were
only writing the "END" to the LSX file, causing problems if the LSX
was later compiled. • The "{shaken
out by /px}" line in the body of such routines in the LSX file is now
properly commented out, allowing the LSX to be re-compiled without the /PX
switch. |
1607.4.2 |
Fix |
ATE/XTREE: the last byte of
the answer array was getting truncated under certain ATE optimization
scenarios, primarily when the answer array was too small to benefit from
compression. Same patch as 6.5.1551.2. |
1607.4.1 |
Fix |
SCALE: F,8 variables returned
from XCALL routines were not being scaled properly when the SCALE feature was
enabled. Same patch as 6.4.1551.3. |
1607.3 |
Fix |
MX_OCVT: starting in 6.5, the
hex version was returning 8 digits—i.e., with leading zeroes—instead of
removing the leading zeroes by default. |
1607.2 |
Fix |
Command line processing: the
ashell command line arguments -ba and -bc were not being processed correctly,
possibly resulting in a switch argument being included in the dot prompt
startup command. This was particularly noticeable in SUBMIT when using the
/BC or/BA switch with a buffer name that also matched a CMD or DO file name,
but could have had a variety of effects outside of the SUBMIT context. |
1607.1.3 |
Fix |
DYNLIB.SBR: output parameters
(using the "p" signature) were not being properly converted to I
variables. Same patch as 6.4.1551.0. |
1607.1.2 |
Fix |
INPUT LINE: it was incorrectly
removing leading/trailing quotes, like INPUT should but not INPUT LINE. Same
patch as 6.4.1551.0.2. |
1607.1.1 |
Fix |
SUBMIT.LIT 3.3(157) fixes a
bug which caused the list function ( /L ) to abort under some circumstances
with an "Error -1 reading job table". Same patch as 6.4. 1551.0.1. |
1607.0.2 |
Fix |
Compiler edit 826: the maximum
source code length of a function declaration was incorrectly set at about 512
instead of 3072 like all other source lines. |
1607.0.1 |
Add |
Language enhancement: REF _Ref485832365 \h \* MERGEFORMAT XPUTARG
Name Reference #1 |
Language enhancement, compiler
edit 825: XPUTARG now supports the ability to reference the parameter to be
returned by its name rather than by its number, using the following syntax:
XPUTARG @arg {=<expr>}
where arg must be one of the arguments in the function's (or
procedure's) formal parameter list. When identifying the parameter this way, <expr> becomes optional,
defaulting to the parameter's current value.
Identifying the parameters by
their names has two advantages over using the parameter numbers: 1) it makes
for more self-documenting code, and 2) it eliminates the need to adjust the
XPUTARG statements if you add, delete, or rearrange the function parameters,
thus eliminating a source of bugs.
For example:
function fn'foo(arg1 as f6, arg2 as b4) as i2
...
xputarg
@arg1 ! new: same as xputarg 1,
arg1
xputarg
@arg2=arg1*7 ! new: same as xputarg 2,
arg1*7
xputarg
arg2,arg1*7 ! old: value of arg2 is
arg # to return
xputarg 2,
-1 ! old: return -1 for 2nd arg
endfunction
Note the difference between the
second and third XPUTARG statements above (with and without the '@'). In the
former, we pass the value arg1*7 back for the argument whose name is arg2 (the
second argument). In the latter, we evaluate arg2 and use that as the argument
number to pass the arg1*7 value back to.
1606.2 |
Fix |
INFLD GUI: : the parentid parameter was being truncated
at 28 characters, causing when passing both the child and parent control ids
in alphanumeric form. The new limit allows for two control names each with a
maximum length of 24 characters, which is the system control name limit. |
1606.1.1 |
Fix |
(Linux) Remove circa-2003
patch to USING logic which counteracted a bug in a Linux library routine from
that era, which was causing a slight downward bias in rounding with USING
MASK operator. That bug has long since been resolved, resulting in the Linux
USING MASK rounding behavior having a slight upward bias compared to the
Windows version. Now they are the same. Same patch as 6.4.1550.8. |
1606.1.2 |
Fix |
(Linux) EFS workaround to ease
difficulty of updating from pre 6.1.1379 if using the default encryption key.
Add SBR=EFS1379 to MIAME.INI. Same patch as 6.4.1550.7 |
Add |
AG_WALLPAPER enhancement: new opcode
flags added for dialog wallpaper: +8 expand image
to fit dialog +16 stretch (distort) as needed to fit Previously, dialog wallpaper only supported opcode 0,
in which case the image was tiled as needed to fit the dialog. |
|
|
Fix |
Compiler edit 824: Certain
DEFSTRUCT arrangements were generating absurd numbers of bogus syntax errors. |
Fix |
Compiler edit 823: The DEFSTRUCT/MAP1 enhancement added
in compiler edit 821 was generally not working for ++include files; an
illegal dot within a MAP or DEFSTRUCT variable name wasn't being reported. |
|
1605.0 |
Add |
Language enhancement: added REF _Ref484670823 \h \* MERGEFORMAT Shortcut
Operators |
Compiler edit 822 language
enhancement adds new shortcut operators:
VAR |= expr !
equivalent to VAR = VAR or (expr)
VAR &= expr !
equivalent to VAR = VAR and (expr)
Similar to the existing combo
operations (+=,-=,*=,/=), these are just syntactic shortcuts to simplify common
statements, in this case, those involving setting and clearing bits in a flags
variable. For example:
To set specified bits:
FLAGS |= XTF_MODELESS ! FLAGS = FLAGS or XTF_MODELESS
FLAGS |= XTF_LEFT or XTF_RIGHT ! FLAGS = FLAGS or (XTF_LEFT or XTF_RIGHT)
To clear all but specified bits:
FLAGS &= XTF_MODELESS ! FLAGS = FLAGS and XTF_MODELESS
To clear specified bits:
FLAGS &= NOT XTF_MODELESS ! FLAGS = FLAGS and not XTF_MODELESS
Notes:
• As with the other combo
operations, these are transplants from the C language.
• When setting /
clearing bits in a flags variable, it is almost always better to use the
bitwise operators (AND,OR) instead of the arithmetic operators (+-), since the
former are idempotent (i.e. can be used redundantly without changing the
result).
• This is purely a
compiler enhancement and has no effect on runtime compatibility for the
compiled programs. So you may want to use this version of the compiler even if
continuing to use the 6.4 runtime.
1604.0 |
Add |
XTREE enhancement: new control
for REF _Ref484670987 \h Radio Button / Check Box Colors |
|
|
(no additional changes for this version) |
XTREE enhancement: new Advanced
Coldef Options for radio/checkbox state-specific background colors:
RGBbg0=r,g,b
RGBbg1=r,g,b
RGBbg2=r,g,b
These act similarly to other
RGBbg* options, except here they only affect radio buttons and checkboxes,
causing the specified background color to be applied according to the state of
the cell (0=cleared, 1=set, 2=indeterminate).
Notes:
• The effect is immediate;
there is no need to exit / reload the tree.
• It only applies to
cells that have a visible checkbox or radio button.
• It applies equally
whether the cell is enabled or disabled.
• Unlike the generic
RGBbg= clause, there is no optional index parameter.
• When combined with
other RGBbg clauses that affect the same column, the new state-specific
versions take precedence. For example, if a checkbox column has the options
RGBbg=200,200,200~RGBbg1=255,200,200~, then the cells containing a checkmark (state=1)
will get the RGBbg1 value, while all the other cells (clear, indeterminate, or
no checkbox) will use the standard RGBbg value.
See EXLIB [908,21] sample program
XTRA6 for an example.
Fix |
ISAMA record locking: the conversion of the record
locking system to support 64 bit ISAMA record numbers wasn't working
properly, resulting in spurious record-not-locked errors. |
|
1603.0 |
Add |
Language
enhancement: REF _Ref483936142 \h \* MERGEFORMAT DEFSTRUCT Can Include MAP1 |
Beginning
with compiler edit 821, a DEFSTRUCT may now include a MAP1 statement as the
first member of the structure. The result
is equivalent to the combination of the DEFSTRUCT without the MAP1 and the
ontained MAP statements (including the MAP1) without the DEFSTRUCT. This is
useful when migrating legacy code from traditional MAP1-style structures to
DEFSTRUCT-style structures, eliminating the need to either convert them all at
once or to maintain parallel versions of the structure layouts.
Eliminating the need to maintain
parallel copies of mapped structure layouts was, after all, one of the primary
motivations for the DEFSTRUCT concept in the first place.
For example, say you have a common
include file with this record layout:
MAP1 CUST ! mapped customer record
MAP2 ID,S,8
MAP2 NAME,S,30
...
The equivalent structure
definition and mapped instance would be:
DEFSTRUCT
ST_CUST ! customer structure
MAP2 ID,S,8
MAP2
NAME,S,30
...
ENDSTRUCT
MAP1 CUST,ST_CUST ! mapped instance of customer structure
The only problem with the above is
that all existing references any of the members of the CUST record would need
to be converted (e.g. from ID to CUST.ID, etc.) If you didn't want to go
through all your programs at once, you instead could leave the traditionally
mapped CUST record intact and rename the new structure version, i.e:
DEFSTRUCT ST_CUST ! customer structure
MAP2 ID,S,8
MAP2 NAME,S,30
...
ENDSTRUCT
MAP1 SCUST,ST_CUST
! mapped instance of
customer structure
Now you would have two equivalent
record layouts, CUST (ID, NAME, ...) SCUST (SCUST.ID, SCUST.NAME, ...). The
main problem with that, aside from the resulting lack of syntax consistancy, is
that if you modify the layout, you have to remember to modify both versions
(the MAP1 CUST version and the DEFSTRUCT ST_CUST version).
This new compiler enhancement
eliminates that problem by using a single set of MAP statements to generate
both the structure definition and the traditional mapped variable definition,
i.e.
DEFSTRUCT ST_CUST
MAP1 CUST
MAP2 ID,S,8
MAP2 NAME,S,30
...
ENDSTRUCT
MAP1
SCUST,ST_CUST ! mapped instance of
customer structure
Now the traditional record
variable CUST and the new structure version SCUST are guaranteed to always have
identical formats.
Note that this is purely a
compiler enhancement and has no effect on runtime compatibility for the
compiled programs. So you may want to use this version of the compiler even if
continuing to use the 6.4 runtime.
1602.0.4 |
Add |
REF _Ref483963181 \h \* MERGEFORMAT XTREE
with XTF2_ANSEQDATA |
1602.0.3 |
Add |
REF _Ref483963814 \h \* MERGEFORMAT XTREE
Multi-Select |
1602.0.2 |
Add |
REF _Ref483936964 \h \* MERGEFORMAT XTREE
Drag-Drop Enhancement |
1602.0.1 |
Revise |
INFLD GUI enhancement: The
warning bubble that otherwise appears in password fields when the CAPS LOCK
key is on is now suppressed for fields with the fold upper case
("^" or "|u") type code. It may also be suppressed with
the new type code "||p". The first part of this also implemented in
1550.5. |
XTREE drag-drop multi-level
enhancement: when dragging a parent item whose children are all collapsed, the
entire set (parent + children) is now dragged as a single unit. Previously the
hierarchical levels were ignored and each item was dragged irrespective of its
level.
Note the following:
• This only applies when
the children are collapsed (not visible). If they are expanded (visible), then
the behavior reverts to ignoring the levels and treating each item
independently.
• Even though the
parent/child group may be moved as a unit, depending on where it is dropped, it
may still disrupt and/or merge with existing parent/child groups. For example,
if the parent is dropped between two children of another group, the target
parent/child group will be split, with the children above the drop point
remaining with their prior parent, and the children below the drop point
joining the parent/child group being dropped. (The question of whether to limit
the legal drop points to avoid this kind of side-effect is under review.)
• Moving a parent/child
group does not affect their absolute levels in the hierarchy. An item at level
x will remain at level x, regardless of where it is moved to. In other words, a
parent cannot be converted into a child of another parent via drag-drop. The
application could implement such an effect though, by detecting the drop via
the Advanced Coldef Option DropExit=###, using the SELECTION and ORG'ROW fields
in the answer array to identify the items that were moved and where they were
moved to, and adjusting the level fields up or down before re-entering the tree
with XTROP_REPLACE.
• There is currently no
Undo operation for drag-drop—although again, the application could implement
this by reloading the tree contents from a previously saved copy of the data
array.
Developers are therefore urged to
exercise caution when implementing drag-drop, especially in conjunction with
multi-level trees.
XTREE drag-drop multi-select
enhancement: XTF_MSEL and
XTF_DRAGDROP may now be
combined, allowing the user to select and drag multiple items at a time.
Notes:
• As in the
single-select, multi-level case, if a parent item with collapsed children is
dragged, then all of its children are dragged along with the parent. All of the
warnings listed above for the single-select multi-level case apply here as
well, the possibilities for chaos becoming more exacerbated by the possibility
of dragging a heterogenous collection of individual and multi-level items in
one operation.
• Non-contiguous items
may be dragged as a group; they become contiguous at the drop point.
XTREE enhancement: XTF2_ANSEQDATA may now be used with XTF_MSEL and/or XTF_DRAGDROP. This requires that the data array elements start with the
special SELECTION, and if applicable, ORG'ROW, fields as would be required in
the answer array (see XTF_DRAGDROP
topic for details). The remaining fields in each data array element can be laid
out in any order, as is normally the case with the data array and with XTF2_ANSEQDATA. The following examples may help clarify this:
defstruct ST_XTDATA_AM
! data elements with ANSEQDATA and MSEL
map2
SELECTION,S,1 ! (mandatory) selection
flag
<remaining
fields in any order>
endstruct
defstruct ST_XTDATA_AD
! data elements with ANSEQDATA, DRAGDROP
map2
ORG'ROW,S,4 ! (mandatory) drag/drop
cross reference
map2 SELECTION,S,1 ! (mandatory) selection flag
<remaining
fields in any order>
endstruct
The layout requirements for the
combination of multi-select and drag-drop is the same as for drag-drop alone.
1601.0 |
|
Migrate 6.4 patches thru
6.4.1550.4 |
1600.0.1 |
|
(Linux) Begin internal changes
to support 64 bit executable. The ashell executable is usable, but lacks
several features, including support for collections. It does however support
MSODBC/Linux for connecting to SQL Server, which is only available in 64 bit
version. |
1600.0.2 |
|
(Linux) ASQL ODBC connector
1.4.111 64-bit preliminary release. |
1633.0.1 |
Collections enhancement:
REF
_Ref508549434 \h \* MERGEFORMAT Writable Iterators |
1629.0 |
Add language feature: REF _Ref506585719 \h INPUT CSV into a Dynamic Array |
1628.1.1 |
Clean up various inconsistencies in the SCALE system. SBXs
now inherit the scale of the caller, overriding any SCALE specified in the
SBX. There is no longer any point in specifying SCALE within an SBX. |
1628.0.2 |
Compiler edit 852 enhancement: increase maximum length of
a single line of source code, including continuations, from 3K to 16K. Also
increase the limit on the number of xcall / function / procedure parameters
from 128 to 1024. |
Compiler edit
845: REF
_Ref503939891 \h STRSIZ-related refinements |
|
1624.0.2 |
Compiler edit
846: .CLEAR enhancement: .CLEAR ARY()
now supported for all types of arrays; previously it only applied to
collections. The details of the clearing operation depend on the nature of
the array being clear, described in further detail below. Warning: using
.CLEAR with any array type other than a collection (e.g. ORDMAP) requires that
runtime version 6.5.1624 or above. Otherwise it will generate an Unsupported
Function error. |
1624.0.3 |
REF
_Ref503939992 \h New
CLEAR (ARY) Options |
1620.0.1 |
Add REF
_Ref497757244 \h ASB
Statement DEFALIAS |
1616.0.2 |
Compiler edit 834: Support .ARGTYP(@arg) and
.ARGSIZ(@arg). Concept is similar to that used for XPUTARG @arg (i.e. @arg is
treated essentiall as a macro for the argument number corresponding to the
argument arg as defined in the function/procedure definition or as retrieved
in an SBX using XGETARG(S).) No change to the runtime system required. |
1613.0 |
Compiler edit 831: relax limitations on XPUTARG @VAR to
allow the same parameter number to be associated with multiple variables,
provided that the VAR the XPUTARG @VAR statement is never associated with
more than a single parameter #. For example: XGETARGS ONE,TWO,THREE XGETARG 2,DOS
! TWO and DOS now both associated with #2 ... XPUTARG @TWO
! Now allowed (e.g. 2,TWO); previously not |
1608.0 |
Language enhancement: REF _Ref485832365 \h XPUTARG Name Reference #1 |
1607.0.1 |
Language enhancement: REF _Ref485832365 \h \* MERGEFORMAT XPUTARG
Name Reference #1 |
1605.0 |
Language enhancement: added REF _Ref484670823 \h \* MERGEFORMAT Shortcut
Operators |
1603.0 |
Language enhancement: REF _Ref483936142 \h \* MERGEFORMAT DEFSTRUCT
Can Include MAP1 |
1638.0 |
New subroutine REF _Ref517859580 \h MX_SRCHPATH |
|
1636.0.6 |
Various REF _Ref515703103 \h HTTP.SBR Enhancements |
|
1635.0.2 |
Enhancement to REF _Ref514442175 \h Add HMACs to CRYPTO.SBR |
|
1628.0.1 |
REF
_Ref506576878 \h Redesign
Subroutine Parameter Passing |
|
1621.0.2 |
New REF
_Ref499911389 \h DYNLIB.SBR
Opcode DCOP_DEREF |
|
1621.0.1 |
New REF
_Ref499911570 \h DYNLIB.SBR
Parameter Type '>' |
|
1619.0 |
DYNLIB.SBR enhancement: now supports up to four dynamic
libraries simultaneously. Previously it could only handle one at a time. |
|
1618.0.1 |
REF
_Ref497035322 \h TCPX.SBR:
Add Optional Parameter Sockary() |
|
1610.0 |
DATES.SBR: opcode 3 (DTOP_DAYSAFTER) was failing to handle
the negative case properly, returning a large positive number instead of a
negative number if date1 was before date2. Problem was introduced around
6.3.1516. Same as 6.4.1551.7. |
1639.0.4 |
REF
_Ref517795036 \h \* MERGEFORMAT Expanded DEBUG Options
in SET.LIT |
1614.0.2 |
JSTAT.LIT 3.2(111): status now shows PC location counter
for target job, vastly improving the ability to track the activity of the
target even if it is running a program without many line numbers—provided you
have the LSX file for the target program. |
1610.0.3 |
AGCMD.LIT 1.0(105) enhanced to support AG_SCROLLBACK: .AGCMD AG_SCROLLBACK -1 ; toggle .AGCMD AG_SCROLLBACK 1 ; show/enable .AGCMD AG_SCROLLBACK 0 ; hide/disable |
1610.0.4 |
Scrollback-related enhancements to LIT commands: the
following commands now make the scroll bar visible if the environment
supports it (A-Shell/Win or ATE client 6.5.1610+) and the output of the
command causes the screen to scroll: COMPIL.LIT 1.1(134); DIR.LIT 3.3(162);
DUMP.LIT 1.0(107); SET.LIT 1.2(161); SYSTAT.LIT 3.2(180); TYPE.LIT 1.0(112). |
1621.0.3 |
REF
_Ref499911303 \h AG_XFUNC
Corruption Avoidance |
1610.0.2 |
New GUI interface command: AG_SCROLLBACK (109) allows
program to hide, show, or toggle the vertical scrollback bar. Syntax: ?
TAB(-10,AG_SCROLLBACK);op;chr(127); where op is 0 (or empty) to
disable/hide the vertical scroll bar, 1 to enable/show it, and -1 to toggle
it. There is no response. |
1606.0 |
AG_WALLPAPER enhancement: new opcode flags added for dialog
wallpaper: +8 expand image
to fit dialog +16 stretch (distort) as needed to fit Previously, dialog wallpaper
only supported opcode 0, in which case the image was tiled as needed to fit
the dialog. |
1617.0.2 |
INFLD enhancement: new Type code ||` (vertical bar,
vertical bar, grave) forces unconditional destructive CR; text mode only. |
1602.0.1 |
INFLD GUI enhancement: The
warning bubble that otherwise appears in password fields when the CAPS LOCK
key is on is now suppressed for fields with the fold upper case
("^" or "|u") type code. It may also be suppressed with
the new type code "||p". The first part of this also implemented in
1550.5. |
1637.0.1 |
XTREE enhancement: footer text (XTR'SHOWFOOTER) may now
include embedded CRLF line breaks in order to show multiple lines (same idea
as for headers). For example: coldef += "1~15~Header::> Footer1" +
chr(13)+chr(10)+"Footer2#~~" |
1636.0.1 |
XTREE enhancement: new REF _Ref515302731 \h Advanced Coldef Option RGBfgbg |
1632 |
Add XTREE popup commands REF _Ref508549681 \h $CBSETX, $CBRSTX, $CBUNDOX |
1631.0.1 |
Add REF _Ref507778316 \h XTREE Auto-Sum Column Footers |
1631.0.2 |
Add REF
_Ref507779024 \h XTREE
Lookup-and-Fill |
1627.0 |
Add REF
_Ref506575838 \h New
Advanced Coldef Options |
1626.0.3 |
Add XTREE REF _Ref506575228 \h PopupMenu Command $EXPCSV2XL |
1626.0.1 |
Add values for the XTREE REF _Ref506575323 \h ExportOptions Advanced Coldef Directive |
1622.0 |
XTREE enhancement: CellList id codes can now include both
upper and lower case characters, extending the total range from 26 (a-z) to
52 (a-z, A-Z). |
1609.0 |
Add to XTREE new Advanced Coldef Options REF _Ref487213192 \h ExportOptions |
1604.0 |
XTREE enhancement: new control
for REF _Ref484670987 \h \* MERGEFORMAT Radio
Button / Check Box Colors |
1602.0.4 |
REF _Ref483963181 \h \* MERGEFORMAT XTREE
with XTF2_ANSEQDATA |
1602.0.3 |
REF _Ref483963814 \h \* MERGEFORMAT XTREE
Multi-Select |
1602.0.2 |
REF _Ref483936964 \h \* MERGEFORMAT XTREE
Drag-Drop Enhancement |
1625.0.1 |
ATE-related server-side enhancement: .msi packages are now
supported along with .exe files in the A-Shell startup search for updates
from the %MIAME%/atesetup directory. |
1639.2.1 |
Tracing refinement: remove limit on individual output
message length when outputting to the terminal or to a specific file (see SET
TRACE OUTPUT below). Previously the limit was 800 bytes. Note that the
compiler still imposes a limit of 16K per statement, and the debug message
window and ashlog.log outputs impose much smaller limits of their own. |
1639.0.8 |
Language runtime refinement: REF _Ref517798057 \h Substring Assignment |
1639.0.7 |
Compiler enhancement, edit 862: support the /NOTRC option
(or -notrc when using the standalone compiler executable). |
1639.0.6 |
COMPIL.LIT/OCMPIL.LIT/COMPLP.LIT 1.1(135) enhancement: support
/NOTRC switch to ignore all trace related statements during compilation
(++pragma TRACE_xxx, TRACE.xxx, DEBUG.xxx).
|
1639.0.5 |
REF
_Ref517798176 \h ++PRAGMAs
Support Enhanced Tracing |
1639.0.3 |
Tracing enhancement: new macro $L may be inserted in the
trace message to display the current location counter (as a six digit hex
number, matching the format used in the LSX file). |
1639.0.2 |
REF
_Ref517794966 \h Expanded
xxxxxx.PRINT and xxxxxx.PAUSE statements |
1639.0.1 |
New A-Shell/Windows command line switch: -ntts . This has
the same effect as adding OPTIONS=NTTS to the miame.ini file, but is much
more convenient in situations where you need that feature for just a couple
of sessions (such as for services). |
1637.4.2 |
INPUT CSV #CH, ARY() refinement: an empty element is now
added to the end of the array if the input data ends with a comma. So for
example, the data line { one,two, } will return ARY() with an extent
of 3, with the last field empty. Note that it is still the case that an empty
line will return an array with a zero extent. |
1637.0.3 |
A new REF _Ref517860236 \h GDI Printing Directive Option |
1636.0.4 |
The starting key in a FOREACH statement may now
be any kind of expression. |
1635.1 |
REF
_Ref514441665 \h Parameter
Passing Refinement |
1635.0 |
Add new REF _Ref514076940 \h GDI Printing Directive SETTRANSFORM |
1631.0.4 |
VUE refinement, edit 371: maximum
supported line length now takes into account the longest line in the entire
file being loaded. To this we add 4K, but in no case will the line length
limit be less than 8K. Previously it only looked at the first 100 lines, and
then added 1K, with an overall minimum limit of 4K. |
1630.0.1 |
REF
_Ref506904724 \h SQLOP_FETCH_ROW
Enhancement |
1625.0.1 |
ATE-related server-side enhancement: .msi packages are now
supported along with .exe files in the A-Shell startup search for updates
from the %MIAME%/atesetup directory. |
1624.0.6 |
(Windows) Remove static dependencies on ODBC32.DLL,
ODBCCP32.DLL, NETAPI32.DLL, RPCRT4.DLL, IPHLPAPI.DLL, DNSAPI.DLL,
OLEAUT32.DLL, CRYPT32.DLL, COMCTL32.DLL, WININET.DLL, WS2_32.DLL. These
standard Windows libraries and now loaded dynamically if and when needed.
There is no change in outward behavior, except possibly to shave a few
nanoseconds from the initial launch, and to delay any errors caused by
missing DLLs to the point where they are really needed. |
1623.0.1 |
REF
_Ref502165395 \h Collections
Passing |
1617.0.3 |
ATE enhancement: Add AM62 emulation. |
1617.0.1 |
APEX toolbar design refresh: rearrange the icons to make
the grouping somewhat more logical and replace all of the icon images for a
more consistent style. |
1612.0 |
APEX refinement: custom buttons can now use PNG format. |
1610.0.1 |
Windows UI Enhancement: add Scrollback menu item to toggle
visibility of the vertical scroll bar. Same as CTRL+SHFT+UP. New internal
menu identifier IDM_SCROLLBACK = 160 added to ASHELL.DEF. |
1600.0.1 |
(Linux) ASQL ODBC connector
1.4.111 64-bit preliminary release. |
1600.0.2 |
(Linux) Begin internal changes
to support 64 bit executable. The ashell executable is usable, but lacks
several features, including support for collections. It does however support
MSODBC/Linux for connecting to SQL Server, which is only available in 64 bit
version. |