Ty Griffin devnotes65-1512-template.dot Ty Griffin 2 940 2018-01-01T05:07:00Z 2018-06-27T23:36:00Z 2018-06-27T23:36:00Z 1 15927 90785 MicroSabio 756 212 106500 16.00 false false false EN-US X-NONE X-NONE 0 C:\Users\alpac\OneDrive\1MS\doc\2main\65devnotes.d2h

Introduction

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).

 

1639 *** 26 June 2018

A-Shell Release Notes Version 6.5.1639.2 (26 Jun 2018)

1639.2.3

Fix

SET.LIT 1.2(163): eliminate some trace messages left in while testing the tracing related enhancements in SET.LIT 1.2(162).

1639.2.2

Fix

Compiler edit 863: trace statements involving more than one comma-delimited term, of which at least one was a quoted string constant, where being formatted in a confusing way.

1639.2.1

Revise

Tracing refinement: remove limit on individual output message length when outputting to the terminal or to a specific file (see SET TRACE OUTPUT below). Previously the limit was 800 bytes. Note that the compiler still imposes a limit of 16K per statement, and the debug message window and ashlog.log outputs impose much smaller limits of their own.

A-Shell Release Notes Version 6.5.1639.1 (25 Jun 2018)

1639.1

Fix

AUI: Click strings using the prefix chr(7)+chr(250) were not being recognized by XTREE. Problem introduced after 6.5.1627.

A-Shell Release Notes Version 6.5.1639.0 (24 Jun 2018)

1639.0.8

New

Language runtime refinement:  REF _Ref517798057 \h Substring Assignment 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500310037003700390038003000350037000000 .

1639.0.7

New

Compiler enhancement, edit 862: support the /NOTRC option (or -notrc when using the standalone compiler executable).

1639.0.6

New

COMPIL.LIT/OCMPIL.LIT/COMPLP.LIT 1.1(135) enhancement: support /NOTRC switch to ignore all trace related statements during compilation (++pragma TRACE_xxx, TRACE.xxx, DEBUG.xxx). 

1639.0.5

New

 REF _Ref517798176 \h ++PRAGMAs Support Enhanced Tracing 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500310037003700390038003100370036000000 .

1639.0.4

New

 REF _Ref517795036 \h Expanded DEBUG Options in SET.LIT 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500310037003700390035003000330036000000 .

1639.0.3

New

Tracing enhancement: new macro $L may be inserted in the trace message to display the current location counter (as a six digit hex number, matching the format used in the LSX file).

1639.0.2

New

 REF _Ref517794966 \h Expanded xxxxxx.PRINT and xxxxxx.PAUSE statements 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500310037003700390034003900360036000000 .

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).

 

Expanded xxxxxx.PRINT and xxxxxx.PAUSE statements

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.)

Expanded DEBUG Options in SET.LIT

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

 

++PRAGMAs Support Enhanced Tracing

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.

Substring Assignment

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.

 

 

 

 

 

 

1638 — 12 June 2018

A-Shell Release Notes Version 6.5.1638.0 (12 Jun 2018)

1638.0

New

New subroutine  REF _Ref517859580 \h MX_SRCHPATH 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500310037003800350039003500380030000000 searches for a file in the system path.

 

MX_SRCHPATH

New subroutine MX_SRCHPATH (191) searches for a file in the system path.

xcall MIAMEX, MX_SRCHPATH, file, foundpath

Parameters

file  (String)  [in]

filename to search for (no wildcards or directory)

foundpath  (String)  [out]

returns "" if not found, else the full path.

Comments

The search path is system dependent, but normally includes the current directory, the directory from which the A-Shell executable was loaded, plus all the directories included in the PATH environment variable.

One use would be to check whether a particular external command exists before attempting to launch it via HOSTEX.SBR.

 

1637 *** 12 June 2018

A-Shell Release Notes Version 6.5.1637.4 (12 Jun 2018)

1637.4.2

Revise

INPUT CSV #CH, ARY() refinement: an empty element is now added to the end of the array if the input data ends with a comma. So for example, the data line { one,two, } will return ARY() with an extent of 3, with the last field empty. Note that it is still the case that an empty line will return an array with a zero extent.

1637.4.1

Fix

XPUTARG: putting a null string ("") to an uninitialized dynamic variable was generating a spurious error 3. Problem was introduced in 1635.1.

A-Shell Release Notes Version 6.5.1637.3 (11 Jun 2018)

1637.3.2

Fix

Compiler edit 860: compiler was failing to flag a syntax error for WRITECD and WRITETD statements lacking a comma or semicolon between each field. For example:

WRITECD #CH, A, B  C

This was mostly likely to occur accidentally when the statement was broken on to multiple lines. The result was that all the fields would be output, but there would be a missing delimiter in the output line matching the location of the missing comma in the input line.

Note that probably this should be applied to all forms of PRINT statements, but a space between PRINT arguments has long been treated equivalently to a semicolon, which might actually be the understanding and desired behavior for some programmers, so we're going to leave it that way for the traditional PRINT statements.

1637.3.1

Fix

INPUT CSV: null fields were being ignored when inputting into a base array. For example, if the data contained { field1,,field3 }, then the statement { input csv #ch, ary() } was ignoring the null second field and loading the third field (field3) into ary(2).

A-Shell Release Notes Version 6.5.1637.2 (08 Jun 2018)

1637.2

Fix

INPUT CSV: when inputting into an X type variable, quoted fields were ending up with a spurious quote character on the end. This was mainly an issue when inputting into a dynamic array reference (see 1629.0)since it requires use of the X type; otherwise string or numeric types would mostly likely be used.

A-Shell Release Notes Version 6.5.1637.1 (04 Jun 2018)

1637.1

Fix

XTREE: The RGBfgbg foreground color was not properly overriding the default red foreground for negative values in numeric columns.

A-Shell Release Notes Version 6.5.1637.0 (03 Jun 2018)

1637.0.6

Fix

KILL.LIT 2.2B(126) works around a problem in which a loophole in MX_GETENV (see above) might cause it to hang.

1637.0.5

Fix

Tracing: certain traces were causing interference with other operations returning string values. For example, the MALLOC trace was causing MX_GETENV to return the terminal device instead of the correct value.

1637.0.4

Fix

MX_GETENV: when retrieving the entire list of environment variables into a dynamic string, the last several characters were being truncated.

1637.0.3

New

A new  REF _Ref517860236 \h GDI Printing Directive Option 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500310037003800360030003200330036000000 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 Directive Option

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.)

 

