Please enable JavaScript to view this site.

A-Shell 7.0 Release Notes

Navigation: Notes by Version and Date

1767 -- 08 January 2025

Scroll Prev Top Next More

 

 

A-Shell Release Notes Version 7.0.1767.2 (8 January 2025)

1767.2.1

EIR

ASHNET.DLL / libashnet.so 1.14.200 updates -

Support UTF8-Latin1 conversion on HTTP response by adding the following to the properties parameter:

ResponseCharset=UTF

or

ResponseCharset=ANSI

Internal support library / protocol updates for OAUTH2, SFTP, FTP2, TLS, CRYPTO, etc.
Support for new XHTTPF_NOTLS13 flag in XCALL HTTP

1767.2.2

Fix

64 bit runtime: automatic binding with embedded defstructs wasn't always working after the compiler edit 1052.

1767.2.3

EIR

XCALL HTTP enhancement - new flag XHTTPF_NOTLS13 (&h04000000) specifically disables TLS 1.3 negotiation, making 1.2 the highest TLS level supported. This is a workaround for some exotic problems introduced in some server versions of TLS 1.3.

1767.2.4

 

AXL license update, supporting LIBXL library updates thru Oct 2025.

 

 

A-Shell Release Notes Version 7.0.1767.1 (7 January 2025)

1767.1

Fix

Compiler edit 1056: fix LSX generation bug introduced in edit 1050 resulting in LSX compilation failure.

 

 

A-Shell Release Notes Version 7.0.1767.0 (6 January 2025)

1767.0.1

Fix

Compiler edit 1049: setting an OUTPUTONLY function parameter default to anything other than 0, "", or .NULL now generates an error. Although in theory that should be legal, allowing it runs too high of a risk of it not behaving as the programmer might have expected due to changes in the way OUTPUTONLY parameters have been handled historically.

1767.0.2

EIR

Compiler edit 1050: skip over the body of functions when there is an error in the function declaration. This eliminates a domino effect that often generates an avalanche of errors that are all secondary to the one error in the declaration.

1767.0.3

EIR

Language enhancements, compiler edit 1051:

.ARGTYP_READONLY(@argname) or .ARGTYP_READONLY(argno) returns .TRUE if the argument was passed as a literal or stack expression rather than a variable.
.ARG_PASSED(@argname) or .ARG_PASSED(argno) returns .TRUE if the argument was actually passed by the caller, rather than auto-set via the default value specification in the function declaration. Note that although this function is fully resolved by the compiler, making it at least nominally backwards compatible, on runtime versions prior to 7.0.1767, it acts as the inverse of .ARGTYP_READONLY(). For example...

 

call fn'foo(arg=9)

...

 

function fn'foo(arg=1 as b2)

    ? .ARG_READONLY(@arg)  ! .TRUE in all cases

    ? .ARG_PASSED(@arg)    ! .TRUE if > 7.0.1766, else FALSE

endfunction

 

The argument is readonly because it was passed as a literal value. The function could try to update it using XPUTARG(@arg1) but it would have no effect, since the value is on the stack.

But readonly or not, it was actually passed, which might be meaningful to the called function. However, prior to 7.0.1767, the runtime is unable to determine that, so it will the readonly status instead. From 1767 forward, the two flags are independent.

1767.0.4

EIR

INT(x) and FIX(x) rounding refinement: by default, INT(x) will return x+1 when x is within .0000005 of the next higher integer. (The intent here is to make values that would be integers except for a few dropped bits 'stick' to the nearest integer value.) FIX(x) behaves similarly. That works for the vast majority of applications, but poses problems for 'floating-point-aware' math-oriented programs that want as much floating point precision as they can get. For them, the new solution is to execute the following at the start of program (or session; the effect persists across programs):

xcall MIAMEX, MX_ROUND, MXOP_SET, -1    ! (MIAMEX, 127, 1, -1)

This disables both the 48 bit rounding that normally occurs in floating point calculations (in an effort to match AMOS results), and also disables the "stickiness" factor just described in INT(x) and FIX(x). Thanks to Bob Fowler for identifying this.

1767.0.5

EIR

Dot variable refinement: .ASHEDIT now evaluates to not just the edit number but the patch number as well (in edit.patch floating point format). For example, under 7.0.1766.5 it would evaluate to 1766.5. This shouldn't cause any backwards compatibility issues.

1767.0.6

Fix

Compiler edit 1052: programs with embedded defstructs are now compatible across 32 and 64 bit architectures. Previously the structures embedded with the RUN were different depending on which platform it was compiled on, breaking the ability to distribute the same set of RUN files across platforms. Starting with this update, embedded defstructs are compiled as they were in the 32 bit environment, maintaining backwards compatibility there. However, any program with embedded defstructs that gets recompiled in the 64 bit environment will generate an error when attempting to use the embedded defstruct if run on an earlier version of A-Shell in the 64 bit environment.

1767.0.7

EIR

Compiler edit 1053: you may now override the minimum runtime version field in the RUN file header by defining the symbol _MIN_RUN_VER = ####, where #### is the desired minimum version. This can be done either with a DEFINE statement in the source code, or by passing the /C: switch to the compiler.

Background: normally the compiler will automatically plug in the minimum run version value based on the language features used in the program. The RUN interpreter will compare that value to the current runtime version, and if not sufficient, will abort with an explicit complaint -- "Program requires minimum A-Shell level ####". This is deemed preferable to getting some cryptic error, such as #34 (Invalid Syntax Code) when the intepreter encounters the unrecognized code. However, there may be times where you know better than the compiler. For example, your program may check the version at runtime and avoid code that requires a later version, in which case you might want to override the minimum version in the header to allow it to run on earlier versions anyway. Or, in the case of embedded defstructs (see compiler bug fix 1052 above), if you distribute RUN programs across older 64 bit A-Shell versions, you may want to force the minimum run version to 1767, to avoid wasting time later trying to figure out why embedded defstructs aren't working.

1767.0.8

EIR

Compiler edit 1054: new ++PRAGMA OVERRIDE_OUTPUTONLY causes parameters with the :OUTPUTONLY qualifier and a default value to revert to input/output. This is intended to be transitional feature to support programs that were counting on the behavior prior to compiler edit 1047 (7.0.1765.6) until they can be corrected. After that edit, and without this pragma, the :OUTPUTONLY qualifier was taken seriously, meaning that any value passed in to that parameter would be ignored, and as of compiler edit 1049, attempting to set a default value for an :OUTPUTONLY parameter (other than 0 or "") generates an error.

Note that this option can also be set by passing the new COMPIL_OOO flag (&h400000000, defined in compil.def) to the MX_COMPIL function.

1767.0.9

Fix

Compiler edit 1055: back out edit 1049 (above), i.e. allow any default value on OUTPUTONLY parameters. Based on feedback from the field, it was determined that the behavior was only useful in a one-time scan of old code to look for potential problems. And for that, the standalone compiler version 1049 thru 1054 could be used.

•