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: 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 |
|
1639.0.4 |
New |
|
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 |
|
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 MX_SRCHPATH searches for a file in the system path. |
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 GDI Printing Directive Option allows the x,y coordinates in all //GDI directives to be expressed relative to the current cursor position. |
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 Advanced Coldef Option RGBfgbg provides capability to specify foreground and background colors for individual cells. |
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 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 |
|
A-Shell Release Notes Version 6.5.1635.0 (13 May 2018) | ||
1635.0.2 |
New |
Enhancement to Add HMACs to CRYPTO.SBR, update ASHNET.DLL to 1.11.160. |
1635.0.1 |
New |
Add new 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: 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 $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 |
|
1631.0.1 |
New |
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 |
|
1630.0.1 |
New |
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: 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 |
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 |
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 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 |
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 |
|
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 |
|
1624.0.2 |
Revise |
|
1624.0.1 |
Revise |
Compiler edit 845: 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 |
Collections Passing: Collections can now be passed by reference in an XCALL to an SBX |
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 |
|
1621.0.2 |
New |
New DYNLIB.SBR Opcode DCOP_DEREF "dereferences" a pointer to return the value pointed to. |
1621.0.1 |
New |
New DYNLIB.SBR Parameter Type '>' may be used to identify an indirect output string parameter. |
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 |
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 |
TCPX.SBR: Add Optional Parameter Sockary() to manage an array of sockets. |
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 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: 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, 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 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 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 |
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 |
|
1602.0.3 |
Add |
|
1602.0.2 |
Add |
|
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. |
make sure anything entered below also gets into Compiler Edit History section of LIT….COMPIL.
1633.0.1 |
Collections enhancement: Writable Iterators |
1629.0 |
Add language feature: 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: 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 |
|
1620.0.1 |
|
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: XPUTARG Name Reference #1. |
1607.0.1 |
|
1605.0 |
Language enhancement: added Shortcut Operators. |
1603.0 |
1638.0 |
New subroutine MX_SRCHPATH searches for a file in the system path. |
|
1636.0.6 |
Various HTTP.SBR Enhancements. |
|
1635.0.2 |
Enhancement to Add HMACs to CRYPTO.SBR, , update ASHNET.DLL to 1.11.160. |
|
1628.0.1 |
| |
1621.0.2 |
New DYNLIB.SBR Opcode DCOP_DEREF "dereferences" a pointer to return the value pointed to. |
|
1621.0.1 |
New DYNLIB.SBR Parameter Type '>' may be used to identify an indirect output string parameter. |
|
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 |
TCPX.SBR: Add Optional Parameter Sockary() to manage an array of sockets. | |
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 |
|
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 |
|
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 Advanced Coldef Option RGBfgbg provides capability to specify foreground and background colors for individual cells. |
1632 |
Add XTREE popup commands $CBSETX, $CBRSTX, $CBUNDOX. |
1631.0.1 |
|
1631.0.2 |
|
1627.0 |
Add New Advanced Coldef Options to XTREE. |
1626.0.3 |
Add XTREE PopupMenu Command $EXPCSV2XL |
1626.0.1 |
Add values for the XTREE 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 ExportOptions. |
1604.0 |
XTREE enhancement: new control for Radio Button / Check Box Colors. |
1602.0.4 |
|
1602.0.3 |
|
1602.0.2 |
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: 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 |
|
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 |
|
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 GDI Printing Directive Option allows the x,y coordinates in all //GDI directives to be expressed relative to the current cursor position. |
1636.0.4 |
The starting key in a FOREACH statement may now be any kind of expression. |
1635.1 |
|
1635.0 |
Add new 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 |
|
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 |
Collections Passing: Collections can now be passed by reference in an XCALL to an SBX |
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. |
|
A-Shell 6.5 does not yet include any changes that should be listed in this category. |
|
A-Shell 6.5 does not yet include any changes that should be listed in this category. |
|
A-Shell 6.5 does not yet include any changes that should be listed in this category. |
|
A-Shell 6.5 does not yet include any changes that should be listed in this category. |