1636 — 26 May 2018

A-Shell Release Notes Version 6.5.1636.0 (26 May 2018)

1636.0.1

New

XTREE enhancement: new  REF _Ref515302731 \h Advanced Coldef Option RGBfgbg 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500310035003300300032003700330031000000 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  REF _Ref515703103 \h HTTP.SBR Enhancements 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500310035003700300033003100300033000000 .

 

Advanced Coldef Option RGBfgbg

XTREE enhancement: new Advanced Coldef Option RGBfgbg provides capability to specify foreground and background colors for individual cells. The setup is similar to that for the cformat code B, whereby the first space of the cell is reserved for an optional code that references an RGB color, except that in this case, the color reference is to a pair of RGB colors (foreground and background).

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.

FOREACH Enhancement

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.

 

HTTP.SBR Enhancements

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.

 

1635 *** 17 May 2018

A-Shell Release Notes Version 6.5.1635.1 (17 May 2018)

1635.1

Revise

 REF _Ref514441665 \h Parameter Passing Refinement 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500310034003400340031003600360035000000 .

A-Shell Release Notes Version 6.5.1635.0 (13 May 2018)

1635.0.2

New

Enhancement to  REF _Ref514442175 \h  \* MERGEFORMAT Add HMACs to CRYPTO.SBR 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500310034003400340032003100370035000000 , update ASHNET.DLL to 1.11.160.

1635.0.1

New

Add new  REF _Ref514076940 \h  \* MERGEFORMAT GDI Printing Directive SETTRANSFORM 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500310034003000370036003900340030000000 .

 

Parameter Passing Refinement

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.

 

Add HMACs to CRYPTO.SBR

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$

 

GDI Printing Directive SETTRANSFORM

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 — 04 May 2018

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 — 15 April 2018

1633.5

Fix

ATE/ATSD AUXLOC printing refinement: a server-side printer init file containing DEVICE=PROMPT: will now be interpreted as DEVICE=AUXLOC:xxxxxx (where xxxxxx is the printer init file name), rather than DEVICE=AUXLOC:PROMPT: as it was before. Also, on the client side, ATE will look for an existing ASHCFG:PROMPT.PQI or SYS:PROMPT.INI in the case of DEVICE=PROMPT:. Both changes make it somewhat easier for the application to supply printer-independent configuration options in the printer init file that work even when the user selects a different printer from the Windows printer dialog.

1633.4

Fix

XGETARGSBX bug fix: was failing to support arrays passed byref.

1633.3

Fix

ATE refinement: client-side IATIMEOUT handler now recognizes screen output and other server-client messages as activity.

1633.2.2

Fix

SCALE bug fix: .IFELSE() function return value was getting upscaled twice. Same patch as 6.4.1557.2.

1633.2.1

Fix

XTREE print preview bug fix/refinement: extend the logic of the 1626.2 for the problem truncating the last character of some columns in the print version so that it also applies to the headers and footers. And, fix the problem where the headers became corrupted after exiting from the print preview display. (Same patch as 6.4.1557.2)

1633.1.2

Fix

XTREE bug fix: an error trap (Basic error #69) intended to handle an otherwise sticky ATE communication error was inadvertently being triggered for certain unrelated conditions.

1633.1.1

Fix

XTREE bug fix: failing to specify the FILIDX parameter for file-based mode was causing XTREE to crash.

1633.0.3

Fix

ATE-related improvements to handling of SIGHUP. Any call to AUI_EVENTWAIT, XTREE, XTEXT, INFLD, or any ATE command requiring a response, now trigger error 250. Previously, some of these operations were not being treated as input, causing delays or complications with an otherwise clean exit.

1633.0.2

Fix

Compiler edit 858: very long FOR statements were potentially failing to compile correctly due to an overflow, without triggering a compiler error.

1633.0.1

New

Collections enhancement:   REF _Ref508549434 \h  \* MERGEFORMAT Writable Iterators 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300038003500340039003400330034000000

 

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 — 07 March 2018

1632

New

Add XTREE popup commands  REF _Ref508549681 \h  \* MERGEFORMAT $CBSETX, $CBRSTX, $CBUNDOX 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300038003500340039003600380031000000 .

 

 

(no additional changes for this version)

 

$CBSETX, $CBRSTX, $CBUNDOX

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 — 06 March 2018

1631.4

Fix

XTREE bug fix: xtr'xvalidate was being returned as 2 rather than 3 in case where a cell change occurred and a checkbox was checked on.

1631.3

Fix

(Windows) Fix GPF in auxiliary SBX interface used by APEX and print filters.

1631.2.2

Fix

Close some ATE-related loopholes related to AUXLOC printing, serial passthru, and unexpected network disconnects.

1631.2.1

Fix

Eliminate license expiration warnings for background jobs. They were not helpful and possibly harmful).

1631.1.2

Fix

Compiler, edit 857: The /PX logic was failing to recognize a call to a function that was specified as the initializer to a MAP statement, thus opening up the possibility that the function would be removed, leading to a function-not-found error.

1631.1.1

Fix

ISMROK.SBR bug fix: the last two parameters—IDX'BLK'SIZ and IDX'TYPE—were not being returned correctly.

1631.0.5

Fix

Compiler edit 856: close a loophole that was allowing the compiler to go into an infinite loop in certain obscure cases involving unterminated literal strings with conditional compilation blocks.

1631.0.4

Revise

VUE refinement, edit 371: maximum supported line length now takes into account the longest line in the entire file being loaded. To this we add 4K, but in no case will the line length limit be less than 8K. Previously it only looked at the first 100 lines, and then added 1K, with an overall minimum limit of 4K.

1631.0.3

Revise

Minor refinement to AUXLOC printing: if the ATE client fails to respond to the server's request for an acknowledgment prior to the start of the auxiliary port printing operation, the operation is aborted with a note in the ashlog. This eliminates the rare but ugly scenario where a failing network connection or unresponsive ATE client results in a stream of printed 'garbage' on the screen.

1631.0.2

New

Add  REF _Ref507779024 \h XTREE Lookup-and-Fill 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300037003700370039003000320034000000 .

1631.0.1

New

Add  REF _Ref507778316 \h  \* MERGEFORMAT XTREE Auto-Sum Column Footers 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300037003700370038003300310036000000 .

 

XTREE Auto-Sum Column Footers

XTREE enhancement: Auto-Sum column footers. To create a footer that shows the column total and auto updates as cell values change, set the footer text to "=SUM". For example:

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 Lookup-and-Fill

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 — 22 February 2018

1630.1.3

Fix

File hook: The HFE_ISAM_DEL and HFE_ISAM_ADD hooks had unnecessary dependencies on each other and on the HFE_ISAM_WRITEx hooks causing them to be ignored unless all were set. Now they can all be enabled independently.

1630.1.2

Fix

Compiler (edit 855) SCALE: XPUTARG literal argument numbers and literal .EXTENT index numbers were not being scaled in the RUN file. The updated run-time system will now handle it either way.

1630.1.1

Fix

Further work on SCALE: Conversions between floating point and non-floating point variable types during XPUTARG operations where not adjusting for SCALE; XPUTARG now tolerates anomalies in the scaling of the argument number; see compiler edit 855 below.

1630.0.2

Revise

 REF _Ref506904759 \h APEX refinements 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300036003900300034003700350039000000

1630.0.1

New

 REF _Ref506904724 \h SQLOP_FETCH_ROW Enhancement 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300036003900300034003700320034000000

 

SQLOP_FETCH_ROW Enhancement

XCALL SQL enhancement: SQLOP_FETCH_ROW now supports fetching a row into an ordmap:

dimx $rowmap, ordmap(varstr;varx)

...

cmdhdr.opflags = FETCHR_ROWMAP

xcall SQL, SQLOP_FETCH_ROW, cmdhdr, $rowmap()

foreach $$i in $rowmap()

    ? "Column name: ";.key($$i);", value: ";$$i

next $$i

 

Requirements / Comments

   Requires libashmysql library 1.4.142+

   Related opflags added to SQL.DEF:

Symbol

Value

Description

FETCHR_ROWMAP 

&h0010

Return row as an ordmap

FETCHR_ORGNAME

&h0020

Add to use org_name instead of name for key

FETCHR_TBLNAME

&h0040

Add to prefix name with table name

 

   If a column name is blank, possibly because it is an expression, a name will be generated of the form "expr-#" (1,2,3...)

   The ordmap(varstr;varx) format will handle any field type. Text fields will appear as they are stored in the database. Numeric and other formatted field types will be converted to the standard display representation, the same as for the FETCHR_ROWSTR and FETCHR_ARRAY formats. BLOB fields will be encoded, and automatically decoded when assigned to a suitable variable type.

 

APEX refinements

   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 — 15 February 2018

1629.1

Fix

MX_XCBDATAX bug fix: the XCBGET and XCBPUT operations were only working correctly if there were no intervening function or procedure calls. Bug introduced in 6.5.1628. Note that MX_XCBDATAX is limited to SBX parameters, not function/procedure parameters, and has been deprecated since the introduction of the XGETARG and XPUTARG statements.

1629.0

New

Add language feature:  REF _Ref506585719 \h  \* MERGEFORMAT INPUT CSV into a Dynamic Array 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300036003500380035003700310039000000 .

 

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 — 13 February 2018

1628.2.2

Fix

Fix XCALL trace to show the unscaled argument values.

1628.2.1

Fix

Fix SCALE bug in .EXTENT when the index # is explicitly specified in the program.

1628.1.2

Fix

Compiler (edit 853) fixes: (a) XPUTARG @PARAM was not working properly with SCALE; (b) compiler now properly complains about a dangling comma at the end of a function/procedure parameter list. Previously such superfluous commas were ignored, but introduced doubt as to what the compiler was thinking.

1628.1.1

Revise

Clean up various inconsistencies in the SCALE system. SBXs now inherit the scale of the caller, overriding any SCALE specified in the SBX. There is no longer any point in specifying SCALE within an SBX.

1628.0.4

Fix

PRTXLS.SBX 2.0(207) bug fix: passing the APEX license was in some cases crashing the Linux version.

1628.0.3

Fix

Compiler edit 851 fixes: (a) /PX was not properly handling ENDFUNCTION statement with line numbers; (b) /P and /PX were not properly handling UNDEF statements; (c) built-in macros ABC_CURRENT_MODULE$ and ABC_CURRENT_ROUTINE$ were in some case returning garbage.

1628.0.2

Revise

Compiler edit 852 enhancement: increase maximum length of a single line of source code, including continuations, from 3K to 16K. Also increase the limit on the number of xcall / function / procedure parameters from 128 to 1024.

1628.0.1

Revise

 REF _Ref506576878 \h Redesign Subroutine Parameter Passing 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300036003500370036003800370038000000 .

 

Redesign Subroutine Parameter Passing

Redesign the runtime mechanism for passing parameters to subroutines, functions and procedures to accomplish multiple goals:

   Eliminate the prior hard limit of 128 maximum parameters. The runtime system now has no limit; see below for compiler limits.

   Reduce memory overhead for typical routines, especially in the case of highly nested functions.

   Eliminate nearly all cases of internal subroutines that required a specific parameter to be passed as F,6, improving efficiency but especially flexibility (and eliminating a source of bugs for unsuspecting programmers.) Subroutines that previously required F,6 (or in some cases other F,4 or F,8) parameters that now allow any suitable numeric type: ACCEPN, COMMON, FLOCK, RENAME, SLEEP, ANYCN, DSPLY, MMENU, PRINT, RDATE, STENO, BLOCKS, CISAM, INFLD, LAPSED, MX_FINDNEXT, MX_ROUND, MX_USRIO, PRTCHK, SIZE, TCPX, ACCESS, DATES, SERCH, SBRC, BOX1C, DYNLIB.

 

1627 — 09 February 2018

Note: 1627.1 is a special interim update of "CX" version for pre-Vista compatibility

1627.1.3

Fix

DYNLIB bug fix: param types 'z' (char*) and 'Z' (const char*) were incorrectly converting empty strings ("") to NULL. Only 'V' should do that.

1627.1.2

 

Compiler edits 851 and 852, to be documented with 1628.0.

1627.1.1

Fix

WS2003/XP compatibility fix: image DLLs were failing to load due to use of a runtime option not recognized by the older Windows versions.

1627.0

New

Add  REF _Ref506575838 \h New Advanced Coldef Options 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300036003500370035003800330038000000 .

 

New Advanced Coldef Options

XTREE enhancement: add Advanced Coldef Options:

   LoadOptions=NoRowIf#

   LoadOptions=NoRowIf!

These two options are similar in concept to the like-named ExportOptions (see 6.5.1626.0 below) except that they apply to the operation of loading data into the tree. The NoRowIf# option skips rows with a numeric value # 0, while NoRowIf! skips rows with a numeric value of 0. Typically the column is defined as a one character #, but could also be a checkbox.

The intended usage would be for a situation where you are repeatedly displaying items from a large array, but with varying filtering such that each iteration of the display may show different items from the set. Rather than have to maintain two separate arrays (one with all of the items and one with just those to display), you can just add a column to the array to indicate (with 0 or 1) whether to display the item.

Notes

   Only supported with Array Mode (not file or CSV mode).

   Only applies to opcodes XTROP_CREATE and XTROP_REPLACE.

   Purely a client-side feature; no special support or version requirements   on the server side.

   Removing items from a tree, by resetting the value of the LoadOptions column and then doing an XTROP_REPLACE, is similar to using XTROP_DELSEL, but the LoadOptions approach is somewhat more flexible (particularly in its reversibility), and probably easier to use.

   In the ATE environment, using the LoadOptions technique to add or remove a small number of rows is particularly efficient due to optimization of the XTROP_REPLACE operation when only a few rows are changed.

   See the sample program, TSTXFLTR2.BP[908,76] in the EXLIB for an example.

 

1626 — 30 January 2018

1626.3

Fix

AUI_IMAGE: the IMGOP_DISPLAY function was failing to take into account the presence of the top status line, resulting in the image display being approximately one row higher than requested when the status line is visible.

1626.2.2

Fix

XTREE print/preview refinement: work around a bug in the underlying print preview library which was, in some display environments, truncating the last character(s) of a each cell. The workaround involves appending a few spaces to the end of each cell just before the preview and then removing them on return.

1626.2.1

Fix

XTREE row indexing patch. Re-entry into trees without the dragdrop or sortable flags was in some cases failing to set the caret to the correct row.

1626.1

Fix

XTREE row indexing patch, superseded by 1626.2.

1626.0.4

Fix

Compiler edit 850: the patch in edit 848 for ++IFMAP and /PX now works for /P as well as /PX.

1626.0.3

New

Add XTREE  REF _Ref506575228 \h PopupMenu Command $EXPCSV2XL 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300036003500370035003200320038000000

1626.0.2

Revise

XTREE export refinement: checked checkboxes and set radiobuttons are now exported as numeric values. Unchecked or unset checkbox and radiobuttons continue to be output as blanks. Previously the exported value was always blank.

1626.0.1

New

Add values for the  REF _Ref506575323 \h ExportOptions Advanced Coldef Directive 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300036003500370035003300320033000000 .

 

ExportOptions Advanced Coldef Directive

XTREE enhancements: new values for the ExportOptions Advanced Coldef Directive:

   ExportOptions=No : Causes the associated column to be excluded from exporting. Applies to real columns only.

   ExportOptions=Yes : Causes the associated column to be included in the export, regardless of whether the column is hidden in the display view. Note that hidden columns will be output according to their physical position in the coldef. Applies to real columns only.

   ExportOptions=NoRowIf# : Causes the entire row to be excluded from the export if the value of the corresponding column is not zero (or in the case of a checkbox or radiobutton cell, is checked / set). This would typically be used with an editable checkbox column to select rows to include or exclude from the export. Applies to real columns only.

   ExportOptions=NoRowIf! : Opposite of NoRowIf#, i.e. excludes the row from the export if the column value is zero (or unchecked).

   ExportOptions=PhyOrder : Causes the order of the columns in the export to be based on the physical order they are defined in the coldef, rather than the display order (which is otherwise the default). (This option affects all columns, regardless of the column that it is specified with. Also note that the the option can be abbreviated to ExportOptions=Phy; any additional characters are ignored.

PopupMenu Command $EXPCSV2XL

XTREE export enhancement: you may now export directly to XLS rather than tab or comma delimited, using the new PopupMenu system command:

$EXPCSV2XL{:inispec}

$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 — 25 January 2018

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 — 23 January 2018

1624.3

Fix

 REF _Ref504755465 \h Indirect/Lblref Function Fixes 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300034003700350035003400360035000000 .

1624.2

 

Apply all 6.4 patches thru 1556.7

1624.1

 

Apply all 6.4 patches thru 1556.5

1624.0.6

Revise

(Windows) Remove static dependencies on ODBC32.DLL, ODBCCP32.DLL, NETAPI32.DLL, RPCRT4.DLL, IPHLPAPI.DLL, DNSAPI.DLL, OLEAUT32.DLL, CRYPT32.DLL, COMCTL32.DLL, WININET.DLL, WS2_32.DLL. These standard Windows libraries and now loaded dynamically if and when needed. There is no change in outward behavior, except possibly to shave a few nanoseconds from the initial launch, and to delay any errors caused by missing DLLs to the point where they are really needed.

1624.0.5

Revise

(not used)

1624.0.4

Fix

INSTR(spos,subject,pattern,flags): (a) When one of the INSTRF_xxx flags was specified, the spos was being applied to the pattern rather than the subject. This was no problem if spos=1, but would likely cause failure of the search otherwise. (b) When REGEX flags were specified, the search was starting one position prior to spos.

1624.0.3

New

 REF _Ref503939992 \h New CLEAR (ARY) Options 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300033003900330039003900390032000000

1624.0.2

Revise

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.1

Revise

Compiler edit 845:  REF _Ref503939891 \h STRSIZ-related refinements 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300033003900330039003800390031000000

 

Indirect/Lblref Function Fixes

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)

STRSIZ-related refinements

   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.

New CLEAR (ARY) Options

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   22 December 2017

1623.0.1

Fix

Fix bug introduced in 1623.0 causing spurious error 63 when passing a collection element to an SBX.

1623.0.2

 

Apply 6.4 patches from 1556.2

1623.0.1

New

 REF _Ref502165395 \h Collections Passing 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300032003100360035003300390035000000 : Collections can now be passed by reference in an XCALL to an SBX

 

Collections Passing

Compiler edit 844 and runtime enhancement: Collections can now be passed by reference in an XCALL to an SBX. On the calling side, the syntax is the same as for passing a DIMX array of structures, i.e. just specify the collection name with an empty set of parentheses, e.g.

dimx $coll, ordmap(varstr;varstr)

...

xcall MYSBX, $coll(), ...

 

The receiving side is also similar to that for receiving a DIMX array of structures, i.e. you must first declare the receiving array with a variation of the DIMX statement including the BYREF clause, e.g.

dimx $locoll, ordmap(varstr;varstr), byref

Then use XGETARG or XGETARGS to receive the collection...

xgetargs $locoll(), ...

or

xgetarg 2,$locoll()

See the new MAPDIR.SBX and associated TSTMAPDIR.BP test program in [907,45] of the SOSLIB for a useful working example.

 

1622 — 03 December 2017

1622.0

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 *** 30 November 2017

1621.3.1

 

Apply all 6.4 patches thru 1556.1

1621.3.2

Fix

Compiler edit 842: When using the /LF switch without /M, certain ++EXTERN ARRAY() statements for DIMX and ORDMAP arrays were generating spurious errors: unmapped variable or mismatched type/size.

1621.2.2

Fix

Compiler edit 841: the standalone UNIX compiler was failing to process the -b and -l switches correctly. It was also failing to fold ++INCLUDE filenames to lower case if the compiler wasn't running from a directory mapped to a MIAME DEVICE.

1621.2.1

Fix

Compiler edit 840: certain references to a collection indexed by an array of structures, e.g. $coll(struct(i).member), within a foreach loop, were resulting in a spurious error on the NEXT $$i statement at the bottom of the loop.

1621.1

 

Apply all 6.4 patches thru 1556.0.

1621.0.4

Fix

MX_FSPEC: a previous refinement in 6.5.1611 related to the introduction of the FSPECNATIVE option had the side effect of causing command lines containing both spaces and filespecs with [p,pn] components to be parsed incorrectly. This was primarily an issue for LIT commands such as DO.LIT which often have complex argument lists containg a mixture of filespec-related tokens.

1621.0.3

Fix

 REF _Ref499911303 \h AG_XFUNC Corruption Avoidance 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400390039003900310031003300300033000000 .

1621.0.2

New

New  REF _Ref499911389 \h DYNLIB.SBR Opcode DCOP_DEREF 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400390039003900310031003300380039000000 "dereferences" a pointer to return the value pointed to.

1621.0.1

New

New  REF _Ref499911570 \h DYNLIB.SBR Parameter Type '>' 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400390039003900310031003500370030000000 may be used to identify an indirect output string parameter.

 

DYNLIB.SBR Parameter Type '>'

New parameter type ">" may be used to identify an indirect output string parameter, i.e. one that the underlying function treats as the pointer to the actual output, rather than the output itself. For example, in the following C function, the output parameter pstring will actually receive the address of the output string:

void getstring(char **pstring);

To call such a function with DYNLIB, you would use the following method:

map1 buffer,s,0            ! dynamic ok, or size sufficient for output

dlctl.opcode = DCOP_CALL

xcall DYNLIB, dlctl, "getstring(>)v", buffer

 

The ">" parameter code will cause DYNLIB to copy the actual output string to the buffer parameter rather than copying its address.

Warning: this feature is dangerous in that has to trust both the signature and the underlying library routine to output a valid address pointer; any discrepancy will likely cause a segmentation fault!

DYNLIB.SBR Opcode DCOP_DEREF

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.

AG_XFUNC Corruption Avoidance

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.

 

1620 — 07 November 2017

1610.1.2

Fix

XTREE refinement: the force popup bit in the XTR'XNAVMASK field (&h040) is now always cleared on exit. Previously there were cases where it might be set, causing an unexpected popup on the next reentry unless the application cleared the bit.

1610.1.1

Fix

XTREE SelChgExit fix/refinement: SelChgExit was not working when navigating between editable cells with the the keyboard. Clicking with the mouse was triggering the SelChgExit, except on an editable cell in the first row. Note however that in the case of cell editing validation, the validation exitcode is likely to take precedence over the SelChgExit.

1620.0.2

Fix

Compiler bug fixes (edit 839): Symbol definitions passed on the command line using /C:sym=value were being ignored during the first pass of the /P and /PX processing. Also, the compiler macros ABC_CURRENT_ROUTINE$ and ABC_CURRENT_MACRO$ were in some cases creating an additional spurious macro "A" which might have caused a spurious syntax error for a variable "A".

1620.0.1

Add

Add  REF _Ref497757244 \h ASB Statement DEFALIAS 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400390037003700350037003200340034000000 .

 

ASB Statement DEFALIAS

Compiler enhancement (edit 838): new statement DEFALIAS allows aliases to be defined for the names of functions and procedures:

DEFALIAS <routine-alias>() = <real-routine>()

This can be a useful code management technique for isolating lower level changes or variations in routines—due to differences in versions, implementation, etc.—from the higher level application. For example, an application may have many different discount calculation routines based on the type of discount, some of which might be effectively the same. Rather than forcing the higher level code to know which discounts are effectively the same, or forcing you to maintain redundant routines which differ only by name, you can use DEFALIAS to create aliases. For example, the following statement would cause any subsequent references to the function Fn'Senior'Discount(qty,gender) to be converted into references to the function Fn'AARP'Discount(qty,gender):

DEFALIAS Fn'Senior'Discount() = Fn'AARP'Discount()

Notes:

   Currently this applies only to functions and procedures and not subroutines

   The empty set of parentheses is mandatory for both the alias and the real routine name. Currently the alias only affects the name; the arguments are passed through without change.

   This is purely a compiler-level mechanism and does not require any runtime support—i.e. IT is backward compatible to all runtimes.

 

1619 — 02 November 2017

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 — 25 October 2017

1618.1

 

Apply all 6.4 patches thru 1555.6.

1618.0.3

Revise

LIBASHTLS.DLL refinement (now 1.2.210): Refresh/relink with the latest GnuTLS library version 3.6.0. For convenience, copies of the GnuTLS binary download packages can be found in http://www.microsabio.net/dist/other/gnutls.

1618.0.2

 

Apply all 6.4 patches thru 1555.4.

1618.0.1

New

 REF _Ref497035322 \h TCPX.SBR: Add Optional Parameter Sockary() 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400390037003000330035003300320032000000 to manage an array of sockets.

 

TCPX.SBR: Add Optional Parameter Sockary()

New optional parameter sockary is used to manage an array of sockets. When specified, the syntax becomes:

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 — 22 September 2017

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 — 07 September 2017

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 — 31 August 2017

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 — 10 August 2017

1614.0.2

Enhance

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.

1614.0.1

Enhance

JOBTBL job status tracking: current location counter is now being tracked. See JSTAT.LIT update above.

 

1613 — 10 August 2017

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)

 

1612 — 08 August 2017

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 — 21 July 2017

1611.0

 

Migrate all 6.4 patches 6.4.1552.2 thru 6.4.1553.4.

 

 

(no additional changes for this version)

 

1610 — 07 July 2017

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 — 03 July 2017

1609.0

Add

Add to XTREE new Advanced Coldef Options  REF _Ref487213192 \h ExportOptions 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400380037003200310033003100390032000000 .

 

 

(no additional changes for this version)

 

ExportOptions

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 — 29 June 2017

1608.0

Add

Language enhancement:  REF _Ref485832365 \h XPUTARG Name Reference #1 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400380035003800330032003300360035000000 .

 

 

(no additional changes for this version)

 

XPUTARG Name Reference #2

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 — 21 June 2017

1607.4.3

Fix

Compiler edit 827:

   Compiling with /P or /PX was resulting in spurious "undefined argument" errors in some cases when using the new XPUTARG @arg syntax. See 6.5.1607.0.

   When compiling with /PX and /LF, unreferenced functions and procedures ending with a two-part 'END' token—e.g. "End Function" or "END PROCEDURE"—were only writing the "END" to the LSX file, causing problems if the LSX was later compiled.

   The "{shaken out by /px}" line in the body of such routines in the LSX file is now properly commented out, allowing the LSX to be re-compiled without the /PX switch.

1607.4.2

Fix

ATE/XTREE: the last byte of the answer array was getting truncated under certain ATE optimization scenarios, primarily when the answer array was too small to benefit from compression. Same patch as 6.5.1551.2.

1607.4.1

Fix

SCALE: F,8 variables returned from XCALL routines were not being scaled properly when the SCALE feature was enabled. Same patch as 6.4.1551.3.

1607.3

Fix

MX_OCVT: starting in 6.5, the hex version was returning 8 digits—i.e., with leading zeroes—instead of removing the leading zeroes by default.

1607.2

Fix

Command line processing: the ashell command line arguments -ba and -bc were not being processed correctly, possibly resulting in a switch argument being included in the dot prompt startup command. This was particularly noticeable in SUBMIT when using the /BC or/BA switch with a buffer name that also matched a CMD or DO file name, but could have had a variety of effects outside of the SUBMIT context.

1607.1.3

Fix

DYNLIB.SBR: output parameters (using the "p" signature) were not being properly converted to I variables. Same patch as 6.4.1551.0.

1607.1.2

Fix

INPUT LINE: it was incorrectly removing leading/trailing quotes, like INPUT should but not INPUT LINE. Same patch as 6.4.1551.0.2.

1607.1.1

Fix

SUBMIT.LIT 3.3(157) fixes a bug which caused the list function ( /L ) to abort under some circumstances with an "Error -1 reading job table". Same patch as 6.4. 1551.0.1.

1607.0.2

Fix

Compiler edit 826: the maximum source code length of a function declaration was incorrectly set at about 512 instead of 3072 like all other source lines.

1607.0.1

Add

Language enhancement:  REF _Ref485832365 \h  \* MERGEFORMAT XPUTARG Name Reference #1 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400380035003800330032003300360035000000 .

 

XPUTARG Name Reference #1

Language enhancement, compiler edit 825: XPUTARG now supports the ability to reference the parameter to be returned by its name rather than by its number, using the following syntax:

XPUTARG @arg {=<expr>}

where arg must be one of the arguments in the function's (or procedure's) formal parameter list. When identifying the parameter this way, <expr> becomes optional, defaulting to the parameter's current value.

Identifying the parameters by their names has two advantages over using the parameter numbers: 1) it makes for more self-documenting code, and 2) it eliminates the need to adjust the XPUTARG statements if you add, delete, or rearrange the function parameters, thus eliminating a source of bugs.

For example:

function fn'foo(arg1 as f6, arg2 as b4) as i2

    ...

    xputarg @arg1           ! new: same as xputarg 1, arg1

    xputarg @arg2=arg1*7    ! new: same as xputarg 2, arg1*7

    xputarg arg2,arg1*7     ! old: value of arg2 is arg # to return

    xputarg 2, -1           ! old: return -1 for 2nd arg

endfunction

 

Note the difference between the second and third XPUTARG statements above (with and without the '@'). In the former, we pass the value arg1*7 back for the argument whose name is arg2 (the second argument). In the latter, we evaluate arg2 and use that as the argument number to pass the arg1*7 value back to.

 

1606 — 15 June 2017

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

1606.0

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.

 

 

1605 — 03 June 2017

1605.1

Fix

Compiler edit 823: The DEFSTRUCT/MAP1 enhancement added in compiler edit 821 was generally not working for ++include files; an illegal dot within a MAP or DEFSTRUCT variable name wasn't being reported.

1605.0

Add

Language enhancement: added  REF _Ref484670823 \h  \* MERGEFORMAT Shortcut Operators 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400380034003600370030003800320033000000 .

 

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 — 30 May 2017

1604.0

Add

XTREE enhancement: new control for  REF _Ref484670987 \h Radio Button / Check Box Colors 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400380034003600370030003900380037000000 .

 

 

(no additional changes for this version)

 

Radio Button / Check Box Colors

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.

 

1603 — 29 May 2017

1603.1

Fix

ISAMA record locking: the conversion of the record locking system to support 64 bit ISAMA record numbers wasn't working properly, resulting in spurious record-not-locked errors.

1603.0

Add

Language enhancement:  REF _Ref483936142 \h  \* MERGEFORMAT DEFSTRUCT Can Include MAP1 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400380033003900330036003100340032000000 .

 

DEFSTRUCT Can Include MAP1

Beginning with compiler edit 821, a DEFSTRUCT may now include a MAP1 statement as the first member of the structure. The result is equivalent to the combination of the DEFSTRUCT without the MAP1 and the ontained MAP statements (including the MAP1) without the DEFSTRUCT. This is useful when migrating legacy code from traditional MAP1-style structures to DEFSTRUCT-style structures, eliminating the need to either convert them all at once or to maintain parallel versions of the structure layouts.

Eliminating the need to maintain parallel copies of mapped structure layouts was, after all, one of the primary motivations for the DEFSTRUCT concept in the first place.

For example, say you have a common include file with this record layout:

MAP1 CUST                    ! mapped customer record

    MAP2 ID,S,8

    MAP2 NAME,S,30

    ...

 

The equivalent structure definition and mapped instance would be:

    DEFSTRUCT ST_CUST        ! customer structure

        MAP2 ID,S,8

        MAP2 NAME,S,30

        ...

    ENDSTRUCT

    MAP1 CUST,ST_CUST        ! mapped instance of customer structure

 

The only problem with the above is that all existing references any of the members of the CUST record would need to be converted (e.g. from ID to CUST.ID, etc.) If you didn't want to go through all your programs at once, you instead could leave the traditionally mapped CUST record intact and rename the new structure version, i.e:

DEFSTRUCT ST_CUST            ! customer structure

    MAP2 ID,S,8

    MAP2 NAME,S,30

    ...

ENDSTRUCT

MAP1 SCUST,ST_CUST           ! mapped instance of customer structure

 

Now you would have two equivalent record layouts, CUST (ID, NAME, ...) SCUST (SCUST.ID, SCUST.NAME, ...). The main problem with that, aside from the resulting lack of syntax consistancy, is that if you modify the layout, you have to remember to modify both versions (the MAP1 CUST version and the DEFSTRUCT ST_CUST version).

This new compiler enhancement eliminates that problem by using a single set of MAP statements to generate both the structure definition and the traditional mapped variable definition, i.e.

DEFSTRUCT ST_CUST

    MAP1 CUST

    MAP2 ID,S,8

    MAP2 NAME,S,30

            ...

    ENDSTRUCT

    MAP1 SCUST,ST_CUST       ! mapped instance of customer structure

 

Now the traditional record variable CUST and the new structure version SCUST are guaranteed to always have identical formats.

Note that this is purely a compiler enhancement and has no effect on runtime compatibility for the compiled programs. So you may want to use this version of the compiler even if continuing to use the 6.4 runtime.

1602 — 24 May 2017

1602.0.4

Add

 REF _Ref483963181 \h  \* MERGEFORMAT XTREE with XTF2_ANSEQDATA 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400380033003900360033003100380031000000 .

1602.0.3

Add

 REF _Ref483963814 \h  \* MERGEFORMAT XTREE Multi-Select 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400380033003900360033003800310034000000 .

1602.0.2

Add

 REF _Ref483936964 \h  \* MERGEFORMAT XTREE Drag-Drop Enhancement 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400380033003900330036003900360034000000 .

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 Enhancement

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 Multi-Select

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 with XTF2_ANSEQDATA

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.

1600 — May 2017

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.

 

 

Notes by Subject

A-Shell BASIC

make sure anything entered below also gets into Compiler Edit History section of LIT….COMPIL.

1633.0.1

Collections enhancement:   REF _Ref508549434 \h  \* MERGEFORMAT Writable Iterators 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300038003500340039003400330034000000

1629.0

Add language feature:  REF _Ref506585719 \h INPUT CSV into a Dynamic Array 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300036003500380035003700310039000000 .

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.

1624.0.1

Compiler edit 845:  REF _Ref503939891 \h STRSIZ-related refinements 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300033003900330039003800390031000000

1624.0.2

Compiler edit 846: .CLEAR enhancement:  .CLEAR ARY() now supported for all types of arrays; previously it only applied to collections. The details of the clearing operation depend on the nature of the array being clear, described in further detail below. Warning: using .CLEAR with any array type other than a collection (e.g. ORDMAP) requires that runtime version 6.5.1624 or above. Otherwise it will generate an Unsupported Function error.

1624.0.3

 REF _Ref503939992 \h New CLEAR (ARY) Options 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300033003900330039003900390032000000

1620.0.1

Add  REF _Ref497757244 \h ASB Statement DEFALIAS 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400390037003700350037003200340034000000 .

1616.0.2

Compiler edit 834: Support .ARGTYP(@arg) and .ARGSIZ(@arg). Concept is similar to that used for XPUTARG @arg (i.e. @arg is treated essentiall as a macro for the argument number corresponding to the argument arg as defined in the function/procedure definition or as retrieved in an SBX using XGETARG(S).) No change to the runtime system required.

1613.0

Compiler edit 831: relax limitations on XPUTARG @VAR to allow the same parameter number to be associated with multiple variables, provided that the VAR the XPUTARG @VAR statement is never associated with more than a single parameter #. For example:

XGETARGS ONE,TWO,THREE

XGETARG 2,DOS           ! TWO and DOS now both associated with #2

...

XPUTARG @TWO            ! Now allowed (e.g. 2,TWO); previously not

1608.0

Language enhancement:  REF _Ref485832365 \h XPUTARG Name Reference #1 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400380035003800330032003300360035000000 .

1607.0.1

Language enhancement:  REF _Ref485832365 \h  \* MERGEFORMAT XPUTARG Name Reference #1 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400380035003800330032003300360035000000 .

1605.0

Language enhancement: added  REF _Ref484670823 \h  \* MERGEFORMAT Shortcut Operators 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400380034003600370030003800320033000000 .

1603.0

Language enhancement:  REF _Ref483936142 \h  \* MERGEFORMAT DEFSTRUCT Can Include MAP1 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400380033003900330036003100340032000000 .

 

Subroutines

1638.0

New subroutine  REF _Ref517859580 \h MX_SRCHPATH 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500310037003800350039003500380030000000 searches for a file in the system path.

 

1636.0.6

Various  REF _Ref515703103 \h HTTP.SBR Enhancements 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500310035003700300033003100300033000000 .

 

1635.0.2

Enhancement to  REF _Ref514442175 \h Add HMACs to CRYPTO.SBR 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500310034003400340032003100370035000000 , , update ASHNET.DLL to 1.11.160.

 

1628.0.1

 REF _Ref506576878 \h Redesign Subroutine Parameter Passing 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300036003500370036003800370038000000 .

 

1621.0.2

New  REF _Ref499911389 \h DYNLIB.SBR Opcode DCOP_DEREF 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400390039003900310031003300380039000000 "dereferences" a pointer to return the value pointed to.

 

1621.0.1

New  REF _Ref499911570 \h DYNLIB.SBR Parameter Type '>' 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400390039003900310031003500370030000000 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

 REF _Ref497035322 \h TCPX.SBR: Add Optional Parameter Sockary() 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400390037003000330035003300320032000000 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.

 

LIT Commands

 

1639.0.4

 REF _Ref517795036 \h  \* MERGEFORMAT Expanded DEBUG Options in SET.LIT 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500310037003700390035003000330036000000 .

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).

 

Extended Tab Commands

1621.0.3

 REF _Ref499911303 \h AG_XFUNC Corruption Avoidance 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400390039003900310031003300300033000000 .

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.

 

INFLD

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.

 

XTREE

1637.0.1

XTREE enhancement: footer text (XTR'SHOWFOOTER) may now include embedded CRLF line breaks in order to show multiple lines (same idea as for headers). For example: coldef += "1~15~Header::> Footer1" + chr(13)+chr(10)+"Footer2#~~"

1636.0.1

XTREE enhancement: new  REF _Ref515302731 \h Advanced Coldef Option RGBfgbg 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500310035003300300032003700330031000000 provides capability to specify foreground and background colors for individual cells.

1632

Add XTREE popup commands  REF _Ref508549681 \h $CBSETX, $CBRSTX, $CBUNDOX 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300038003500340039003600380031000000 .

1631.0.1

Add  REF _Ref507778316 \h XTREE Auto-Sum Column Footers 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300037003700370038003300310036000000 .

1631.0.2

Add  REF _Ref507779024 \h XTREE Lookup-and-Fill 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300037003700370039003000320034000000 .

1627.0

Add  REF _Ref506575838 \h New Advanced Coldef Options 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300036003500370035003800330038000000 to XTREE.

1626.0.3

Add XTREE  REF _Ref506575228 \h PopupMenu Command $EXPCSV2XL 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300036003500370035003200320038000000

1626.0.1

Add values for the XTREE  REF _Ref506575323 \h ExportOptions Advanced Coldef Directive 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300036003500370035003300320033000000 .

1622.0

XTREE enhancement: CellList id codes can now include both upper and lower case characters, extending the total range from 26 (a-z) to 52 (a-z, A-Z).

1609.0

Add to XTREE new Advanced Coldef Options  REF _Ref487213192 \h ExportOptions 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400380037003200310033003100390032000000 .

1604.0

XTREE enhancement: new control for  REF _Ref484670987 \h  \* MERGEFORMAT Radio Button / Check Box Colors 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400380034003600370030003900380037000000 .

1602.0.4

 REF _Ref483963181 \h  \* MERGEFORMAT XTREE with XTF2_ANSEQDATA 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400380033003900360033003100380031000000 .

1602.0.3

 REF _Ref483963814 \h  \* MERGEFORMAT XTREE Multi-Select 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400380033003900360033003800310034000000 .

1602.0.2

 REF _Ref483936964 \h  \* MERGEFORMAT XTREE Drag-Drop Enhancement 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003400380033003900330036003900360034000000 .

 

 

ATE

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.

 

Other Topics

1639.2.1

Tracing refinement: remove limit on individual output message length when outputting to the terminal or to a specific file (see SET TRACE OUTPUT below). Previously the limit was 800 bytes. Note that the compiler still imposes a limit of 16K per statement, and the debug message window and ashlog.log outputs impose much smaller limits of their own.

1639.0.8

Language runtime refinement:  REF _Ref517798057 \h Substring Assignment 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500310037003700390038003000350037000000 .

1639.0.7

Compiler enhancement, edit 862: support the /NOTRC option (or -notrc when using the standalone compiler executable).

1639.0.6

COMPIL.LIT/OCMPIL.LIT/COMPLP.LIT 1.1(135) enhancement: support /NOTRC switch to ignore all trace related statements during compilation (++pragma TRACE_xxx, TRACE.xxx, DEBUG.xxx). 

1639.0.5

 REF _Ref517798176 \h ++PRAGMAs Support Enhanced Tracing 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500310037003700390038003100370036000000 .

1639.0.3

Tracing enhancement: new macro $L may be inserted in the trace message to display the current location counter (as a six digit hex number, matching the format used in the LSX file).

1639.0.2

 REF _Ref517794966 \h Expanded xxxxxx.PRINT and xxxxxx.PAUSE statements 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500310037003700390034003900360036000000 .

1639.0.1

New A-Shell/Windows command line switch: -ntts . This has the same effect as adding OPTIONS=NTTS to the miame.ini file, but is much more convenient in situations where you need that feature for just a couple of sessions (such as for services).

1637.4.2

INPUT CSV #CH, ARY() refinement: an empty element is now added to the end of the array if the input data ends with a comma. So for example, the data line { one,two, } will return ARY() with an extent of 3, with the last field empty. Note that it is still the case that an empty line will return an array with a zero extent.

1637.0.3

A new  REF _Ref517860236 \h GDI Printing Directive Option 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500310037003800360030003200330036000000 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

 REF _Ref514441665 \h Parameter Passing Refinement 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500310034003400340031003600360035000000 .

1635.0

Add new  REF _Ref514076940 \h GDI Printing Directive SETTRANSFORM 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500310034003000370036003900340030000000 .

1631.0.4

VUE refinement, edit 371: maximum supported line length now takes into account the longest line in the entire file being loaded. To this we add 4K, but in no case will the line length limit be less than 8K. Previously it only looked at the first 100 lines, and then added 1K, with an overall minimum limit of 4K.

1630.0.1

 REF _Ref506904724 \h SQLOP_FETCH_ROW Enhancement 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300036003900300034003700320034000000

1625.0.1

ATE-related server-side enhancement: .msi packages are now supported along with .exe files in the A-Shell startup search for updates from the %MIAME%/atesetup directory.

1624.0.6

(Windows) Remove static dependencies on ODBC32.DLL, ODBCCP32.DLL, NETAPI32.DLL, RPCRT4.DLL, IPHLPAPI.DLL, DNSAPI.DLL, OLEAUT32.DLL, CRYPT32.DLL, COMCTL32.DLL, WININET.DLL, WS2_32.DLL. These standard Windows libraries and now loaded dynamically if and when needed. There is no change in outward behavior, except possibly to shave a few nanoseconds from the initial launch, and to delay any errors caused by missing DLLs to the point where they are really needed.

1623.0.1

 REF _Ref502165395 \h Collections Passing 08D0C9EA79F9BACE118C8200AA004BA90B02000000080000000E0000005F005200650066003500300032003100360035003300390035000000 : 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.

 

PDFX

 

AUI

 

 

File Access

 

Printing