============================================================================ A-Shell Release Notes Version 6.5.1744.0 (29 September 2023) ============================================================================ 1. (Windows) Reorganize global memory allocation mechanism for higher efficiency (by switching most allocations from global to the process heap). 2. Tracing refinement: the $P prefix code (to dislay the program) now also includes the current SBX, if applicable. 3. Tracing enhancement: SET.LIT 1.2(168) now supports a mechanism for globally adding tracing prefix codes: SET DEBUG PREFIX prefix-string where prefix-string is a string containg one or more prefix codes ($#, $P, $T, $L) to be added to all TRACE.PRINT statements. Useful in situations where already have a large number of TRACE.PRINT statements in your code and then realize that it would be a lot more useful if they were numbered, or contained timestamps, or listed the program and location. The prefix codes specified in the SET DEBUG PREFIX statement are merged with any specified explicitly in TRACE.PRINT statements, eliminating duplicates. For example, this SET command... SET DEBUG PREFIX $# $P will effectively convert the following at runtime... TRACE.PRINT (99,"foo") "$# $T" var1, var2 to... TRACE.PRINT (99,"foo") "$# $P $T" var1, var2 4. MX_DEBUG enhancement: add prefix$ parameter to support querying and setting global tracing prefix. Updated syntax: xcall MIAMEX, MX_DEBUG, op, debug {, debugmin, debugtags, debugout, prefix} where op thru debugout are as before prefix [str] [in/out] - returns or sets the tracing prefix string (e.g. "$# $T $P"), depending on the op. (Primarily used by SET.LIT) 5. (Windows/ATE) Debugging refinement: add the EXEC trace option to the System Messages Window properties dialog. (Previously only settable via the SET command or the TRACE directive in the MIAME.INI.) When set, each command-level command (RUN, CMD/DO, LIT) is traced. ============================================================================ A-Shell Release Notes Version 6.5.1743.0 (26 September 2023) ============================================================================ 1. New internal REGEX2 subroutine supports a replacement operation, similar to that of MX_TRANSCOPY except that it acts on a single string subject, pattern and replacement specification (rather than a file based set of them). Syntax: xcall REGEX2, spattern, status, subject, flags, rpattern, outstr where spattern (str) [in] is the search pattern (equivalent to pattern parameter in REGEX subroutine. status, subject and flags are the same as for REGEX rpattern (str) [in] is the replacement pattern, optionally including \# clauses referring to numbered capture sub-matches in the search pattern. outstr (str) [out] is the string resulting from the replacement operation. If there were no matches (status < 1), then it will equal the subject parameter. Note that as with MX_TRANSCOPY, the search and replace operation repeats until there are no more matches. For example, to replace all occurrences of "[#]" with "(#)" (where # is an integer of any size), you could use the following: spattern = \[(\d+?)\] ! series of digits within [brackets] rpattern = (\1) ! the matched digits, now with (parens) This combination would replaced "Funkhouser[13], Tavares[172], Griffin[9x]" with "Funkhouser(13), Tavares(172), Griffin[9x]". (The third bracketed expression doesn't match the search pattern because of the "x".) ============================================================================ A-Shell Release Notes Version 6.5.1742.0 (25 September 2023) ============================================================================ 1. XTREE enhancement: tree data array argument may now be supplied in the form of a gridmap, e.g. xcall XTREE, sr,sc,answer,$grid(),count,exitcode,er,ec,flags... Either form of gridmap is accepted, although the handling is somewhat different for the two types. In the case of gridmap(int;varstr;varstr), the handling is analogous to CSV mode except without a file. This is more memory efficient but doesn't support AutoFilter. In the case of gridmap(int;int;varstr), the grid data is expanded out to an array using column widths based on the actual maximum lengths of the data. In either case, the operation is limited to display and select only (no editing). The application may specify an empty, partial (pseudo columns only), or full coldef. In the empty or partial case, the column headers are extracted from the gridmap (row 1 in the int;int;varstr case). If the app supplies a coldef with any real columns defined, the column names from the gridmap are ignored, and it is up to the app to make sure that the coldef supplied actually matches the layout of the data. 2. EZTYP refinement: eliminate unnecessary pre-processing and close a loophole causing a crypting warning message when the file specification contains a mixture of forward and backslashes. 3. Language enhancement (compiler edit 1036) - WRITExD ARY() statement (to write out all the elements of the array in delimited format) now supports numeric array types as well as GRIDMAPs. (Previously only string arrays were supported). Note that in the GRIDMAP case, the output starts at row 1 (anything prior to that is considered internal control information and omitted from the output). For example: dimx $csvmap, gridmap(int;varstr;varstr) open #1, csvin$, input input csv #1, $csvmap() ! input entire file into gridmap close #1 open #2, csvout$, output writecd #2, $csvmap() ! output entire gridmap to file close #2 Note that the above example would also work with gridmap(int;int;varstr). 4. Compiler bug fix (edit 1037) - PRIVATE blocks in a main program module were not getting initialized by the first function call. This would have been a problem if the block contained DIMX statements or actual code that needed to be executed. 5. MX_OSVER updated to report more accurate Windows information. Note however, that Windows 11 continues to identify itself as Windows 10, apparently due to some Microsoft rationale. You can identify it by a release or build # >= 22000. 6. ABOUT.LIT 2.2(111) now adds a few details about the OS, including the locale. 7. AG_GETLOCALE implemented: ? TAB(-10,AG_GETLOCALE); chr(127); input "" locale$ AG_GETLOCALE (115) retrieves the name of the user's locale on the client workstation. Parameters: locale$ (str) [out] where locale$ is the name of the locale on the client, e.g. "en-US" (Windows indication for English language with USA regional settings). There is not currently an equivalent MX_ version to get the server locale, but for ATSD connections, you can use the utility function Fn'GetUserDefaultLocaleName$() in the SOSFUNC:fnwin32utl.bsi module to get the same information. For Linux, the following command will work: xcall HOSTEX, "locale | grep LANG=", status, locale$ ============================================================================ A-Shell Release Notes Version 6.5.1741.2 (22 September 2023) ============================================================================ 1. Language refinement: .ISEMPTY(x) now works for unformatted (X type) variables, returning .TRUE if and only if X variable contains null bytes and nothing else. 2. Language refinement: the CSV assignment convenience operator (see 6.5.1739.0) now recognizes the delimiter set via MX_CSVDELIM. Also, it no longer generates an illegal syntax error in the case of certain poorly terminated string formats. 3. 64 bit bug fix: negative status return values in MX_USRIO were coming back as large positive values, often leading to a subsequent SEGV error if used as a module offset later. ============================================================================ A-Shell Release Notes Version 6.5.1741.1 (14 September 2023) ============================================================================ 1. XTREE bug fix: The XTR.XVALIDATE flag was not being properly set on a LISTX cell with validation and Fastmax options set. If the cell was changed and exited via the Fastmax limit, XTR.XVALIDATE was being set to 5 when it should have been 1. Note however that if the application was testing for (XTR.XVALIDATE # 0), or (XTR.XVALIDATE AND 1), as it probably should, rather than (XTR.XVALIDATE = 1), it wouldn't have made a difference. ============================================================================ A-Shell Release Notes Version 6.5.1741.0 (11 September 2023) ============================================================================ 1. Language enhancement: new dot function .ISEMPTY(expr) returns .TRUE if the expression is .NULL, or consists of zero or more blanks and nothing else. Logical equivalent to but simpler than (ife(expr,"")="") ============================================================================ A-Shell Release Notes Version 6.5.1740.3 (11 September 2023) ============================================================================ 1. INPUT CSV, $grid() bug fix - row index wasn't getting updated if first column of a row as empty. 2. Fix a bogus error condition when passing an ordmap() by reference (introduced in 1738.1). ============================================================================ A-Shell Release Notes Version 6.5.1740.2 (10 September 2023) ============================================================================ 1. Minor refinement to HFE_ISAM_DEL hook to address possibility of a mismatch between the actual record prior to deletion and the version passed to the hook routine. Also, correct the record # passed to the hook to be 0 based (independent of the calling FILEBASE) to match all other hooks. 2. Fix bug in MX_CALLSTACK (introduced in 1735.0 related to MX_RUNPROF). 3. The Font Cache Dump (when selected from the context menu of the System Message window) appears in that window (in addition to the ashlog), regardless of whether the "Show System Traces" option was activated. (Previously it may have appeared not to work if just outputting to the ashlog.) 4. Fix a bogus error condition when passing a gridmap(int;int;varstr) by reference (introduced in 1738.1). 5. Parameter passing refinement: DIMX arrays of type S or X are now treated as compatible with each other when passed by reference to a function. Previously this triggered an incompatible parameter error. 6. SRCCOM.LIT 2.0(203) update: minor refinement to improve handling of case where a new block of code is inserted that contains two or more adjacent lines that match nearby lines in the original. ============================================================================ A-Shell Release Notes Version 6.5.1740.1 (05 September 2023) ============================================================================ 1. 64 bit executables released for Ubuntu 22 and CentOS Stream 8 platforms. 2. AXL license for Libxl library extended thru version 4.2.0 3. MX_RUNPROF bug fix - was failing to terminate properly. 4. PRTXLS.SBX 2.1(233) bug fix - subscript out of range issue when column headers spanned columns that otherwise would have been subdivided. ============================================================================ A-Shell Release Notes Version 6.5.1740.0 (27 August 2023) ============================================================================ 1. Upgrade remaining functions involving file times to use 64 bit version (avoiding the Y2K38 bug, provide the file system supports it). Affected functions include MX_FILESTATS, MX_FILETIMES, MX_FTFORMAT,... Note that applications need to provide F,6, I,6 or B,6 variables to handle file times beyond 19-Jan-2038. 2. MX_FILETIMES enhancement: now supports last accessed time and ability to redirect the operation to ATE. Syntax: xcall MIAMEX, MX_FILETIMES,fspec,op{,status{,mtime{,ctime{,atime{,loc'rem}}}} The two new parameters: atime (num) [in/out] - last access time (B6, I6 or F6 needed for 2038+) loc'rec (str) [in] - R=redirect to ATE, C=redirect to ATE, include cache search L=local (default) Note that redirecting the operation to ATE requires ATE 6.5.1740.0+ 3. AG_FILETIMES implemented: ? TAB(-10,AG_FILETIMES); fspec, op {,loc'rem {,mtime {,ctime {,atime}}}}; chr(127); input "" status, mtime, ctime, atime Parameters: fspec (str) [in] - file spec (client perspective) to get or set times for op (num) [in] - 0=get, 1=set loc'rem (str) [in] - C to check cache directories, else fspec must be fully qualified mtime, ctime, atime (num) [in/out] - modify, create, and access times Note that access time isn't uniformly supported across Windows systems. 4. MX_FILESTATS enhancement: add retrieval of last access time. Syntax: xcall MIAMEX,MX_FILESTATS,loc'rem,path,bytes,{mtime {,ctime {,mode & {,ver {,hash {,owner {,group {,atime}}}}}}}} New parameter: atime (num) [out] - last access time 5. AG_FILESTATS enhancement: support last access time. Command syntax remains the same as before, except there is a new flags value which causes the returned string to include the last access time. ? TAB(-10,AG_FILESTATS); fspec {,versiz {,hashsiz {,flags}}}; chr(127); input "" bytes, mtime, ctime, mode {,ver {,hash {,pcspec {,atime}}}} New flags value: &h0004 - Request return of last access time Clarification to prior documentation: the pcspec is only returned in the case where the fspec is not fully qualified and the flags &h0002 bit is set causing the routine to locate the file in one of the cache directories. Note that all fields are comma delimited up to the last non-blank field. 6. ATE refinement: ATECACHE directory now retains files for 96 hours after the last access as an optimization to reduce excess cache transfers. Previously the entire directory was cleared after the last ATE session the local machine exited. 7. New MIAMEX function: MX_DIRCLEAN (204) scans a specified directory, counting and/or deleting files based on various filter attributes. Syntax: xcall MIAMEX, MX_DIRCLEAN, dirspec, loc'rem, status {,wildspec, flags, timelimit, bytes} where dirspec (str) [in] - target directory, in any reasonable format; may include %env% variables loc'rem (str) [in] L)ocal - interpret dirspec as local to application server R)emote or C)lient - interpret direspec as an ATE remote spec status (num) [out] - returns # files matched or deleted; negative values indicate errors wildspec (str) [in] - optional wildcard spec (default is *.*) flags (num) [in] - sum of: &h0001 - only files with mtime < timelimit &h0002 - only files with any timestamp < timelimit &h0004 - only files > bytelimit &h0008 - only files < bytelimit &h0010 - no action (just count matching files, bytes; else delete) timelimit (filetime) [in] - time threshold (seconds since the 'epoch') if flags &h0001 or &h0002 specified bytes (num) [in/out] - On input, sets file size threshhold (if flags &h0004 or &h0008); on output returns # matching files 8. AG_DIRCLEAN implemented: ? TAB(-10,AG_DIRCLEAN); dirspec,wildspec,flags,timelimit,bytelimit;chr(127); input "" status, bytes Parameters (see MX_DIRCLEAN). Returned status is the # of files matched or deleted; negative values indicate failure. 9. AGCMD.LIT 1.0(108) supports AG_FILETIMES, AG_GETDPI, AG_DPM, AG_DIRCLEAN 10. ATSYNC,1.3(123) - minor bug fixes; /V2 is now the default ============================================================================ A-Shell Release Notes Version 6.5.1739.2 (23 August 2023) ============================================================================ 1. SWPSBR bug fix - The O and I flags in opcode 128 were not being recognized. ============================================================================ A-Shell Release Notes Version 6.5.1739.1 (19 August 2023) ============================================================================ 1. TRACKER bug fix (affecting SWPSBR, MSBOXX, and TCRTs 202-203) - the reverse video attribute created by TAB(-1,32) was not being properly saved in the screen map when using a 'mode' emulation (like am75g) under Linux. 2. Status line display bug fix: the top 2 pixels of the system status line messages were being clipped. 3. WEBCACHE / http image refinement: the system status line now displays the URL of any files being downloaded either automatically due to WEBCACHE or due to an explicit http:// or https:// filespec. ============================================================================ A-Shell Release Notes Version 6.5.1739.0 (15 August 2023) ============================================================================ 1. Runtime enhancement to the FOREACH statement - if the specified starting key is not found, the iteration now starts with the next key. Previously, the result would have been an empty iteration. 2. Runtime enhancement to the FOREACH'REVERSE statement - the starting key is now recognized (previously it was ignored). And as with FOREACH, if not found, the iteration starts with the next key (i.e. the next one lower in the collating sequence). 3. Language enhancement (compiler edit 1034) - new convenience operator to assign elements to an array in a single operation from a CSV-formatted string: a() = Where: a() is a DIMX array of strings is a string expression in a CSV compatible format. Notes: the operation follows the same general rules as INPUT CSV into an array, i.e. the array elements can be fixed length or dynamic strings and the array extent can be fixed or auto_extend. In the case of an auto_extend array, the extent will be reset each time. Likewise, the string expression can have comma, tab or pipe delimiters and may contain quoted elements; leading and trailing spaces are trimmed. Example: dimx a(0), s, 0, auto_extend a() = "red,green,blue" a() = "Golden Retriever | Doberman | German Shepard | Chihuahua" 4. WEBCACHE enhancement: switch internal implementation for https:// addresses to use {lib}ashnet instead of {lib}ashtls. 5. Web / Image enhancement: XTREE and AUI_IMAGE now support loading loading images from a web server using an http:// or https:// specification, either directly, or via WEBCACHE (with OPENI and LOOKUP enabled). In the non-WEBCACHE XTREE case, most likely you would want to set ImgDir to the http:// or https:// directory location where the images are, and then just pass the image name.ext in th individual cells. Note that even when WEBCACHE is not enabled, images pulled down from the web will be cached in the local %MIAME%\webcache directory. 6. CSV2XL.SBX 2.1(286) refinement - the SetBanner directive now supports the fontname and fontsize attributes, e.g. //XL,SetBanner,text="This is a Banner",fontheight=20,fontname=Broadway ============================================================================ A-Shell Release Notes Version 6.5.1738.1 (09 August 2023) ============================================================================ 1. Ordmap references to non-existent keys (i.e. .NULL values) within maps that were passed by value to functions were returning garbage values rather than .NULL. (Problem introduced in 1736.0) 2. CSV2XL.SBX 2.1(285) bug fix: Use of the //XL,SetRow directive was causing secondary effects on the corresponding rows of subsequent worksheets (due to it not being completely reset by the //XL,AddSheet directive.) ============================================================================ A-Shell Release Notes Version 6.5.1738.0 (07 August 2023) ============================================================================ 1. Runtime enhancement: New cmdinput parameter to MX_SETCMDINP and MX_GETCMDINP allows enabling / disabling command file input for Basic INPUT and INPUT LINE in addition to INFLD: xcall MIAMEX, MX_GETCMDINP, cmdinfld {,cmdinput} cmdinfld (num) [out] - returns 1 if command file input for XCALL INFLD enabled; else 0 cmdinput (num) [out] - returns 1 if command file input for INPUT and INPUT LINE enabled; else 0 xcall MIAMEX, MX_SETCMDINP, cmdinfld {,cmdinput} cmdinfld (num) [in] - set to 1 to enable commmand file input for xcall INFLD cmdinput (num) [in] - set to 1 (default) to enable command input for INPUT and INPUT LINE enabled; else 0 to disable. The are two main intended uses for this new feature: - To prevent the accidental use of command file input for certain critical kinds of inputs (passwords, etc.), where you don't want to resort to a more sophisticated input mechanism (like INFLD). - To allow command file wrappers to be created for programs which may perform conditional or unexpected standard inputs that you don't want to come from your wrapper command file. Note that setting the cmdinput flag to 0 only disables command file input for INPUT and INPUT LINE within programs; it does not affect the ability of command files to execute commands. Furthermore it is automatically reenabled when you end up at the command prompt and there is no more command file input available. 2. XTREE refinement: all other exitcodes now take precedence over -48 (validation). So for example, if the user edits a cell, then clicks on the "X" button to close the dialog before otherwise exiting from the cell editing operation, the ESCAPE exitcode (1) will be returned in the exitcode parameter, and -48 will be added to the xinfo parameter. Applications should rely on the XTR.XVALIDATE field in the XTRCTL parameter to determine whether validation is needed, and on the exitcode parameter to determine what the user has requested to do next. Note that this has been the existing behavior all along for most exitcodes; this change mainly extends it to the special case of a button sending ESCAPE. ============================================================================ A-Shell Release Notes Version 6.5.1737.0 (06 August 2023) ============================================================================ 1. XTREE enhancement: new flag XTF2_NOAUTOFILTER (&h02000000) added to allow applications to disable the AutoFilter feature no matter how it was enabled. Since it can be enabled via global settings in the MIAME.INI -- see OPTIONS=XTAUTOFILTER -- this allows applications to disable the feature for a single tree at a time. Some reasons you might want to disable it is to avoid end user confusion in places where filtering doesn't make sense, such as in multi-level trees (where filtering only affects the top level), or in extremely large trees (to reduce overhead), or simply for testing purposes. 2. XTREE enhancement: increase the maximum XTR.EXPANDLEVEL 9 to 63 to match the maximum level number supported in a '@' column. 3. XTREE Context menu refinement: the context menu is now enabled whenever a cell is being edited (with at least copy and paste). Previously it required one of the global context menu flags or an explicit PopupMenu definition. 4. XTREE bug fix: close obscure crash loophole related to click event confusion when trees are overlapping. 5. XTREE AutoFilter bug fix: it wasn't working properly with ListX or CellListX columns, or with columns containing color bytes. 6. XTREE Validation timing bug fix: changing an editable cell and then clicking on another editable cell was in some cases setting the XROW/XCOL parameters to the newly clicked-on cell instead of the one that had just been changed. ============================================================================ A-Shell Release Notes Version 6.5.1736.1 (04 August 2023) ============================================================================ 1. ASHNET update to 1.4.189 to link in various dependent library/protocol updates and fixes: - FTP2 TLS 1.3 session resumption issues with FileZilla fixed - FTP2 fixed issue with wildcard directly listings on some servers - SFTP max packet size limitation wasn't being respected - HTTP default character set now UTF-8 as it was supposed to be (but was ANSI) 2. XTREE bug fix: AutoFilter wasn't working properly with ListX columns (caused by confusion between the codes and the descriptions). 3. XTREE refinement: When a editable cell with validation has been edited but then the user clicks on a button that translates to ESC before otherwise exiting from the cell, the exitcode 1 is now appended to the XINFO parameter. This allows the application to see both events (changed cell, ESC). Previously the application had no way to know about the ESC character, which was left in the input buffer, where it would in theory be used to terminate the subsequent XTREE session if the application re-entered, but that was subject to timing and other possible conflicts with the validation logic, sometimes resulting in the application re-entering the XTREE where the user would have to click the exit button a second time. With this refinement, the returned exitcode will continue to be -48 (validation), but the XINFO parameter will contain "0,-48,1" rather than just "0,-48". The application should intepret that as "validate, then cancel". If it does, it should use TINKEY to remove any queued up keyboard input first. Otherwise the behavior will remain as before. ============================================================================ A-Shell Release Notes Version 6.5.1736.0 (01 August 2023) ============================================================================ 1. Language enhancement - two new GRIDMAP functions: .MINCOL($grid(),row) - returns first column # in specified row .MAXCOL($grid(),row) - returns last column # in specified row .COLNUM($grid(),colname$) - returns column # associated with colname$. The .MINCOL() and .MAXCOL() functions are only applicable to gridmap(int;int;varstr), i.e. to gridmaps with numeric row and column indices. But in can handle gridmaps with negative rows and columns and gaps between them (i.e. "sparse" gridmaps). The .COLNUM() function applies to both gridmap variations, but assumes a "normal form" gridmap, i.e. a gridmap in which row 1 contains either columns names (gridmap(int;int;varstr) variation) or the first set of data values (gridmap(int;varstr;varstr) variation). For the gridmap(int;int;varstr) variation, it scans row 1 (whose values are presumed to be the column names) for a value match on the colname$. The returned column number can then be used to directly access values for that column name. For the gridmap(int;varstr;varstr) variation, .COLNUM() scans row 1 (presumed to be the first data row) for a key match on the colname$, returning the column sequence # (i.e. the ordinal position of the target column in alphabetical sequence, starting from 1). In this case the function mainly serves to verify the existence of the target column, perhaps useful after loading a CSV file or SQL query into a gridmap without knowing for sure which column names will be present. All three functions return -99999999 for error conditions, i.e. if the specified row or colname$ is not found. (This is to avoid confusion with the fact that zero could be a valid column number.) 2. Compiler enhancement (edit 1033) - support new .mincol() and .maxcol() functions described above. 3. Runtime refinement - the existing .minrow() and .maxrow() functions now return -99999999 for empty or invalid gridmaps. (Previously they returned 0, which could be a valid row number.) 4. Collections passing bug fix: correct spurious error 61 (invalid collection reference) errors occuring in certain parameter passing situations. 5. Gridmap SCALE bug fix: gridmap key assignments were not adjusting for the SCALE factor. ============================================================================ A-Shell Release Notes Version 6.5.1735.4 (01 August 2023) ============================================================================ 1. Compiler bug fix (edit 1032) relating to the 'transclude' mechanism: - Private variables in transcluded modules weren't getting initialized. ============================================================================ A-Shell Release Notes Version 6.5.1735.3 (30 July 2023) ============================================================================ 1. Gridmap bug fix: passing gridmap(int;int;varstr) arguments by reference was generating spurious invalid collection errors. ============================================================================ A-Shell Release Notes Version 6.5.1735.2 (28 July 2023) ============================================================================ 1. Compiler bug fix (edit 1031) relating to the 'transclude' mechanism: - Eliminate spurious errors when the TCF spec in a ++include statement contained a device: prefix. ============================================================================ A-Shell Release Notes Version 6.5.1735.1 (27 July 2023) ============================================================================ 1. Compiler bug fixes (edit 1030) relating to the 'transclude' mechanism: - Failure to specify a TCF section in the ++include line was causing the operation to ignore the TCF file contents. - PRIVATE module variables now work as expected in transcluded modules. (Previously the compiler was complaining of duplicate variables.) ============================================================================ A-Shell Release Notes Version 6.5.1735.0 (23 July 2023) ============================================================================ 1. Runtime enhancement: new MIAMEX function MX_RUNPROF (203) generates a run profile log which can then be analyzed for an overview of the program call structure and performance. xcall MIAMEX, MX_RUNPFOF, OPSTS {,FSPEC} where: OPSTS (num) [in/out] specifies the opcode and return status: 0) check profiling status returns: 0=disabled, 1=enabled (+flags) 1) enable profiling (outputting to FSPEC) (+16 for detailed mode) returns: 2=now enabled, -2=already enabled, -3=can't open file 2) disable profiling returns: 3=now disabled, 0=was disabled FSPEC (str) [in] - filespec where profiling data will be recorded (default is .csv) 2. New system command RUNPROF.LIT provides user-level access to profiling operations. Use RUNPROF/? for help. 3. New REGEX flag PCREX_NOT_PRECOMPILE (&h08000000) may be used with a single-character pattern to indicate that it is a string pattern and not a pre-compiled pattern #. 4. Param passing refinement: passing an X value to a numeric parameter type now performs a string-to-numeric conversion like you would get when passing an S value to a numeric type, or when assigning an X value to a numeric type. Previously it was doing a raw byte copy from the source to the receiving parameter. 5. GRIDMAP bug fix: gridmap parameters appearing in complex expressions were in some cases resulting in corruption of the string stack. 6. INPUT CSV to GRIDMAP bug fix: quoted values in the CSV source were not properly unquoted when loading them into the GRIDMAP. Also, it wasn't clearing the GRIDMAP prior to the operation. 7. Compiler bug fix (edit 1029) - ++include with [p,pn] was getting confused with the new transclude (see edit 1025) syntax. ============================================================================ A-Shell Release Notes Version 6.5.1734.5 (13 July 2023) ============================================================================ 1. Compiler bug fix (edit 1028) - correct problem with spurious errors caused by appearance of keywords in DEFXCALL parameter lists (introduced in compiler edit 1020). ============================================================================ A-Shell Release Notes Version 6.5.1734.4 (11 July 2023) ============================================================================ 1. XCALL JSON bug fix: opcode 1 (convert JSON to ordmap) was omitting null and boolean values from the output. 2. Compiler bug fix (edit 1027) - transclude statement was treating spaces after the second comma (separating the TCF spec from the section name) as significant. (Almost certainly causing it to abort with a section not found error.) ============================================================================ A-Shell Release Notes Version 6.5.1734.3 (07 July 2023) ============================================================================ 1. Ordered map bug fix: correct problem introduced in 1734.1 which was resulting in ordered maps corruption during parameter passing. ============================================================================ A-Shell Release Notes Version 6.5.1734.2 (07 July 2023) ============================================================================ 1. XTREE/INFLD refinement: set matching (e.g. SETDEF, ListX, CellListX) now treats the doublequote character (") as any other character, hopefully making it easier to support descriptions with matched or unmatched embedded quotes, e.g. ...,RUL,6" ruler,... Note that this means that all occurrence of the delimiter character in the list are significant. If, for example, you want to include the comma character within a list element, you'll just have to specify a different delimiter. 2. XTREE refinement: the Ctitle field in the Coldef parameter now recognizes HTML-style escaped characters, i.e. %xx where xx is value from 00-ff (hex). This is mainly a convenience for specifying hard breaks within a header or footer without having to resort to concatenating a chr(13) into the coldef string. For example, "1~20~Happy%0d~Hour~S~..." may be more convenient to code than "1~20~Happy"+chr(13)+"Hour~S~...". Note that a % not followed by two hex digits is treated as-is; you can also use %% to indicate a literal %. It also supports the special case of ^M (as equivalent to %0d). 3. MX_USRIO bug fix: op 0 was failing to find the specified module by name if it was in the very first position in the module cache. It now logs a detailed trace to ashlog in the case of failure. ============================================================================ A-Shell Release Notes Version 6.5.1734.1 (05 July 2023) ============================================================================ 1. .MINROW($grid()) bug fix: if the grid contains elements with negative row numbers, .MINROW() now returns the numerically smallest row (as expected). Previously it returned the largest negative row number. In other words, if the grid contained rows -1 thru -5, .MINROW() now returns -5 but previously returned -1. 2. GRIDMAP bug fix: assignment statements to a gridmap(int;varstr;varstr) were creating malformed keys, causing downstream failures with key lookup and iteration. Note: problem did not affect INPUT CSV or SQLOP_FETCH_GRIDMAP or gridmap(int;int;varstr). 3. GRIDMAP bug fix: global gridmaps passed by reference to xcalls (such as SQL) were not being recognized as such. (It was only when the gridmap was first passed to a function.) ============================================================================ A-Shell Release Notes Version 6.5.1734.0 (01 July 2023) ============================================================================ 1. ASQL enhancement: new flag FETCH_MAXLENS (&h0200) causes SQLOP_FETCH_GRID to return an extra row (indexed as row 0) containing the actual maximum string representation lengths within each column of the query results. This is intended to be helpful when configuring display parameters for the grid (e.g. XTREE, CSV2XL) and/or for building a custom DYNSTRUCT mapping. Note that the feature does not require a corresponding update to the libashmysql or libashodbc connector. (But SQLOP_FETCH_GRID requires version 1.6+) 2. Re-do the 1733.2 READ DATA bug fix to eliminate the problem of unexpected truncation of fields containing double quotes. (The extra quote characters were being counted against the target field maximum length even though they weren't being copied to the target.) ============================================================================ A-Shell Release Notes Version 6.5.1733.2 (29 June 2023) ============================================================================ 1. READ DATA bug fix: embedded quotes ("") in DATA statements were not being handled properly by the READ operation. 2. XTREE bug fix: the ListX feature was stripping quotes from the description when displaying the translation of the coded field. ============================================================================ A-Shell Release Notes Version 6.5.1733.1 (22 June 2023) ============================================================================ 1. MX_FTFORMAT bug fix - passing a 0 value in the ftime parameter was resulting in an invalid memory reference. ============================================================================ A-Shell Release Notes Version 6.5.1733.0 (17 June 2023) ============================================================================ 1. DYNSTRUCT enhancement: assignment from an initialized DYNSTRUCT to an UNinitialized DYNSTRUCT is now allowed, and results in the target being defined and bound and then copied. Previously it caused an error #70 (invalid dynstruct reference). On the flip side, assignment FROM an UNinitialized DYNSTRUCT to any type is now trapped, generating error #70. Previously it was treated as an assignment from an uninitialized X,0 variable. 2. XTREE refinement: coldef "D" (date) now recognizes SQL DATE and DATETIME formats CCYY-MM-DD {HH:MM{:SS}}. Previously they didn't sort properly. Note that if all the cells in the column are in that format, sorting will work with coldef "S" (string), but date filtering would not. 3. Language enhancement (compiler edit 1026) - support for storing a label reference in a numeric variable and then using it as the target of a GOTO, CALL or GOSUB statement - VAR = *LABEL ! store address of LABEL: in VAR ... GOTO @VAR ! goto address stored in VAR (LABEL:) CALL @VAR ! call address stored in VAR GOSUB @VAR ! same as CALL ============================================================================ A-Shell Release Notes Version 6.5.1732.0 (12 June 2023) ============================================================================ 1. REGEX.SBR refinement: Standalone pre-compilation (independent of pattern matching) now supports options flags using this syntax: xcall REGEX, pattern, patno {,flags} Note that to distinguish this from the three-parameter general use call... xcall REGEX, pattern, patno, subject ... the flags parameter must be a numeric type. 2. REGEX.SBR refinement: maximum number of pre-compiled patterns increased from 20 to 128. 3. New MIAMEX function: MX_TRANSCOPY (202) copies a file to another, applying a series of regular expression pattern match / replacement translations: xcall MIAMEX, MX_TRANSCOPY, op, srcfile, dstfile, tcffile, section, & status{, flags, maxlen, errmsg} where: op (num) [in] - opcode (must be set to 1) srcfile (string) [in] - source filespec dstfile (string) [in] - destination filespec (replaced if it exists) tcffile (string) [in] - configuration filespec (see TCF specification below) section (string) [in] - optional section name within tcffile status (signed int) [out] - on success, # of modified lines; (see below for errors) flags (int) [in] - optional REGEX.SBR flags (combined with any set in the TCF file), plus: PCREX_ASB_SOURCE (&h20000000) - treat srcfile as A-Shell Basic, merging continuation lines into one (which may affect the pattern matching which is otherwise limited to one source line at a time). maxlen (int) [in] - optional max length of source lines to support (default 16K) errmsg (str) [out] - returns message on error (status < 0) TCF Specification: The TCF (Transcopy Configuration File) contains the search and replace patterns and other options to apply to the transcopy operation. The structure is based on standard INI files, with Item=Value elements grouped beneath [Section] headers. Optionally the top section of the file may contain global items (without a [Section] header). The section names are entirely arbitrary, intended for your convenience in grouping related sets of translations within a single TCF file. The defined item=value pairs (not case sensitive) are: s{#}=value Search pattern {optional # in 1-127 range}. If # is used, the following replacement item must use the same #. Value is a regex pattern, possibly containing up to 99 submatch references. r{#}=value Replacement pattern associated with the prior search pattern. (If a number is specified, it must match the prior search pattern number.) References to submatches in the search pattern must use \# syntax, where the # is the submatch number (not to be confused with the overall search pattern number.) flags=value Optional REGEX flags (same as for REGEX.SBR) Blank lines, and those beginning with !, ;, or # are treated as comments. For example, this TCF file... [cust] ; set PCRE_UNGREEDY... flags=&h0200 s=([^\w])(orderNo|custName)([^\w]) r=\1wo.\2\3 ... contains a single section, setting the Regex flags to &0200 (PCRE_UNGREEDY), and defining a single pair of search/replace patterns (with three submatch expressions). This would translate all word-delimited occurrences of "orderNo" to "wo.OrderNo" and "custName" to "wo.custName". Limitations: - Maximum # of s#/r# pairs per section: 127. (If you need more, split them into separate sections and execute the operation multiple times, once per section.) - Maximum # of sub-match replacements in a single s# pattern: 99 Errors (status parameter): -2 to -25 : matching errors (same as REGEX.SBR) -101 to -199 : pattern compiliation errors (same as REGEX.SBR) -93 to -99 : misc errors (same as REGEX.SBR) -92 : unable to allocate sufficient memory -91 : input file error -90 : output file error -89 : invalid item or syntax error in TCF -88 : too many s#/r# pairs in TCF -87 : TCF max line length exceeded -86 : unable to open TCF -85 : TCF section not found -84 : Unable to load REGEX library (PCRE) Comments: This function (Op 1) is essentially equivalent to the compiler 'transclude' mechanism (++include with integrated transcopy) and may be used to debug your ++include TCF files. But it is also useful for general purpose file translations. 4. Compiler refinement (edit 1025) - Support for "transclude" variation of ++include directives. "Transcluding" (aka "transcopying") is built on the same framework as MX_TRANSCOPY described above. It can be integrated into any of the existing ++include variants by adding one or two additional comma-delimited parameters: ++include includespec {,tcfspec {,section}} If the tcfspec parameter is specified, it must identify a Transcopy Configuration File (TCF) that follows the rules described for MX_TRANSCOPY above. If the section parameter is not included, then only the common section of the TCF (at the top, before any [section] headers) is processed. Otherwise, the common section plus the specified section is processed. Specifying a section that does not exist is considered an error, but a TCF file with no relevant search/replace patterns simply reverts back to an ordinary ++include operation. The concept here is to allow the use of generalized (or quasi-template) include files that can be customized at compile time for different uses, rather than having to maintain multiple separate include file variations. To debug the operation, you can either consult the LSX file (which will contain the result of each transclude operation), or use the MX_TRANSCOPY function. Note that ++include'once takes into account the TCF and section, allowing the same original include file to be included multiple times, each with a different TCF. But, if the include file contains a compiler directive to prevent multiple inclusions (e.g. ++IFNDEF, ++IFNLBL, etc.), then parent program would need to take additional action to override it (e.g. perhaps with an explicit ++UNDEF prior to the additional ++include directives). Also note that in APN, using the Goto Definition function to locate the definition of a function or other symbol will take you to the original version of the include file. For example, if you have a function Fn'Foo() in an include file FOO.BSI, and you use the transclude feature to include a variation of the function called Fn'Foo2(), using the Goto Definition function on a reference to Fn'Foo2() will take you to the definition of Fn'Foo() in FOO.BSI. (Fn'Foo2() only exists virtually so there is no practical way to jump to its source code.) ============================================================================ A-Shell Release Notes Version 6.5.1731.2 (06 June 2023) ============================================================================ 1. Compiler bug fix (edit 1024) - Correct another variation of the bug partially fixed in edit 1023. ============================================================================ A-Shell Release Notes Version 6.5.1731.1 (05 June 2023) ============================================================================ 1. Compiler bug fix (edit 1023) - Correct an issue introduced in compiler edit 1022 resulting in bogus compiler errors for certain combinations of ordered map parameter passing. ============================================================================ A-Shell Release Notes Version 6.5.1731.0 (29 May 2023) ============================================================================ 1. Compiler refinement (edit 1022) - Compiler now complains about mismatched collection arrays passed by reference to functions. For example, passing an ordmap to an ordmapm, or an ordmap(varstr;varx) to an ordmap(varstr;varstr). Since there may be situations where it makes sense to take advantage of the compatibility overlap between different kinds of collections, you can now signal to the compiler that you want to allow such mismatches, by appending an asterisk to the collection name in the function declaration. For example, the "*" in this function declaration... Function Fn'Foo($m as ordmap*(varstr;varx)) ... causes the compiler to allow essentially any kind of collection to be passed to the function. An example where this might make sense would be if you had an auxiliary function that traced the contents of a collection by iterating through it. A single copy of such a function could handle both ordmap and ordmapm, and quite possibly other collection type, as long as they supported iteration. Notes: - Since collections (as opposed to individual values within a collection) are passed by reference, the called function actually operates directly on the passed copy of the collection. So for example, even if the function was declared as receiving an ordmap, if the caller passes an ordmapm, then the function will operate on that ordmapm (i.e. it will support duplicate keys). That could lend useful flexibility, or introduce subtle bugs, which is why the default is now to treat it as a compilation error unless you explicitly request the flexibility (with the asterisk). - The runtime system previously triggered an error 63 (Func/Proc parameter type/size mismatch) for some of these mismatches. It now assumes that the programmer and compiler together weeded out the unintentional mismatches. - There is no problem (and no need for the asterisk) when passing a collection with an varstr value type to a function receiving it as a collection with a varx value type. (Varx can faithfully represent any varstr value.) But the reverse is not true, and requires the asterisk feature if you want to allow it. 2. Most collection type mismatches during parameter passing no longer generate runtime errors. (It is left to the compiler to warn you about inadvertent mismatches - see previous item.) 3. DUMP.LIT 1.0(109) refinement: when a starting block number is specified, it now seeks directly to that position, rather than silently reading all the prior blocks. (Mainly a benefit for very large files.) 4. MX_FILEPOS bug fix / refinement: re-do the 1730.6 patch, closing a heap corruption loophole in EZTYP, and extending support to EFS-encrypted files. 5. EZTYP.SBR bug fix: Passing the 2nd parameter (top margin) as a literal number was reverting to EZSPL mode (prompting unnecessarily). 6. AUI image resizing bug fix: resizing windows containing images at starting row 0 (typically icons) was resulting in the images being reduced to a single pixel high. 7. AUI caret bug fix: close the most common window of opportunity through which the focus caret was subject to disappearance when resizing a window or jumping between windows. ============================================================================ A-Shell Release Notes Version 6.5.1730.6 (26 May 2023) ============================================================================ 1. MX_FILEPOS bug fix / refinement: now supports files beyond 2GB, provided that the pos parameter is sufficiently large (i.e. I6, F6, F8). Note that this 32 bit limit issue only affects stream files, i.e. files open for INPUT, OUTPUT or APPEND (not RANDOM or ISAM). Also note that MX_FILEPOS remains limited to 2GB for EFS-encrypted stream files. ============================================================================ A-Shell Release Notes Version 6.5.1730.5 (23 May 2023) ============================================================================ 1. CSV2XL.SBX 2.1(283) - Fix //XL,SetRow bug which was causing existing column format attributes to be lost when adding some unrelated attributes (such as background color). 2. Compiler bug fix (edit 1020) : DEFXCALL now allows subroutine names that are also keywords (e.g. XCALL AMOS). Standard include file ashinc:xcall.def updated accordingly. 3. Compiler refinement (edit 1021) : ++IFDEF directive now recognizes DEFXCALL. ============================================================================ A-Shell Release Notes Version 6.5.1730.4 (16 May 2023) ============================================================================ 1. Another fix related 1730.1 and 1730.2 to close window of opportunity for a varx value passed to a function to be overwritten on the stack before it was actually seen by the called function. ============================================================================ A-Shell Release Notes Version 6.5.1730.3 (12 May 2023) ============================================================================ 1. Minor internal code adjustments for CentOS 9 / GCC 10 compatibility. ============================================================================ A-Shell Release Notes Version 6.5.1730.2 (12 May 2023) ============================================================================ 1. Refinement to the 1730.1 fix relating to passing varx values from ordered maps directly to functions. ============================================================================ A-Shell Release Notes Version 6.5.1730.1 (11 May 2023) ============================================================================ 1. Ordered map parameter passing bug fix: the value of an ordmap(varstr;varx) map was being incorrectly treated as string rather than unformatted when passing it to a function, causing the transfer to be terminated prematurely on the first null byte. For example: dimx $m, ordmap(varstr;varx) map1 mx, x, 0 ... call fn'foo($m(key$)) ! possible incomplete transfer of param mx = fn'foo($m(key$)) call fn'foo(mx) ! ok 2. XTREE bug fix: an editable column using colfmt "#" with the addition of "." or "-" (to accept decimal points and/or minus signs along with digits) was incorrectly also accepting some non-numeric characters. 3. CSV2XL.SBX 2.1(275) enhancement: CSV source files using TAB or pipe (|) delimiters are now supported. 4. CSV2XL.SBX 2.1(277) enhancement: new INI file option: [Format] FootnoteSubscripts=1 When set to 1, any occurrences of "(#)" or "(##") (where # represents a digit from 0-9, e.g. "(1)" or "(13)") in the banner, or column titles will be converted to the corresponding subscripted number. Similarly, "#)" or "##)" at the start of a footnote will also be converted. The idea is to mimic the standard typographic handling of footnotes in traditional publishing. Unfortunately, the subscript font may be so small in Excel that they are to read. Which is why it remains an option, defaulting off. 5. CSV2XL.SBX 2.1(279) enhancement: new directive AddLink: //XL,AddLink,row=<#>,col=<#>,text={,linkto=} This creates a link in the specified cell, with the specified display text, that when clicked, jumps to the specified link target. Links are particularly useful for drawing the user's attention to explanatory footnotes (see AddFootnote) which might otherwise go unnoticed at the bottom of the sheet. But they can also be useful for creating a free-form table of contents to sections in a very large spreadsheet, or to jump from one sheet to an associated part of anothre. The Row and Col parameters should be numeric, starting at 1 for the first row / column. Note that the link occupies only a single cell. If the link is to share row 1 with a banner (see SetBanner), then the banner size will be adjusted accordingly. For example, if the link is to occupy the cell 1,1 then the banner will start in column 2. Or, if there are 10 columns in the spreadsheet and the link is positioned in row 1, column 10, then the banner will occupy row 1 columns 1 thru 9. The text parameter determines what will display in the cell (blue and underlined like typical links). It should probably be kept short since they occupy only a single cell and Excel does not always know how to properly wrap them. The linkto parameter can be in one of the following forms: - A standard Excel cell address on the current sheet, e.g. linkto=A99 linkto=$Q$2 - To link to a cell on another worksheet, prefix the cell address with the worksheet name and an exclamation point, e.g. linkto=Detail!A1 - To link to a URL, just specify the URL, including the scheme prefix: linkto=https://www.microsabio.com AddLink directives can appear anywhere in the source document; before or after the row in question has been populated. 6. LIBASHODBC enhancement (1.6.120) - Support for the new FETCH_NULLS flag (to return "NULL" instead of "" for null values) extended across the FETCHR_ARRAY, FETCHR_ROWMAP and FETCH_FIELDS (variants of SQLOP_FETCH_ROW. Note that in the case FETCH_FIELDS, it only applies when the field is returned into a string variable of 4 or more bytes. 7. LIBMYSQL enhancement (1.6.146) - Support the new opcode SQLOP_FETCH_GRID, and the FETCH_NULL flag (as described for LIBASHODBC above.) 8. CSV2XL.SBX 2.1(280) bug fix: commas were causing field breaks in tab- delimited files. CSV2XL now determines the delimiter (among the choices of comma, tab, or pipe), by analyzing the first several data lines, and then uses only that delimiter for separating the columns. Note though that the //XL directives are always comma-delimited, regardless of the delimiter used for the data lines. 9. CSV2XL.SBX 2.1(281) refinements: - SetBanner directive now recognizes any number of literal embedded "^M" line breaks. Previously it only recognized the first one. - Literal "^M" line breaks are now always case insensitive (i.e. "^M" and "^m" are equivalent). Previously it recognized only the upper case version in some contexts. - SetBanner and AddLink directives now accept most common //XL parameters, allowing you to override the font, alignment, colors, etc. For example: //XL,SetBanner,text="Left justified banner",ALIGNH_LEFT //XL,AddLink,row=1,col=1,text=Notes,FILLPATTERN=SOLID,patternbgc=COLOR_ROSE Note however that the font established (explicitly or by default) on the first AddLink directive is used for all links throughout the workbook. (You can change the other format attributes such as background color or alignment, but not the link font once established.) 10. CSV2XL.SBX 2.1(282) refinements: - RGB mode is now automatically activated if any color parameter in the INI file is specified in terms of a hex value, e.g. HeadersBG=&hd0e0f0 - The SetDefaultFont directive was failing to recognize the parameter "fontname" (preferring "fontface" or "name" instead). It also now defaults to fontsize=10 if not specified. (Previously failing to specify a size resulted in a microscopic font.) - Clear up some loose ends in the [XL] section of the INI file. Since this was never documented properly, this section allows you to specify up to 9 CSV2XL directives, e.g. [XL] 1,SetRGBMode 2,SetDefaultFont,fontname="Calibri",fontsize=12 Note that the //XL prefix is dropped, and that each line must start with #, where # is a unique digit from 1-9. ============================================================================ A-Shell Release Notes Version 6.5.1730.0 (23 April 2023) ============================================================================ 1. ASQL enhancement: new opcode SQLOP_FETCH_GRID (25): xcall SQL, SQLOP_FETCH_GRID, cmdhdr, $grid() Fetches entire result set (or what remains of it) into the specified gridmap $grid(). As with INPUT CSV into a gridmap, there are two variations: - In the case of gridmap(int; int; varstr), the grid is indexed by row # and column #, and the first row contains the column (field) names. (The grid will have one more row than the number of rows in the result set.) - In the case of gridmap(int; varstr; varstr), the grid is indexed by row # and column name. The specified grid will be cleared at the start of each call. A new cmdhdr.opflags flag, FETCH_NULLS (&h0100) may be specified to cause null fields to be returned as "NULL" instead of as "". (.NULL cannot be stored in a collection since assigment of a collection key-value pair to .NULL deletes the item, so "NULL" has to be used here as a proxy.) The cmdhdr fields will be returned as they are for SQLOP_FETCH_ROW, except that info2 will contain the number of rows in the result set. 2. LIBASHODBC enhancement (1.5.118) - Support the FETCHR_ROWMAP option on the SQLOP_FETCH_ROW operation. (Previously was only supporteed in the LIBASHMYSQL library.) The FETCH_NULLS bit in cmdhdr.opflags also applies to FETCH_ROWMAP. 3. LIBASHODBC enhancement (1.6.119) - Support the new SQLOP_FETCH_GRID. Note that the new operation also requires A-Shell 6.5.1730 or higher. 4. Stack underflow bug fix - some operations on collections were causing a stack underflow, which in some cases was clobbering the SIGNIFICANCE setting. 5. XRUNLOG bug fix (see 6.5.1723) - calling the exit logging routine was erroring out if the job was never successfully initialized due to a startup failure. 6. XTREE filter refinement - various improvements to the new CBX filter type. The dialog now shows all the items, not just those that are currently visible in the tree. 7. XTREE popup menu refinement - certain combinations of global and local menu options were resulting in one or more spurious or redundant menu separators or options. 8. XTREE sort bug fix - close a GPF loophole in the Fold and ASCII sort variations. 9. XTREE filter bug fix - specifying the filter option with a file-based tree was crashing the tree. (Auto-filter is still only supported with array-mode trees; the option will now be ignored if specified with a file-based tree.) ============================================================================ A-Shell Release Notes Version 6.5.1729.0 (14 April 2023) ============================================================================ 1. XTREE filter enhancement: new filter variation (Filter=CBX) is similar to the old Filter=CB but instead of grouping the items by the first 1-2 characters, it lists them all. The new CBX filter replaces the CB filter as the default filter type (when applicable), so most trees will change to the new filter without any program change or recompilation. The exception is when Filter=CB is explicitly specified, in which case it continues invoke the old filter. 2. TCPX refinement: the routine now explicitly rejects attempts to communicate on socket 0. Previously, in some exotic cases, an attempt to read or write on socket 0 would lead to some kind of breakdown. 3. libashtls.so.1.3.217.el7 refinement: Refresh/relink with GNUTLS 3.6.29 (up from 3.6.26) for minor protocol / security updates and bug fixes. Note however that since the gnutls library is dynamically linked, you'll need to use "yum update gnutls-devel.i686" on your server to get the full update. 4. XTEXT bug fix: buffer was getting truncated by number of CRLF pairs in source. ============================================================================ A-Shell Release Notes Version 6.5.1728.3 (25 March 2023) ============================================================================ 1. Parameter passing bug fix - passing .NULL as an argument to a DIMX array function parameter was in some cases causing a spurious error 63 (func/proc param type/size mismatch). 2. INFLD bug fix - the ability to pass an ordered map to the SETDEF parameter (see 1727.0) wasn't working when the map was declared locally. (It was triggering an invalid parameter type/size error.) 3. GRIDMAP bug fix - the numeric row,col index values weren't respecting a global SCALE factor. ============================================================================ A-Shell Release Notes Version 6.5.1728.2 (25 March 2023) ============================================================================ 1. Compiler bug fix (edit 1019) - RUN header was getting corrupted if program had more than 8K of DATA statement values and a minimum run version requirement. (VERSYS would report the bad header but the runtime system would most likely crash if program was run.) ============================================================================ A-Shell Release Notes Version 6.5.1728.1 (17 March 2023) ============================================================================ 1. Compiler bug fix (edit 1017) - ORDMAPM assignments were not being compiled correctly, resulting in null values being assigned. (Introduced in compiler edit 1016.) 2. Compiler bug fix (edit 1018) - Remove a spurious syntax error when the READ'ONLY option was included on a file opened in RANDOM mode. ============================================================================ A-Shell Release Notes Version 6.5.1728.0 (16 March 2023) ============================================================================ 1. Language enhancement -- new storage class GRIDMAP is a two-dimensional variation of ORDMAP with a two-part key (row and column), suitable for handling datasets consisting of rows and columns. - Declaration: dimx $map, gridmap(int; varstr; varstr) ! num row, str col, str value dimx $map, gridmap(int; int; varstr) ! num row and col, str value - Assignment: $map(row, col) = value Depending on how the gridmap $map was declared, the col specification should be a string (representing the column title) or a number (column number). In all cases, the row is numeric. Maximum range for the row number index is -9,999,999 to 99,999,999. Maximum range for the col number index is -9,999 to 99,999. (There is no maximum range for the string version of the column index.) - Gridmap dot functions: The gridmap supports two new functions .minrow() and .maxrow(), plus an expanded form of the .key() function: .minrow($map()) - returns first row number .maxrow($map()) - returns last row number .key($$i,1) - returns the 1st index (row) for specified iterator .key($$i,2) - returns the 2nd index (col) for specified iterator The standard .key() and .extent() functions work on gridmaps as follows: .key($$i) - concatenated key formatted as ########|##### .extent($map()) - number of row,col,value triplets in entire structure Note that the minimum row number is not necessarily one, nor is the maximum row number necessarily the same as the number of rows. There is no special function to return the extent (number of) rows or columns independently. - Gridmap Iteration: Iterate through the gridmap using either a foreach loop (as with ordmap) or a traditional for/next loop (for the numeric dimensions). In the foreach case, iteration proceeds across the columns and down the rows. Use the expanded .key() dot function to determine the row and column associated with the current iterator value, as in this example which iterates through the entire gridmap, display the row and column indices along with the value: foreach $$i in $map() ? "Row "; .key($$i,1); ", Col "; .key($$i,2); "-->"; $$i next $$i A standard numeric for/next loop can be used to iterate through the rows, and in the case of the gridmap with numeric columns, through the columns as well. Note that you can use the .minrow() and .maxrow() functions to get the starting and ending row values, but there is no guarantee that all of the intervening rows exist. And in the case of the columns, there is no mechanism to determine the extent or range of columns for each rows, other than .isnull(). The following example iterates through all the rows and columns 1 thru 5, skipping any unassigned elements: for row = .minrow($map()) to .maxrow($map()) for col = 1 to 5 ! gridmap(int; int; varstr) if not .isnull($map(row,col)) then ! if row,col,value triplet exists... ... endif next col next row 2. INPUT CSV enhancement: an entire CSV file can be loaded into a gridmap in a single step using: input csv #ch, $gridmap() For the gridmap(int; int; varstr) variation, the values will all be indexed by numeric row and column, each index starting from 1. (The number of columns in each row may vary.) For the gridmap(int; varstr; varstr) variation, the first row of the CSV is assumed to contain the column headers, which are used for indexing the columns by name. In that case the second physical row of the CSV will be treated as row 1. The application can determine the column names by iterating across the first row, using the .key($$i,1) function to check when the row number changes. The following example copies the column names from row one into a separate array: dimx colnames$(0),s,40,auto_extend dimx $csvmap, gridmap(int; varstr; varstr) map1 col,i,2 ... input csv #ch, $csvmap() foreach $$i in $csvmap() if .key($$i,1) = 1 then ! if row 1 col += 1 colnames$(col) = .key($$i,2) else exit ! quit when we hit the next row endif next $$i 3. IFE$() refinement: A .NULL first argument is now treated the same as blank. Previously it was treated as "". Note that the numeric version, IFE(), has always treated .NULL as equivalent to zero. ============================================================================ A-Shell Release Notes Version 6.5.1727.0 (11 March 2023) ============================================================================ 1. INFLD enhancement: an ordered map can now be specified for the setdef parameter as an alternate way to supply a list of valid individual or paired key,value inputs or for populating a combo. If the ||L or ||l type code is specified, both the map keys and values are used. Otherwise only the map key is used and the value is ignored. 2. Compiler bug fix (edit 1015) - an ordered map copy of the form $map1() = $map2() may have triggered a spurious syntax error in the subsequent statement. 3. XTREE (client-side) bug fix - property sheets were displaying with an extra row and column (introduced in 1723.4). 4. DYNLIB bug fix: redundant Load operations were wasting memory handles, and redundant Unload operations were triggering an unnecessary "dynamic library error". ============================================================================ A-Shell Release Notes Version 6.5.1726.1 (28 February 2023) ============================================================================ 1. XTREE bug fix: The XTR.XVALIDATE flag was not being properly set on a LISTX cell when clicking on some internal part of the tree. Problem was introduced in 6.5.1723.3. 2. XTREE bug fix: The Advanced Coldef Option Fastmax=1 was not working properly with combos. ============================================================================ A-Shell Release Notes Version 6.5.1726.0 (19 February 2023) ============================================================================ 1. XTREE enhancement: add member FILTERED to the XTRCTL parameter structure. Returns 1 if one or more display rows had been removed through filtering upon exit from the tree. The tail end of the XTRCTL structure is now as follows (retrieve the full updated XTREE.MAP and/or XTREE.SDF files from the MicroSabio Bitbucket repository at https://bitbucket.org/microsabio/soslib/src/master/907016/) ... map2 FOOTERSTYLE,B,1 ! [138] same XTHSF_xxx flags as HEADERSTYLE (6.3.1537+) map2 COLID,B,1 ! [140] column ID map2 COLTYPEID,B,1 ! [141] column Type ID map2 XDIRTY,B,1 ! [142] exit cell (XROW,XCOL) was changed (i.e. dirty) map2 XDSPROW,B,4 ! [143] display row corresponding to physical XROW map2 FILTERED,B,1 ! [143] =1 if rows have been filtered by user map2 UNUSED2,X,4 ! [142] was 10 [141] was 11 [140] was 12 ! (total size = 128) 2. XTREE bug fix: checkboxes and radiobuttons were not toggling properly (problem introduced in 1724.2). 3. CSV2XL.SBX 2.1(270) bug fix - Literal "^M" wasn't working within cells using cell-level HTML-style formatting. 4. CSV2XL.SBX 2.1(271-273) - SetGroup now retains the individual column formats for the group summary while adding bold. Previously the summary lines were bold but otherwise used the General format. ============================================================================ A-Shell Release Notes Version 6.5.1725.3 (14 February 2023) ============================================================================ 1. XTREE bug fix: processing a filter was re-enabling the filter buttons on all the eligible columns, rather than leaving them in the current state. 2. RUN intepreter bug fix: programs compiled without /X:2 but which included code that caused a minimum run version to be added to the header were either aborting with a "RUN file is in an incompatible format" error, or simply crashing. (Probably only affected programs containing the DATN() function) ============================================================================ A-Shell Release Notes Version 6.5.1725.2 (13 February 2023) ============================================================================ 1. (Windows ATE Server) AUXLOC printing bug fix: the PREFIX and SUFFIX options were being ignored when printing to ATE from a Windows server. 2. PDFX/ATE bug fix: When printing through ATE using one of the //PDFX,Save directives that specifies only a directory (therefore using the original source filename), the resulting filename was getting a -# suffix appended even when the WhenExists directive was not set to AutoNumber. (This was a side effect of ATE saving printed files in its cache directory with -# suffixes to make them unique, which is why it only affected ATE printing.) ============================================================================ A-Shell Release Notes Version 6.5.1725.1 (08 February 2023) ============================================================================ 1. MX_CLFLAGS bug fix - updating some of the flags was not having the same effect as specifying that flag on startup. For example, using MX_CLFLAGS to set the CLF_HEI bit was not having the same effect as specifying -hei on the ashell command line. The problem mainly affected the CLF_EXIT, CLF_HEI, CLF_HETCKI, CLF_NOHANG, CLF_HANGDELAY, CLF_HANGPARENT, CLF_QUIET, CLF_SUBMIT, CLF2_SILO, and CLF2_NTTS flags. ============================================================================ A-Shell Release Notes Version 6.5.1725.0 (06 February 2023) ============================================================================ 1. Language enhancement (compiler 1014) - add support for the DATN(y,x) function ("double arctangent", aka "four-quadrant inverse tangent") which was somehow overlooked during the original implementation of the other trigonometric functions supported in the original AlphaBASIC, and whose absence was creating a nuisance for a very select set of mathematically- inclined A-Shell developers. Note that although DATN(y,x) may seem like a typo, it actually makes more sense than DATN(x,y) as it matches the geometric interpretation, i.e. DATN(y,x) is the angle between the x-axis and the line passing through the origin (0,0) and the point (x,y). (Thanks to Bob Fowler for pointing this out.) Also note that for full backwards compatibility with AlphaBASIC, the function is recognized in all variations of the compiler (OCMPIL, COMPIL, COMPLP). However, since it requires A-Shell runtime 6.5.1725.0+, by default the compiler will set the minimum runtime version in the RUN header, which in the case of OCMPIL changes the header signature from &hF002 to &hF202 (use VERSYS to display), making the RUN file incompatible with AMOS. If, for some reason you need to create an AMOS-compatible RUN file containing the DATN(x,y) function, add the /F1 switch to the compilation to disable the minimum version information in the RUN header. 2. FACT(n) bug fix / refinement: upgrade the implementation of the factorial function to support non-integers. It now matches the AlphaBASIC version and the generally accepted mathematical definition, using the standard C library function tgamma(n+1), with the one exception being that FACT(-1) returns 0 instead of -nan (not a number). Note that the previous implementation appeared to accept non-integers but returned completely incorrect results. Thanks again to Bob Fowler for this correction. 3. VERSYS.LIT updates: - 3.1(112) Add dynamic function index to the display - 3.1(113) Refinement to recognize header signatures &hF202 (OCMPIL with minimum version) and &hF203 (COMPIL with minimum version.) 4. CSV2XL.SBX 2.1(269) refinement: Extend limit on individual //XL parameters from 256 to 512 characters. (This was mainly an issue for footnotes and possibly banners, which can get quite lengthy.) ============================================================================ A-Shell Release Notes Version 6.5.1724.2 (06 February 2023) ============================================================================ 1. Refinement to INT() and FIX() - when FPROUND is not set, these functions now apply a fudge factor of .0000005 (one tenth of the standard FPROUND factor). This minimizes the problem illustrated whereby an expression like INT(140.4*100) might result in 14039 rather than 14040. The discrepancy is caused by the inherent imprecision of binary floating point representation of decimal fractions (e.g. 14039.999999975 instead of 14040.0). There are various other ways to deal with this issue, including setting the FPROUND option, but the issue continues to catch programmers by surprise; this automatic adjustment should minimize that problem. But note that it only works for numbers up to about 8 significant digits, after which the tiny fudge factor becomes too small to matter. If you regularly work with larger numbers and aren't explicitly dealing with rounding within the application, you may want to set your rounding factor somewhat higher. See "Rounding of Floating Point Variables" in the A-Shell reference for more details. 2. CSV2XL.SBX 2.1(268) enhancement: A literal "^m" inside a data field now makes the expected adjustments to the spreadsheet configuration (activating the wrap option and increasing the row height). Note that this was previously supported in the column headers only. 3. XTREE refinement: When exporting to XLSX, embedded CRLF's (ASCII 13 plus ASCII 10) are now exported as "^m". Requires CSV2XL 2.1(268) to be effective. 4. XTREE bug fix: certain combinations of context menu options (mixing both explicit PopupMenu and implicit options) were resulting in an off-by-one error between the option selected by the user and the option performed by XTREE. ============================================================================ A-Shell Release Notes Version 6.5.1724.1 (30 January 2023) ============================================================================ 1. Add context menu option to system message window to send ^C to the application, primarily as an aid to developers who may face the need to abort in awkward situations during testing. Unlike hitting ^C on the keyboard, this method bypasses restrictions on the keyboard mode (i.e. locked or local mode only). In the ATE case, it also discards any currently queued output, allowing the effect of the ^C to be seen more rapidly in the output. Note that sending a ^C doesn't necessarily always abort the application. Possible exceptions would be where the applicaton has disabled it, or is trapping and resuming from it, or is in the middle of a GUI wait state. Also note this may leave the terminal in an indeterminate state requiring you to use the Settings menu to manually clear the kbd lock and/or reset the terminal, but but helps to work around situations where a combination of rapid output and a keyboard lock makes it otherwise impossible to abort an out-of-control program. 2. CGI mode refinement: close a potential problem loophole if the CGIUTL CGIOP_GETPAR function is called and the program invoked using the GET method with no parameters. 3. XTREE bug fix: when exporting to XLSX format, columns containing ##:## (e.g. HH:MM or MM:SS) were ending up blank in the Excel worksheet. Problem was actually in CSV2XL.SBX (used by XTREE for the export). Fix is in CSV2XL.SBX version 2.1(267). 4. PRTXLS.SBX 2.1(222) now recognizes underline characters (along with the previously recognized dashes and equal signs) as column markers when used to separate the column titles from the column data. (Removes ambiguity in properly recognizing the column boundaries.) ============================================================================ A-Shell Release Notes Version 6.5.1724.0 (19 January 2023) ============================================================================ 1. Compiler refinement (edit 1010) - minor internal adjustments to improve code portability and robustness. 2. Compiler bug fix (edit 1011) - resolve a conflict between the GLOBAL_BEGIN pragma and dynamic structure compilation that was causing spurious compiler errors. 3. Language enhancement (compiler edit 1012) - DIMX arrays of type S may now be passed by reference to functions. (Previously only type X was allowed.) 4. Language enhancement (compiler edit 1013) - DIMX arrays of type B, F and I may now be passed by reference to functions. 5. QUTL.LIT Version 3.1(133) - add option to choose job to ZAP from a pick list. 6. XTREE autofilter refinements: - If autofiltering is enabled globally via the OPTIONS=XTAUTOFILTER directive in the miame.ini, but not set explicitly for the current tree (via the XTF2_AUTOFILTER flag), then the initial state of the filter buttons will be hidden, but can be activated (made visible) via the context menu. This is intended to make it easier to enable autofilter globally without having to worry about the overcrowding of narrow column headers or general clutter caused by the filter buttons in trees where filtering may not be important. - Close a small GPF loophole related to filtering - Add a new Advanced Coldef Option (FilterInitialState=Disable) which can be used to hide the filter button from specific columns (or the entire tree if added to the zero column definition), while still allowing it to be activated via the context menu. - Add a new option to the context menu to toggle the filter button for just the current column. - Fix problem of filter buttons failing to respond if the column had already been selected. - Vastly improve (10-50X) the speed of filtering operations. 7. PDFX bug fix: landscape orientation was not working properly in the PDF-XChange standard driver. ============================================================================ A-Shell Release Notes Version 6.5.1723.3 (7 January 2023) ============================================================================ 1. XTREE bug fix: close a small timing loophole related to cell editing in which an external click event (such as on a button outside the tree) might result in the primary exitcode being set to -48 (cell validation) rather than the expected exitcode associated with the clicked-on object. ============================================================================ A-Shell Release Notes Version 6.5.1723.2 (6 January 2023) ============================================================================ 1. XTREE bug fix: cell editing validation within property sheets wasn't working properly. (Problem introduced in 6.5.1715 related to the local validation feature.) ============================================================================ A-Shell Release Notes Version 6.5.1723.1 (4 January 2023) ============================================================================ 1. XTREE bug fix: close a loophole where the internal physical order of the array might be lost as the result of clearing the XTF_SORT flag and then re-entering a tree previously created with the flag set. ============================================================================ A-Shell Release Notes Version 6.5.1723.0 (3 January 2023) ============================================================================ 1. DYNSTRUCT assignment refinement - assignments of the following format... DS = ST ...where DS is a bound dynstruct variable and ST is an unformatted variable or structure, will now preserve the size of DS, regardless of the size of ST. In other words, it will treat DS as a fixed size target, but with the added feature of clearing any bytes in DS that are beyond the size of ST. Previously, since DYNSTRUCT variables are dynamic, such an assignment would resize the DS target if it didn't match the size of ST. And that could lead to an invalid memory reference if the assignment caused the DYNSTRUCT to shrink and then you subsequently tried to reference a field in the structure that was now beyond the new size. This is a rare and unusual situation, since the normal use case is to only assign dynstruct instances from structures that match the currently bound definition. But this change closes that loophole and also possibly opens up some advanced possibilites for handling structures that vary in length but are otherwise compatible. 2. Close potential DYNSTRUCT invalid memory access loophole: Any reference to a DYNSTRUCT member variable whose position within the structure definition exceeds the current physical length of the DYNSTRUCT memory allocation now generates an error 70. The change to the DYNSTRUCT assignment behavior above should make this difficult if not impossible, but given the potential security breach of allowing memory accesses to extend beyond the bounds of a structure, this is a reasonable failsafe protection. 3. New activity logging feature: XRUNLOG hook If the subroutine DSK0:XRUNLOG.SBX[7,6] exists when A-Shell is launched, it will be called at the start and end of the A-Shell session, as well as at the start and end of each RUN (not including LIT or SBX) execution, with the intended purpose of facilitating customizable activity tracking. The SBX is called as follows: xcall XRUNLOG, EVT, JCBREC, STATUS where: EVT (num) [in] - specifies the event: 1=start of A-Shell session 2=end of A-Shell session 4=start of RUN 8=end of RUN JCBREC (ST_JCBREC) [in] - contains a copy of the JOBTBL record for the current job. (See ashinc:jobtbl.sdf) STATUS (i,4) [in/out] - initially set to 0, this parameter will contain the value passed back by the prior call to this SBX for this job. Provides a way for the SBX to link the start and end events together (by log file position, record number, key, etc.) A sample XRUNLOG subroutine is provided in SOSLIB:[907,54] which creates a simple sequential file log of the events (similar in concept to the ashlog.log file when the INOUT and EXEC TRACE flags are set, but more focused and consistent in structure). The sample subroutine also contains a function that processes the raw log, creating a consolidated version with just one entry per session or RUN with some elapsed activity counts. ============================================================================ A-Shell Release Notes Version 6.5.1722.3 (16 December 2022) ============================================================================ 1. Recompile with updated toolset. No feature changes. 2. PRTXLS.SBX 2.1(221) license update to support LibXL 4.0.3.x 3. CSV2XL.SBX 2.1(266) license update to support LibXL 4.0.3.x ============================================================================ A-Shell Release Notes Version 6.5.1722.2 (08 December 2022) ============================================================================ 1. ASHNET update to 1.4.188 resolves various issues: - Office365 TLS negotiation - FTP2 TLS negotiation and wildcard operations. - FTP2 session reuse error with FileZilla Server v1.3 - FTP2 (SFTP) support added for ecdsa-sha2-nistp521 and -nist384 algorithms - OAUTH2 refinement for Microsoft endpoints to fix browser caching. 2. XTREE bug fix: in rare cases, clicking on the autofilter button was causing the tree to appear to be locked up due to the filter dialog being off screen. ============================================================================ A-Shell Release Notes Version 6.5.1722.1 (03 December 2022) ============================================================================ 1. Recompile/relink with refreshed tools (possibly fixing at least one crash issue in XTREE.) ============================================================================ A-Shell Release Notes Version 6.5.1722.0 (26 November 2022) ============================================================================ 1. XTREE enhancement - new Advanced Coldef Option: ImgDflt= If specified and the image file corresponding to the image file specification in an image cell doesn't exist, then XTREE will use the default image instead. Notes: - The ImgDflt feature is only activated when the original cell data specifies a discrete image file that does not exist. In other words, if the cell contains an icon spec like nosuch::ashico1, the ImgDflt feature will not come into play. - The ImgDflt is not used if the corresponding cell data is empty. - You can reference the ImgDflt deliberately by putting "*" in the cell. (This is equivalent to a filespec that doesn't exist, except is cleaner and more efficient since it eliminates the need for a failed directory lookup.) 2. XTREE bug fix - the logic to detect and share multiple instances of the same image is now working as expected. (It had gotten quietly broken several revisions ago.) 3. EMAILX.SBX 6.5(142) - remove limits on length of password and list of recipient addresses (previously 1024 and 25000 respectively) ============================================================================ A-Shell Release Notes Version 6.5.1721.8 (09 November 2022) ============================================================================ 1. Embedded DEFSTRUCT bug fix - close a loophole that had previously allowed the internal definition of an embedded DEFSTRUCT to become corrupted under certain circumstances. ============================================================================ A-Shell Release Notes Version 6.5.1721.7 (09 November 2022) ============================================================================ 1. Compiler bug fix (edit 1009) - DATA statements longer than 512 bytes were overflowing an internal statement buffer without triggering a proper compiler error, in some cases causing the compiler to crash. The limit has been increased to 1024, but note that multi-term DATA statements can always be broken up into multiple DATA statements, so the limit should only be an obstacle in cases where the length of a single DATA term exceeds it. 2. ACCEPT.SBR / ACCEPN.SBR bug fix: both were failing to recognize the second parameter if expressed as literal value (e.g. "IFX") rather than (e.g. XLT$). Problem was introduced in 6.4 when the readonly attribute bit for XCALL params was implemented. 3. DSPLY.SBR bug fix: same issue as described above for ACCEPN was affecting the 4th argument when the option parameter was set to 2. ============================================================================ A-Shell Release Notes Version 6.5.1721.6 (26 October 2022) ============================================================================ 1. VUE bug fix: SHOWTABS t (see 1721.2 below) was causing all "t" characters to display in reduced intensity. ============================================================================ A-Shell Release Notes Version 6.5.1721.5 (18 October 2022) ============================================================================ 1. Minor enhancement to XTREE tracing (mostly for debugging purposes). 2. EMAILX.SBX 6.5(141) - attachment names were getting truncated at 50 chars. ============================================================================ A-Shell Release Notes Version 6.5.1721.4 (09 October 2022) ============================================================================ 1. AUI_CONTROL bug fix: MBF2_DLGSTATE was in some cases incorrectly reverting to the original design coordinates rather than the last saved ones. 2. ASHNET library bug fix (1.4.185) - Fix XHTTPF_SSL_xxx symbols (to specify minimum levels of SSL or TSL protocol) which were broken in 1.4.184. 3. ASHNET enhancements (1.4.186): - The certpw parameter to HTTP.SBR now supports all three of the encryption modes supported by MX_PWCRYPT. Previously it only recognized modes 1 and 2. Note that for mode 3, it assumes the default seed and key. - CRYPTO.SBR encryption/decryption using RSA public/private keys now supports additional file formats beyond PEM: XML, JWK, DER (PKCS1 or PKCS8, raw or base64 encoded). If a password is required, specify it in the aad (additional authentication data) parameter and set the prior unused params to "" or 0 according to their types. ============================================================================ A-Shell Release Notes Version 6.5.1721.3 (05 October 2022) ============================================================================ 1. Compiler bug fix (edit 1008) - the embedded DEFSTRUCT index wasn't being terminated properly, leading to DEFSTRUCT/DYNSTRUCT binding errors under certain sequences. 2. Embedded DEFSTRUCT bug fix - run time workaround for problem fixed by compiler 1008. 3. Windows warning: This version was built with the latest version of the Windows 10.0 SDK, and platform toolset v143 (up from v141), possibly affecting backwards compatibility. (Beta testing in progress.) ============================================================================ A-Shell Release Notes Version 6.5.1721.2 (03 October 2022) ============================================================================ 1. VUE enhancement: support SHOWTABS directive in INI.VUE and command mode to allow embedded TAB characters to be represented in the display by some other character. The argument can be boolean (in which case the default is to use a lower case "t"), or it can be the ASCII value of the character to use (in decimal, hex or octal notation). It also accepts the special value ">>" to use the right guillemet (aka double right chevron) character (requires ANSI/Latin1 character set). Examples: >SHOWTABS enables feature using "t" >SHOWTABS OFF disables feature >SHOWTABS >> use the ">>" character >SHOWTABS 20 use ASCII 20 (^T) Note that in all cases, the character used will be dim to hopefully distinguish it from the normal text characters. Also, ASCII values between 1-31 are displayed like control characters, i.e. 1 displays as a dim "A", 20 as a dim "T", etc. 2. ISAMA lock tracing bug fix: lock list traces were showing only the upper longword (typically 0) of the record numbers. And locked records above 4 GB were accumulating in the lock list even after the underlying lock was released. ============================================================================ A-Shell Release Notes Version 6.5.1721.1 (28 September 2022) ============================================================================ 1. Compiler bug fix (edit 1007) - DEFSTRUCT members with initial values or overlays were not being compiled correctly, typically either leading to bogus compiler error messages or invalid syntax or out of memory errors when using DIMX to create an array of structure elements. ============================================================================ A-Shell Release Notes Version 6.5.1721.0 (25 September 2022) ============================================================================ 1. PDFX Email bug fixes and refinements: - //PDFX.EMail.Enabled directive now supported across all EMail.Methods. (It defaults to TRUE so it's primary use is to disable the EMail directives without having to individually comment out all of them.) - Fix case sensitivity snafu. The documentation (both for A-Shell and for the PDFX driver API) used "Email", but it turns out that PDF-XChange Standard (version 9) driver is case sensitive and expects "EMail". This gave the appearance of Email.Methods 0-2 (i.e. the ones handled by the driver rather than Methods 4-6 which are handled by A-Shell independent of the driver) of having been broken. It wasn't a big deal for most people since Methods 0-2 have been long deprecated in favor of 4-6. Howevever, A-Shell now treats all of the Email directives as case insensitive, converting them as needed, restoring those email methods. - EMail.Methods 0 and 1 (which rely on communication between the driver and the local email client) now offer a possible advantage over Methods 5 and 6 in the case where some security layer blocks the interface, resulting in a MAPI error. (Our local testing has identified configurations, typically involving Outlook, where Methods 0 and 1 work while Methods 5 and 6 are blocked. Note however that the range of supported features is not identical between Methods 0-2 and 4-6, specifically: -- Methods 0-2 support the EMail.ZIP directive; 4-6 do not. -- Methods 4-6 support EMail.AttachFile, EMail.LogFile, EMail.Header, and EMail.ID while 0-2 do not. 2. Compiler bug fix (edit 1004) - DEFSTRUCTs embedded in the RUN file were missing DEFTYPE information (i.e. any DEFTYPEs in the DEFSTRUCT were converted to the native types). 3. Compiler bug fix (edit 1005) - Auto-binding of a DEFSTRUCT to a DYNSTRUCT when passing parameters to a function was not working for function parameters defined with default values. 4. Compiler bug fix (edit 1006) - Close a loophole in which certain array variable references nested within with function parameter lists were triggering bogus unmapped variable compiler errors. 5. DO.LIT / MDO.LIT 2.1(127) bug fix: correct problem introduced in 2.1(127) in which control characters embedded into DO files (intended as input to programs) were being stripped. (Note: use UPDCUR to update.) ============================================================================ A-Shell Release Notes Version 6.5.1720.7 (14 September 2022) ============================================================================ 1. (Windows) Increase runtime stack size to deal with stack overflow errors in extremely large compilations. 2. Compiler bug fix (edit 1003) - /F1 switch wasn't eliminating all minimum run versions from the header. ============================================================================ A-Shell Release Notes Version 6.5.1720.6 (09 September 2022) ============================================================================ 1. Dynamic structure bug fix: auto-binding a structure that was previously bound manually was leading to a variety of downstream errors. ============================================================================ A-Shell Release Notes Version 6.5.1720.5 (08 September 2022) ============================================================================ 1. XTREE / PDFX bug fix: Printing to PDFX from the XTREE Print Preview window was acting as if PDFX was not licensed (showing the watermarks). Note that within this print preview window, you have to select the PDFX printer Which contains "A-Shell" in the name; the regular PDF-XChange Standard will not work. ============================================================================ A-Shell Release Notes Version 6.5.1720.4 (07 September 2022) ============================================================================ 1. Compiler bug fix (edit 1002) - A label named SET'RECNO or XOPEN was incorrectly setting the minimum runtime version in the RUN header to 1684 (as if it had seen the statements by those names). ============================================================================ A-Shell Release Notes Version 6.5.1720.3 (06 September 2022) ============================================================================ 1. PDFX bug fix: when generating multiple emails within the same session using Method 5 or Method 6 (relying on the default email client via the MAPI interface), in some scenarios it was failing to update the file attachment (i.e. was attaching the previously generated file to the next email.) ============================================================================ A-Shell Release Notes Version 6.5.1720.2 (02 September 2022) ============================================================================ 1. Windows GUI refinement: revise the refresh logic when dialogs are maximized or normalized in attempt to close timing loophole in which one or more controls within the dialog would not get completely resized. ============================================================================ A-Shell Release Notes Version 6.5.1720.1 (01 September 2022) ============================================================================ 1. XTREE splitter bug fix: the LEFTPANEWIDTH = -2 option (introduced in 6.5.1720.0) was getting confused by some combinations of attributes. ============================================================================ A-Shell Release Notes Version 6.5.1720.0 (31 August 2022) ============================================================================ 1. VUE enhancement: new INI.VUE and command mode directive: USETABS When specified, it determines whether the TAB key is stored as a TAB character or is expanded to spaces (overriding the behavior previously determined by the TAB # directive, which otherwise sets the tab width). If USETABS is not specified, the choice continues to be based on the TAB # directive: TAB 8 effectively enables the USETABS option; any other TAB value disables it. 2. XTREE enhancement: The ImgDir Advanced Coldef Directive can now be used to specify the name of a DLL containing icons, allowing just the icon name to be specified in each cell. Note that to indicate that the ImgDir value is a DLL name, it must be preceded with "::", for example: ImgDir=::ASHICO1 3. CMDLIN refinement: the method of folding the contents of the CMDLIN system variable now matches that used by UCS(), extended support to Latin1 accented characters under Windows. (Under Linux, it still depends on the locale settings.) 4. Language enhancement (compiler edit 1000) - named parameters can now be used with DYNFUNC, e.g. DYNFUNC(fname$, argx=valuex, argy=value1) Note that this affects both the compiler and runtime, so the use of named parameters in a DYNFUNC expression will now set the minimum runtime level to 1720. 5. Language enhancement (compiler edit 999) - default parameter values now supported in dynamic functions. Previously the compiler didn't complain (since functions declared dynamic can still be called statically). Use of default values in a dynamic function definition now sets the minimum runtime level to 1720, so programs that ran under earlier runtimes (whether or not the default values were respected) will now require the 6.5.1720+ runtime. 6. Language refinement (compiler edit 1000) - /CI support now extended to dynamic functions (both the function names and argument names). 7. Language enhancement (compiler edit 1001) - You can now use the CALL statement to invoke a dynamic function... CALL DYNFUNC(func$,args...) CALL DYNFUNC$(func$,args...) This is analogous to using the CALL statement with static function, and is more natural than a dummy assignment when you don't care about the return value of the function. (Requires 6.5.1720+ runtime.) 8. Dynamic function bug fix: close (mostly) a loophole which previously may have resulted in a dynamic function being confused about whether it was compiled with 16 or 24 bit addresses (typically resulting in a crash of some kind). The fix is still not 100% perfect because the runtime system is not able to determine whether the program was compiled with 16 or 24 bit addresses until it encounters a CALL or GOTO. But that covers virtually all of the use cases since even the internal jumps used to skip over functions included above the start of the program or used to implement control statements like IF, DO, FOR, SWITCH, etc. will suffice. 9. ASQL ODBC bug fixes (libashodbc 1.5.117) - SQL Server NVARCHAR() field types now report in ASQLOP_GET_FLDDEFS as VARCHAR rather than as TINYINT. Note that NVARCHAR(), which uses UNICODE16 encoding, as opposed to VARCHAR(), is translated to/from ANSI so from the application perspective the field types are effectively equivalent. - SQLOP_FETCH_ROW with the FETCHR_ARRAY option was loading the array elements shifted up by 1, i.e. starting with array(2) instead of (1). - SQLOP_FETCH_ROW with the FETCHR_FIELDS option was reporting bogus errors in the case where the target variables were variable length and the max length declared for the database columns was > 255. 10. XTREE refinement: As an alternative/workaround to the splitter position optimization logic built in to the control (for split-pane configurations), which does not always work properly, you can now set XTR.LEFTPANEWIDTH = -2 to force A-Shell to use it's own manual width calculation. (The manual method is less precise and slower than the logic built in to the control, but less likely to be completely wrong.) ============================================================================ A-Shell Release Notes Version 6.5.1719.1 (22 August 2022) ============================================================================ 1. ATE bug fix: close a loophole in which two ATE sessions originating from same PC to same server might end up with the same instance identifier (resulting in one job clobbering the other). ============================================================================ A-Shell Release Notes Version 6.5.1719.0 (17 August 2022) ============================================================================ 1. VUE enhancement: embedded TAB characters are now expanded based on the TAB width. Previously all embedded TABs were expanded to the next multiple of 8 columns, regardless of the TAB width setting. Note that the TAB key on the keyboard (as opposed to TAB characters previously embedded into a file) continues to be treated as a chr(9) if the TAB width is set to 8, and as spaces for any other TAB width setting. 2. AUI dialog bug fix: the "X" button in the upper right corner of dialogs had stopped working in 1717.11. 3. XTREE bug fix: saved font scale values were not being respected (broken in 1715.8) ============================================================================ A-Shell Release Notes Version 6.5.1718.2 (14 August 2022) ============================================================================ 1. PDFX bug fix: string values in some //PDFX directives were not working properly if they started with a numeric digit, e.g. an embedded font named "3 of 9 Barcode". ============================================================================ A-Shell Release Notes Version 6.5.1718.1 (10 August 2022) ============================================================================ 1. AUI image handling refinement: the file extension .JPEG is now treated as equivalent to .JPG. (Previously only .JPG was recognized.) ============================================================================ A-Shell Release Notes Version 6.5.1718.0 (07 August 2022) ============================================================================ 1. .BINDSTRUCT enhancement: the second argument (the defstruct instance) may now be a base array reference, e.g. .BINDSTRUCT ds, st() In this case, the structure is bound to the DYNSTRUCT instance (ds), but no data is copied. However, once bound, you can then manually copy elements from the array, using the same binding, e.g. .bindstruct ds, st() ! bind w/o copy for i = .extent(st()) ds = st(i) ! copy, preserving prior binding ? ds,@fldname$ ! dynstruct deferred indirect ref next i ============================================================================ A-Shell Release Notes Version 6.5.1717.15 (04 August 2022) ============================================================================ 1. Process exit code bug fix: A-Shell was failing to reset its own process exitcode after some system calls the might set it, resulting in a non-zero exitcode in some cases where it should have been zero. (This would only be noticeable if you were testing the exitcode after running A-Shell as a background command within a script of some kind.) ============================================================================ A-Shell Release Notes Version 6.5.1717.14 (03 August 2022) ============================================================================ 1. Compiler bug fixes (edit 998) - The /CI (case insensitive) option was affecting DEFINEd literal strings. (Bug introduced in compiler edit 994). Symbol definitions passed in via the /C: switch were being lost if the program was too big for the specified options, leading to an automatic compilation restart with the /A or /AV switches activated. ============================================================================ A-Shell Release Notes Version 6.5.1717.13 (02 August 2022) ============================================================================ 1. MX_DYNSTRUCT (DYNOP_INFO) bug fix: the order of subscripts in a multi- dimensioned arrays was reversed in to the returned ST_FLDDEF structure. 2. Internal compiler code refinements (edit 997). ============================================================================ A-Shell Release Notes Version 6.5.1717.12 (27 July 2022) ============================================================================ 1. Compiler bug fix (edit 996) - fix crash related to embedded defstructs. ============================================================================ A-Shell Release Notes Version 6.5.1717.11 (26 July 2022) ============================================================================ 1. AUI refinement: when a dialog is created with MBST_CENTER option (center dialog on parent), if the parent is minimized, the dialog gets centered on the current desktop instead. Previously it was ending up stuck in one of the corners. ============================================================================ A-Shell Release Notes Version 6.5.1717.10 (24 July 2022) ============================================================================ 1.BINDSTRUCT / MX_DYNSTRUCT bug fix: Close a loophole in which an MX_DYSTRUCT call to retrieve structure information by name would return a status -9 (unable to locate named structure definition) after a prior call to retrieve structure information by instance succeeded. ============================================================================ A-Shell Release Notes Version 6.5.1717.9 (20 July 2022) ============================================================================ 1. TCPX.SBR bug fix: The TCPOP_CHECK and TCPOP_CHKQTY calls were returning zero rather than a valid "not connected" error when the remote side had in fact disconnected. (Problem introduced in 1712.1) 2. ASQL ODBC bug fix: Some variations of the SQLOP_FETCH_ROW operation failed to clear the target variable when fetching a NULL field, resulting in erroneous values left over from whatever was previously retrieved into that variable. (Note that NULL fields are treated equivalently to "" when fetched into variables.) Fix is in the external LIBASHODBC library version 1.5.116. Problem did not affect the MySQL connector. ============================================================================ A-Shell Release Notes Version 6.5.1717.8 (12 July 2022) ============================================================================ 1. (ATE) bug fix - close window for stack overflow error after 2000+ AG_FUNCx calls in succession. ============================================================================ A-Shell Release Notes Version 6.5.1717.7 (07 July 2022) ============================================================================ 1. DYNLIB refinement: add a level of fail-safe protection against certain kinds of memory corruption resulting from calls into external routines with incorrect signatures. 2. ASHNET library enhancement (1.4.184): New function exposed to request a Google API access token based on a private key; added specifically to facilitate downloading a file from Google Cloud Storage when the private key is supplied by the owner but potentially useful in other contexts. The function can be called via DYNLIB as follows: funcsig$ = "GetGoogleCloudAccessToken(Zziz)i" xcall DYNLIB, dlctl, funcsig$, prvkey$, token$, sizeof(token$), url, rc where: prvkey$ (str) [in] is a json string containing a private key, something like: { "type": "service_account", "project_id": "chilkattest-1350", "private_key_id": "fa2e36ee26986eab628b59868af8bec1d1c64c38", "private_key": "-----BEGIN PRIVATE KEY-----\nMII....jSdy\n-----END PRIVATE KEY-----\n", "client_email": "598922945xxxxxxxxxxxxa@developer.gserviceaccount.com", "client_id": "5989229452xxxxxxxxxxxxxxxxa.apps.googleusercontent.com", "auth_uri": "https:!accounts.google.com/o/oauth2/auth", "token_uri": "https://accounts.google.com/o/oauth2/token", "auth_provider_x509_cert_url": "https://www.googleapis.com/oauth2/v1/certs", "client_x509_cert_url": "https://www.googleapis.com/robot/v1/m...com" } token$ (s,2048) [out] - receives the access token cb (num) [in] - specifies the size of the token$ parameter url (str) [in] - optional url; default: https://www.googleapis.com/auth/cloud-platform rc (i4) [out] - return code (0 for success, else ANETERR_xxx codes) ============================================================================ A-Shell Release Notes Version 6.5.1717.6 (29 June 2022) ============================================================================ 1. XTREE bug fix: in the absence of an explicit sort order, setting and then clearing an auto-filter was causing the display order to reverse. ============================================================================ A-Shell Release Notes Version 6.5.1717.5 (20 June 2022) ============================================================================ 1. ASHNET library fixes/enhancements (edits 179-181), mostly motivated by Google Drive requirements. [179] - Close a memory corruption loophole exposed by uninitialized S,0 parameters. [180] - HTTP.SBR XHTTPF_REQGETRAW now handles binary response bodies. [181] - HTTP.SBR XHTTPF_HDRBODY now works with XHTTPF_REQUPLOAD. As with all other XHTTPF_HDRBODY cases, put your special headers at the top of the request body (file or string), then a blank line (CRLF), then the body of the request, which in this case would be the list of files to upload. [182] - HTTP.SBR verbs: to specify a verb other than GET or POST, use the XHTTPF_HDRBODY option to add a header of the format: Verb: xxxxxx where xxxxx may be any verb recognized by the server (e.g. PATCH, DELETE, etc.) Note that you still need to specify either XHTTPF_REQPOST or XHTTPF_REQGETX. [183] - HTTP.SBR XHTTPF_FILERESP now supports the option to specify two file specs, separated by a vertical bar, e.g "resp1.txt|resp1.dat". When the second file is specified, if the response body is compatible, HTTP will extract an embedded file from the complete response into the specified file. See the new SOSLIB routine GGLDRV.BP/SBX for examples. 2. PRTXLS 2.1(218) - improvements to the column separation logic. Columns with only one space of separation are now more reliably separted. Also close a crash loophole. ============================================================================ A-Shell Release Notes Version 6.5.1717.4 (09 June 2022) ============================================================================ 1. Compiler refinements to DEFALIAS (edit 994) - ++IFLBL / ++IFNLBL now recognize DEFALIAS'd function and procedure labels, acting based on the existence of the target function / procedure (and not the existence of the DEFALIAS definition). ++IFDEF / ++IFNDEF now treat DEFALIAS definitions as they would symbols defined via DEFINE statements. UNDEF now works on DEFALIAS definitions. 2. Compiler bug fix (edit 995) - the existence of a ++ directive within the text following a ++MESSAGE or ++ERROR directive was in some cases confusing the compiler as to the conditional compilation state. ============================================================================ A-Shell Release Notes Version 6.5.1717.3 (02 June 2022) ============================================================================ 1. Minor bug fix: XTREE was in some cases reporting a "XTREE Diff Unpack Error" in the ashlog that wasn't really an error. ============================================================================ A-Shell Release Notes Version 6.5.1717.2 (01 June 2022) ============================================================================ 1. Bug fix: using the last slot in the memory handle table for an ordered map or dynamic array was triggering a false Basic error #3 (out of memory) when the array was accessed. Note that the global memory table gets auto- expanded as needed, but starts with at least 500 slots. ============================================================================ A-Shell Release Notes Version 6.5.1717.1 (31 May 2022) ============================================================================ 1. Bug fix: the following directory-scanning wildcard-support LIT commands have been updated to patch a very old bug which would result in the directory listing being duplicated if there were consecutive DEVICE statements for the same device (i.e. one normal DEVICE definition and one or more PPN-specific definitions): DIR.LIT 3.4(172) COPY.LIT 3.4(147) MOVE.LIT 3.4(147) ERASE.LIT 3.4(137) PRINT.LIT 3.4(137) SUBMIT2.LIT 4.0(207) HEAD.LIT 3.4(107) TAIL.LIT 3.4(107) ============================================================================ A-Shell Release Notes Version 6.5.1717.0 (28 May 2022) ============================================================================ 1. Roll-up / consolidation of patches 1716.1-1716.9 2. ASQL refinement: the info2 field within the CMDHDR structure is now properly scaled when the application is using a non-zero SCALE factor. Previously results were coming back down-scaled, e.g. 0.02 instead of 2. 3. XTREE bug fix / refinement: the checkbox style of filter was incorrectly handling a filter selection of the form AA-BBBBB as if it was a range (from AA to BBBBB) rather than a literal string. 4. XTREE bug fix / refinement: the routine is now more tolerant of raw data structures (i.e. where the data array parameter is actually just a scalar X parameter), even when there are no nulls to mark the ends of rows. 5. AXL enhancement: support for LIBXL verson 4.x. Note: if using LIBXL64.BSI, download the latest LIBXL64.BSI (202+) and recompile any affected programs. ============================================================================ A-Shell Release Notes Version 6.5.1716.9 (27 May 2022) ============================================================================ 1. Bug fix: execution of code generated by ++PRAGMA TRACK_LAST_ROUTINE was resulting in an otherwise harmless stack underflow. ============================================================================ A-Shell Release Notes Version 6.5.1716.8 (27 May 2022) ============================================================================ 1. Refinement: non-critical stack underflow condition is now logged but doesn't merit a Basic error. ============================================================================ A-Shell Release Notes Version 6.5.1716.7 (26 May 2022) ============================================================================ 1. Bug fix: removal of the limit on ordered map key length (see 1716.2) introduced a problem with assignments where the rvalue invoked a function that in turn involved ordered map assignments, one of which required expansion/relocation of the map key buffer. ============================================================================ A-Shell Release Notes Version 6.5.1716.6 (26 May 2022) ============================================================================ 1. Compiler bug fix (edit 992) - attempting a private instantiation of a DEFSTRUCT containing overlaid variables was resulting in a spurious compiler error. 2. Compiler bug fix (edit 993) - fix several issues related to .SUBLIST and .SPLICE : - passing a .SUBLIST to a function expecting a list was causing a spurious array vs. scalar mismatch compilation error. - in some statements a .SUBLIST was being treated as scalar variable, possibly leading to a spurious compilation error or real runtime error. - a foreach statement iterating through a .SUBLIST may have thrown a spurious compilation error. - The 3-argument version of .SPLICE was being compiled incorrectly, leading to possible stack corruption at runtime. 3. Runtime interpreter refinement: tighten the tests for stack underflow within the expression handler to detect certain errors that previously escaped notice. Note that since there is no explicit Basic error code for stack underflow, it shares error #33 (aka stack overflow). 4. .IFE() runtime evaluation bug fix: a numeric .IFE() expression embedded within a larger string expression, was in some cases resulting in stack underflow. Previously this might have gone without notice or harm, but would now be detected by the stack underflow test (see above). (Note that this was purely a runtime issue and does not require recompilation to fix.) 5. .IFELSE$() runtime execution bug fix: under Linux, the second result string was sometimes losing a character or two due to a string-copy library optimization problem. ============================================================================ A-Shell Release Notes Version 6.5.1716.5 (22 May 2022) ============================================================================ 1. Internal refinements to detect and protect against certain intermittent instances of segmentation faults under Linux. ============================================================================ A-Shell Release Notes Version 6.5.1716.4 (20 May 2022) ============================================================================ 1. Compiler refinement (edit 991) : automatic DYNSTRUCT binding during function parameter passing (see 6.5.1711 below) now works even when the calling argument is not explicitly named. ============================================================================ A-Shell Release Notes Version 6.5.1716.3 (19 May 2022) ============================================================================ 1. Compiler bug fix/refinement (edit 990) - Close a loophole in which function call parameter lists containing literals might trigger a spurious syntax error or fail to compile correctly. Also syntax error messages now display a suffix "-->> xxx ..." where xxx indicates the part of the line where the syntax error was detected. (This is mainly helpful in very long source lines where it is sometimes difficult to find the missing or misplaced character.) 2. Refinement to the ordered map key length patch in 1716.2 which didn't completely handle complex map assignnments involving expressions containing function calls. ============================================================================ A-Shell Release Notes Version 6.5.1716.2 (18 May 2022) ============================================================================ 1. Refinement to algorithm generating unique ID's for each session when using either the -silo command line switch or running within a Docker container. New algorithm should reduce the chance of two instances getting the same ID if many sessions launched simultanously. 2. Ordered map refinement: remove the limit on the length of a key (was 511 characters). ============================================================================ A-Shell Release Notes Version 6.5.1716.1 (17 May 2022) ============================================================================ 1. XTREE refinement: attempting to exit from an editable cell was taking two clicks or keystrokes (one to exit from editing mode and the second to exit from the tree) if the cell was set up for validation. 2. (CentOS) Minor adjustment to compiler internal optimization to fix an obscure problem with bogus syntax errors in very large programs. ============================================================================ A-Shell Release Notes Version 6.5.1716.0 (16 May 2022) ============================================================================ 1. ASQL compatibility update: Due to updates in the underlying components the two ASQL connectors have been updated to version 1.5 : LIBASHMYSQL 1.5.145 LIBASHODBC 1.5.115 To allow for the latest A-Shell version to coexist with an earlier version (sometimes useful when testing updates), the search path for the libraries has been enhanced to first look for version 1.5 and then to fall back to the earlier/standard library version/name. Specifically: Linux: Here the standard is to create a symbolic link from /usr/lib to the actual library module. For example: /usr/lib/libashmysql.so.1 -> /vm/miame/bin/libashmysql.so.1.5.145.el7 /usr/lib/libashodbc.so.1 -> /vm/miame/bin/libashodbc.so.1.5.115.el7 Starting with this release, A-Shell will first try to link to the module with the .so.1.5 extension, and if not found, then fall back to the so.1. For example, if you are running the latest A-Shell alongside an earlier version, you can set up your links as follows: /usr/lib/libashmysql.so.1.5 -> /vm/miame/bin/libashmysql.so.1.5.145.el7 /usr/lib/libashmysql.so.1 -> /vm/miame/bin/libashmysql.so.1.4.143.el7 /usr/lib/libashodbc.so.1.5 -> /vm/miame/bin/libashodbc.so.1.5.115.el7 /usr/lib/libashodbc.so.1 -> /vm/miame/bin/libashodbc.so.1.4.113.el7 (The newer A-Shell would use the .so.1.5 links while the older one would use the so.1 links. If you have only one version, then you can stick with the .so.1 extension.) Windows: Here the standard is to load the dll directly from the directory where the ashw32.exe executable was loaded from. The new version will look for a dll with -15.dll suffix first, and if not found, fall back to the standard name, e.g.: c:\vm\miame\bin\libashmysql-15.dll ! version for 6.5.1715.13+ c:\vm\miame\bin\libashmysql.dll ! fallback / earlier versions c:\vm\miame\bin\libashodbc-15.dll ! version for 6.5.1715.13+ c:\vm\miame\bin\libashodbc.dll ! fallback / earlier versions 2. (Windows) SQL trace option added to the Debug Message Window properties. 3. SET.LIT 1.2(166) update: now supports the SQL TRACE (and the TRACE options are now displayed alphabetically.) 4. VERSYS.LIT 3.1(110) enhancement: /CSV switch outputs all the display details to a CSV (for a wildcard set of programs). ============================================================================ A-Shell Release Notes Version 6.5.1715.12 (13 May 2022) ============================================================================ 1. Compiler refinement (edit 988) - minor refinements to the LSX file structure to ensure that the LSX compilation is fully independent of the environment in which it was created. 2. Compiler bug fix (edit 989) - close a loophole introduced in edit 984 resulting in the corruption of some function calls and XCALLs, primarily in the CentOS environment. 3. VERSYS.LIT 3.1(109) enhancement: display now includes many additional details about the specified program, include memory requirements and the existence of embedded resources such as dynamic functions and embedded structure definitions. 4. COPY.LIT / MOVE.LIT 3.4(146) enhancement: add /MAXDAYS:## and /MAXSECS:## switches to allow selective targeting of files changed recently. ============================================================================ A-Shell Release Notes Version 6.5.1715.11 (06 May 2022) ============================================================================ 1. DO.LIT / MDO.LIT 2.1(126) enhancement: special colon commands (e.g. :K) can now be indented. Previously they needed to be in column 1. (This may be a minor detail but can make all the difference in debugging complex DO files with many levels of nested IF / ENDIF clauses.) 2. Compiler bug fix (edit 987) - Fix problem with ++INCLUDE'IF'EXISTS when compiling an LSX file in a different environment than where the LSX file was originally created. If the existence at the time the LSX was created didn't agree with the existence when compiling the LSX, the ++include nesting levels would get out of sync with the original, possibly leading to bogus compilation errors. ============================================================================ A-Shell Release Notes Version 6.5.1715.10 (03 May 2022) ============================================================================ 1. Compiler bug fix (edit 986) - The first unmapped variable, if numeric, was failing to finalize the definition of last mapped variable, causing it to behave in certain expressions as if it had the default size for its type. (Problem was introduced in one of the early 6.5 versions.) ============================================================================ A-Shell Release Notes Version 6.5.1715.9 (01 May 2022) ============================================================================ 1. Compiler bug fix (edit 985) - DEFTYPEs associated with structure members were not being saved or retrieved by the MX_DYNSTRUCT operations. The native type,size info was still correct, but applications rely on the DEFTYPEs were out of luck. (Bug introduced in 6.5.1711) 2. MX_DYNSTRUCT bug fix: close a small window of opportuntity for an overflow condition to result in corrupted dynamic structure definition (most likely crashing the application). 3. AUI_CONTROL bug fix to the MBF2_DLGSTATE refinement in 6.5.1715.8. In some cases when reverting back to the original design coordinates (instead of the last saved coordinates) it was confusing the AUI coordinates with pixels, resulting it wildly unexpected dialog sizes. ============================================================================ A-Shell Release Notes Version 6.5.1715.8 (23 April 2022) ============================================================================ 1. Compiler refinement (edit 984) - tighten the syntax checking on named parameter lists (both XCALL and function/procedure) to require that scalar parameters are passed scalar values and array (byref) arguments are passed array (byref) values. 2. AUI_CONTROL refinement to MBF2_DLGSTATE feature: saved coordinates are now ignored (i.e. reset back to the design coordinates) if the design coordinates have changed since the dialog was last saved, or if the dialog no longer fits entirely within the virtual desktop space. 3. XTREE refinement to the XTR'USRCFG feature: saved column information is now ignored / reset if the number of columns in the tree has changed since the last time the tree was displayed. (This is purely a convenience to aide programmers who forget to change the TreeID when adding or deleting columns, which would otherwise lead to confusion and wasted time as the saved column widths and order would be applied to the wrong columns.) ============================================================================ A-Shell Release Notes Version 6.5.1715.7 (22 April 2022) ============================================================================ 1. Compiler bug fix (edit 983) - further refinement to edit 982 to eliminate spurious complaint about XCALL array parameters with spaces within the parentheses, e.g. XCALL MYSBX, ARY( 1 ), ... 2. XTREE bug fix: restore operation of the multi-checkbox toggle feature (using SHIFT-CLICK) which was broken in 1715.0 by the new local validation logic. Note that as before, validation logic is only executed on individual clicks, not on multi-checkbox toggles. ============================================================================ A-Shell Release Notes Version 6.5.1715.6 (21 April 2022) ============================================================================ 1. Compiler bug fix (edit 982) - replacement for edit 981 (which was recalled). ============================================================================ A-Shell Release Notes Version 6.5.1715.5 (21 April 2022) ============================================================================ 1. Compiler bug fix (edit 981) - extend the fix in compiler edit 978 to apply to XCALL named parameters (defined with DEFXCALL). As in the prior fix, array parameters now require a pair of empty parentheses in the formal name, for example: defxcall MYSBX, MYARY() ... dimx ARY(0), ST_TEST, auto_extend ... xcall MYSBX, MYARY()=ARY() Previously the () was not recognized in the DEFXCALL, forcing you to refer to the named array as if it was a scalar, creating a variety of possibilities for ambiguity and confusion. Note that as with the earlier fix, the compiler may now report errors in programs that previously compiled and ran ok. ============================================================================ A-Shell Release Notes Version 6.5.1715.4 (20 April 2022) ============================================================================ 1. XTREE bug fixes - further minor fixes related to cell editing validation. 2. XTREE local validation refinement: Add new field XTR.XDIRTY to XTRCTL structure to inform local validation SBX routine when the cell referenced by XTR.XROW and XTR.XCOL was changed. (Since the local validation SBX only receives the current answer row, it can't otherwise tell if the cell had been changed if the column is marked for unconditional validation.) XTRCTL structure (in XTREE.SDF) updated as follows: defstruct XTRCTL ... map2 SHOWFOOTER,B,1 ! [138] Show footer map2 FOOTERSTYLE,B,1 ! [138] same XTHSF_xxx flags as HEADERSTYLE (6.3.1537+) map2 COLID,B,1 ! [140] column ID map2 COLTYPEID,B,1 ! [141] column Type ID map2 XDIRTY,B,1 ! [142] exit cell (XROW,XCOL) was changed (i.e. dirty) map2 UNUSED2,X,9 ! [142] was 10 [141] was 11 [140] was 12 ! (total size = 128) endstruct 3. LIBASHTLS.DLL refinement (now 1.3.215): Refresh/relink with the latest GnuTLS library version 3.6.14. Various minor internal protocol and security updates. This version appears to resolve an intermittent problem under some newer Windows Server environments with unexplained failure to load the DLL. For convenience, copies of the GnuTLS binary download packages can be found in http://www.microsabio.net/dist/other/gnutls. ============================================================================ A-Shell Release Notes Version 6.5.1715.3 (19 April 2022) ============================================================================ 1. XTREE bug fixes - several minor fixes related to cell editing validation (for bugs introduced with the local validation feature in 1715.0) ============================================================================ A-Shell Release Notes Version 6.5.1715.2 (19 April 2022) ============================================================================ 1. XTREE bug fixes - several minor fixes related to cell editing validation. ============================================================================ A-Shell Release Notes Version 6.5.1715.1 (18 April 2022) ============================================================================ 1. Minor enhancement to GUI traces related to MBF2_DLGSTATE. ============================================================================ A-Shell Release Notes Version 6.5.1715.0 (16 April 2022) ============================================================================ 1. XTREE enhancement: support for local (or client-side) validation of editable cells via an internal call from XTREE to a specified SBX. The motivation here is to improve the responsiveness (decrease the delay when exiting for validation and re-entering). The improvement is most noticeable in ATE environments (where XTREE parameters have to pass back and forth between the ATE client and the server for each validation), but also applies to environments where the application and XTREE are executing on the same machine. A secondary advantage of this new validation method is that by encapsulating the validation / formattnig logic in an SBX, it may be possible to share certain validations across many programs. To enable local validation, you must first specify the name of the SBX via a new Advanced Coldef Option: LocValSBX=name The option must be applied to the zero column, as only one SBX can be specified for each tree. The SBX name should be specified without any path or extension, and is expected to be found either in the current directory or in the BAS: directory. If the SBX is not found, then no local validation occurs. To specify local validation for a column, add one of these new cformat codes to the column definition: V - Conditional validation (if the cell changes during editing) v - Unconditional validation (whether it changes or not) Note that these are analogous and parallel to the regular validation codes X (conditional) and x (unconditional). Typically you would only want to perform one style of validation per column, i.e. local/client or traditional/server, but it is possible to specify both, in which case the local validation is performed first. (This technique could be useful as a transitional/experimental technique.) Depending on the information returned from the local validation routine, it can disable the server validation, although the you can force the server validation to occur regardless of the local validation result by doubling the X or x code. For example: cformat Validation Description v local unconditional xv local unconditional, possibly followed by server unconditional XXV local conditional always followed by server conditional For details on the local validation SBX calling interface, see the HTML version of the release notes at: https://www.microsabio.net/dist/65dev/doc/a65devnotes/00ashnotes.htm ============================================================================ A-Shell Release Notes Version 6.5.1714.3 (12 April 2022) ============================================================================ 1. Compiler bug fix (edit 980) - Fix for spurious error "cannot input from output-only parameter) on XGETARG when the specified argument number was one beyond the number of parameters formally declared. Apply range checking on the XGETARG argument number to make sure > 0 and < 1024 (max). ============================================================================ A-Shell Release Notes Version 6.5.1714.2 (08 April 2022) ============================================================================ 1. Compiler bug fix (edit 979) - RND2 / SRND2 were failing to set the minimum runtime version to 1517. ============================================================================ A-Shell Release Notes Version 6.5.1714.1 (08 April 2022) ============================================================================ 1. Compiler bug fix (edit 978) - fix problem introduced in edit 975 causing spurious undefined parameter errors with function parameter definitions of the form $ary()=.NULL as ordmap(...). ============================================================================ A-Shell Release Notes Version 6.5.1714.0 (03 April 2022) ============================================================================ Internal XTREE development. ============================================================================ A-Shell Release Notes Version 6.5.1713.4 (03 April 2022) ============================================================================ 1. XTREE refinement: Revise/replace 6.5.1713.3 patch (sort logic re-optimized). 2. Close JOBTBL corruption loophole: ATE and A-Shell instances launched from the same machine no longer share the same instance counting pool, eliminating a loophole where the overlapping disconnect of an ATE session and startup of an A-Shell session could result in two A-Shell instances getting assigned the same job # (with one zapping the other). And in the case where two sessions do try to share a job, one will be terminated after a minute or two of logged warnings (rather than logging warning messages endlessly). ============================================================================ A-Shell Release Notes Version 6.5.1713.3 (01 April 2022) ============================================================================ 1. XTREE refinement: cformat code A (ASCII sort) now takes precedence over code # (numeric). ============================================================================ A-Shell Release Notes Version 6.5.1713.2 (29 March 2022) ============================================================================ 1. AUI_CONTROL bug fix: the MBF_CENTER options were interfering with the MBF2_DLGSTATE flag, causing a previously saved maximized state to be reset back to normal size. ============================================================================ A-Shell Release Notes Version 6.5.1713.1 (28 March 2022) ============================================================================ 1. XTREE bug fix / refinement: when using XTROP_REPLACE to add rows to an existing tree whose font scale had been adjusted manually (using Ctrl +/-), the new rows now start with the adjusted font size. (Previously they were starting with the default font size.) ============================================================================ A-Shell Release Notes Version 6.5.1713.0 (21 March 2022) ============================================================================ 1. Language enhancement (compiler edit 977) - new system function TRIM(strexp), or TRIM$(strexp). This removes the leading and trailing blanks from the string expression argument, equivalent to the combination of STRIP$(strexp) and LSTRIP$(strexp). Besides offering the advantage of functional syntax, as a built-in function, TRIM$() is more efficient than the equivalent XCALL TRIM (although the latter offers an additional option to remove other characters besides blanks). 2. XTREE bug fix: multi-column sorts specified interactively (using CTRL+ click on the column headers) were not being saved correctly by the XTR'USRCFG feature. (The column precedence was reversed.) 3. XTREE bug fix: the XTF_EDITABLE flag was disabling the initial sort when the opcode was XTROP_RESELECT and the XTF_NOREDRAW flag was not set. 4. XTREE enhancement: new PopupMenu command to trigger an internal multi-level sort. Syntax: $SORT:#:#{:#} where each # is replaced by a column number. Precede the column number with a minus sign to make the sort order descending rather than ascending. At least one column must be specified; the second and third column numbers are optional. For example: PopupMenu=Sort by State/City/Population,$SORT:5:4:-7~~ This would sort by column 5 (State,ascending), 4 (City,ascending), and then 7 (Population,descending). The motivation for this option is just to make multi-level sorting easier and quicker for the operator, who would otherwise have to use Ctrl-Click on the columns in the reverse order, possibly clicking one or move of the columns multiple times to get the right order. And compared to just exiting and re-entering with the application specifying the sort order in the XTRCTL fields, this is much faster since it doesn't require leaving the tree. Note that since the comma and semicolon characters are delimiters in the general PopupMenu syntax, you must not include them in the description (which might otherwise be tempting when listing the columns involved in the sort). 5. XTREE bug fix: close a loophole in which the saved and restored column widths (see XTR'USRCFG) were getting over-ridden by a subsequent column optimization operation during certain re-entry scenarios. (One such scenario was when row headers were enabled.) ============================================================================ A-Shell Release Notes Version 6.5.1712.5 (21 March 2022) ============================================================================ 1. Minor refinement: remove a line of spaces from the stdout (UNIX version) at the end of a sesssion when running with the -q (quiet) switch. (This is mainly just a nicety for background sessions that are creating formatted output by redirecting stdout to a file.) ============================================================================ A-Shell Release Notes Version 6.5.1712.4 (20 March 2022) ============================================================================ 1. Compiler refinement (edit 974) - various minor improvements to the clarity of certain error messages. 2. Compiler bug fix (edit 975) - named parameter references to arrays (byref) were incorrectly accepting scalar parameter name syntax. For example, for a function defined as follows ... function fn'foo(aaa() as ST_ARRAY) the compiler was accepting the following call ... call fn'foo(aaa=bbb()) whereas since the formal parameter is an array, it should have required array syntax for the name reference, e.g. ... call fn'foo(aaa()=bbb()) Somewhat worse, an attempt to use the correct syntax (as shown above) would have resulted in a mysterious compilation error -- unmapped variable for aaa(). Worse still, if the local array had the same name as the formal array parameter, e.g. ... call fn'foo(aaa()=aaa()) ... it accepted the syntax, but compiled the call incorrectly, mistaking the format named parameter aaa() for the locally defined aaa(), which almost certainly would have caused a crash at runtime. The good news is none of these problems were likely to affect production systems. But the bad news is that you may now get a compiler error when compiling code using the incorrect fn'foo(aaa=bbb()) syntax, even though it previously compiled ok. Fortunately the fix is simple, and hopefully obvious. 3. DYNSTRUCT compilation bug fix (edit 976) - MX_DYNSTRUCT DYNOP_DEF calls referencing file-based DEFSTRUCTs were incorrectly handling array members of the structure if the file contained a ++PRAGMA PRIVATE section prior to the DEFSTRUCT. ============================================================================ A-Shell Release Notes Version 6.5.1712.3 (8 March 2022) ============================================================================ 1. Compiler bug fix (edit 973) - the ++PRAGMA GLOBAL_xxx was causing symbol definitions passed in to the compiler on the command line (via /C:symbol=definition) to be lost. ============================================================================ A-Shell Release Notes Version 6.5.1712.2 (28 February 2022) ============================================================================ 1. Compiler bug fix: close a loophole through which COMPIL.LIT might abort with a runtime stack overflow error as a result of an invalid conditional compilation (++IF) directive. Note that although the issue only affected the compiler, the patch was to the A-Shell runtime rather than the compiler (which is why it didn't affect the standalone compiler and doesn't have a compiler edit number assigned to it.) ============================================================================ A-Shell Release Notes Version 6.5.1712.1 (28 February 2022) ============================================================================ 1. TCPX.SBR bug fix: The TCPOP_CHECK and TCPOP_CHKQTY calls were returning a spurious "not connected" error if there was data available to read but the buffer parameter was passed to the XCALL as "" (i.e. a zero byte buffer). Note that even though no data is returned by these calls, the size of the buffer still limits the maximum value of the return status. The routine will now use an internal 64 byte buffer if passed "". The Fn'TCPX'Check() and Fn'TCPX'ChkQty() functions in the SOSFUNC:FNTCPX.BSI module have been updated accordingly. ============================================================================ A-Shell Release Notes Version 6.5.1712.0 (27 February 2022) ============================================================================ 1. Compiler bug fix / behavior change (compiler edit 970) - remove all special adjustments to the operator precedence rules in shortcut operator statements. This is an extension / cleanup of the change in 6.5.1708.1 (compiler edit 958) which restored the normal precedence rules for trailing USING operators. Under the new rules, shortcut operator expansion is as simple as: a += ... ===> a = a + ... a *= ... ===> a = a * ... etc. Originally it was: a += ... ===> a = a + (...) a *= ... ===> a = a * (...) The automatic parentheses only had an effect when the expression to the right of the shortcut operator contained an operator with lower precedence, with the most common example being: a += b using mask Under the original rules (prior to 6.5.1708.1 / compiler 959), the mask would have been applied to b only, with the result added or concatenated to a. After the patch, the statement was compiled as: a = a + b using mask where the normal rules of precedence dictate that the mask gets applied last, to the result of a + b. To force the "using mask" operator to apply to the b argument, use parentheses: a += (b using mask) The 958 patch applied only to shortcut statements containing "using" clauses. This new patch (compiler edit 970), extends that simplification to all shortcut statements, whether they contain a "using" clause or not. 2. Language enhancement (compiler edit 971) - new system function LSTRIP(strexp), or LSTRIP$(strexp), strips leading blanks from the specified string expression. 3. Compiler bug fix / refinement (edit 972) - clean up minor issues relating to spurious errors appearing after real prior errors. ============================================================================ A-Shell Release Notes Version 6.5.1711.5 (23 February 2022) ============================================================================ 1. INPUT CSV bug fix: when there were more fields on the line than variables to receive them, it was failing to advance completely to the next logical input line for the next INPUT CSV statement when one or more of the skipped over fields contained embedded line breaks. 2. WRITECD bug fix: fields containing embedded line breaks were not always getting quoted properly. ============================================================================ A-Shell Release Notes Version 6.5.1711.4 (23 February 2022) ============================================================================ 1. Compiler bug fix (edit 969) - fix bug causing a bogus syntax error on an expression involving a nested USING clause in a shortcut operator assignment. Bug was introduced in 6.5.1708.1 (compiler edit 958). ============================================================================ A-Shell Release Notes Version 6.5.1711.3 (22 February 2022) ============================================================================ 1. Compiler refinement (edit 968) - Improve clarity of error messages relating to argument lists. Also close loophole allowing illegal parameter sizes to fail to trigger an error. ============================================================================ A-Shell Release Notes Version 6.5.1711.2 (17 February 2022) ============================================================================ 1. Compiler refinement (edit 967) - LSX file ++include indicators now show a <##_#> suffix indicating the sequential file # and the nesting level. ============================================================================ A-Shell Release Notes Version 6.5.1711.1 (16 February 2022) ============================================================================ 1 (UNIX) The following launch errors now set the A-Shell process return code: 11 - JOBTBL full 12 - No license 13 - No computer name (Windows) 14 - QFLOCK.SYS corrupt 15 - QFLOCK.SYS version incompatible 16 - Jobname already exists 17 - Error locking or accessing JOBTBL.SYS 18 - Too many sessions sharing same client IP (Windows) 20 - Exceeded maximum nodes allocated to group (group licensing) 2. (UNIX) The -q (quiet) switch will now silence administrative error messages associated with the above errors. 3 Compiler bug (edit 966) - Close window of opportunity for GPF associated with errors related to embedded DEFSTRUCTs. ============================================================================ A-Shell Release Notes Version 6.5.1711.0 (14 February 2022) ============================================================================ 1. Language enhancement: structure definition embedding. Previously, in order to bind a DYNSTRUCT to a particular structure definition, you needed to use the MX_DYNSTRUCT call with the DYNOP_DEF opcode to compile the DEFSTRUCT from source specified either in a string or a file. It is now possible to embed the definition of selected DEFSTRUCTs inside the RUN file to allow access for DYNSTRUCT binding without needing any source code at run time. DEFSTRUCTs may be selected for embedding explicitly (through the use of ++PRAGMAs) or implicitly (by certain kinds of statement references that require structure defintion embedding). The EMBED_DEFSTRUCT PRAGMA causes the definition of the specified DEFSTRUCT (stname), which have already been seen by the compiler, to be embedded in the RUN. ++PRAGMA EMBED_DEFSTRUCT stname An alternative approach is to enclose the DEFSTRUCTs that you want to embed between the following pair of PRAGMAs: ++PRAGMA EMBED_DEFSTRUCTS_BEGIN ... ++PRAGMA EMBED_DEFSTRUCTS_END In addition to the above explicit approach, implicit embedding will be activated for any DEFSTRUCT for which an instance variable occurs in either a .BINDSTRUCT statement or in a parameter list passed to a function that receives that parameter as a DYNSTRUCT. Both of these are described in further detail in the following sections. 2. MX_DYNSTRUCT enhancement: the DYNOP_DEF call now supports the ability to retrieve the structure definition directly from the RUN file, provided it has been embedded. To indicate that you want to retrieve the definition from the current RUN file, set the src$ parameter to "", e.g. xcall MIAMEX, MX_DYNSTRUCT, DYNOP_DEF, status, "", fields, stsize, dsname$ 3. Language enhancement: New statement .BINDSTRUCT binds a dynamic structure to the defstruct associated with a defstruct instance and then copies the defstruct instance data to the dynstruct. Syntax: .BINDSTRUCT ds, st where: ds is a DYNSTRUCT st is an instance of a DEFSTRUCT The .BINDSTRUCT statement binds the specified DYNSTRUCT variable (ds) to the structure definition corresponding to the specified DEFSTRUCT instance variable (st). And then it copies the data from the DEFSTRUCT instance to the DYNSTRUCT. This would be equivalent to the following... xcall MIAMEX, MX_DYNSTRUCT, DYNOP_DEF, status, src$, fields, stsize, dsname$ xcall MIAMEX, MX_DYNSTRUCT, DYNOP_BIND, status, dsname$, ds ds = st ... except that the structure name (dsname$) is determined implicitly from the structure variable instance (st), and the src$ parameter is "" to extract the structure definition from the current RUN file directly. 4. Language enhancement: automatic DYNSTRUCT binding during function call parameter passing. 5. Language enhancement: new dot function .ISDEF() can be used to determine whether the specified DYNSTRUCT member exists, i.e. whether the DYNSTRUCT is bound to a structure that contains the specified member. Syntax: .ISDEF(ds.member) ! (Simple Indirect) .ISDEF(ds.@member$) ! (Indirect Deferred) Example: map1 ds,DYNSTRUCT map1 field$,s,30 ... if .ISDEF(ds.foo) then ? "ds.foo exists; value = ";ds.foo endif ... field$ = "foo" if .ISDEF(ds.@field$) then ? "ds.@";field$;" exists; value = ";ds.@field$ endif See MX_DYNSTRUCT (DYNOP_INFO) for an alternate approach to determining the details of the current binding for a specified DYNSTRUCT. 6. Language enhancement: new dot function .DYNOFFSET() returns the offset (base 1) to the specified DYNSTRUCT member from the base of the structure (starting at 1). Equivalent to .OFFSET() except applies only to DYNSTRUCTs, and is evaluated at run time (instead of compile time). Syntax: .DYNOFFSET(ds.member) ! (Simple Indirect) .DYNOFFSET(ds.@member$) ! (Indirect Deferred) The offset to a DYNSTRUCT member can also be retrieved in the pos member of the ST_FLDDEF structure returned by MX_DYNSTRUCT (DYNOP_INFO), except that it starts at zero whereas .DYNOFFSET() starts at 1. 7. Language enhancement: new dot function .DYNOFFSIZ$() acts like .OFFSIZ$() except that it operates at run time (instead of compile time) and works exclusively for DYNSTRUCT members. .DYNOFFSIZ$(ds.member) ! (Simple Indirect) .DYNOFFSIZ$(ds.@member$) ! (Indirect Deferred) The return value is a string of the form "x~y" where x is the offset from the based of the ds DYNSTRUCT to the specified member (base 1), and y is the size of the member in bytes. As with .OFFSIZ(), the function is mainly useful in conjunction with XTREE. 8. Compiler bug fix (edit 963) - fix bug introduced in compiler edit 892 to support dynamic structures, in which the leading term of a relational expression, such as (A$ = "Y"), when inserted inside of a larger expression, was being converted to string or numeric to match the terms prior to it. In a case like... X = Y + (A$ = "Y") ... this would have caused the A$ string variable to be converted to a number, which in term would have caused the "Y" to be converted to a number to match. This would have resulted in the statement compiling as: X = Y + (val(A$) = val("Y")) which would have made that relational expression act completely different from the expectation. Fortunately this is an exotic formulation, which may be why it went so long without notice. The problem did not affect ordinary conditional statements like... if (A$ = "Y") ... 9. XTREE enhancement: exporting to a spreadsheet now supports the footers if XTR.SHOWFOOTER=1. Also, when exporting in the full XLSX mode (see SBR=XTREE_EXPCSV2XLSX), if the Advanced Coldef Parameter Title is defined, it will be used as a banner. The special macro tokens (e.g. %date%) ARE supported but %page% and %total% (which don't make any sense in the banner of a spreadsheet) are just converted to blanks, as are the justification separators (|). 10. INFLD refinement: when an entry fails one of the internal validations that display an "Invalid..." message (e.g. value not listed in SETDEF, invalid date format, etc.), the field is now cleared before it regains the focus. (This makes it less likely for casual users to get stuck in an apparent loop.) 11. XTREE bug fix: eliminate a limitation that prevented more than one XTREE control at a time from containing a date picker control. 12. XTREE refinement: increase the threshhold for switching to the larger "+" and "-" MLVL buttons (see 6.5.1706) for standard 96 dpi (non -dpm) mode. 13. DIR.LIT 3.4(170) /MEMREQ switch now recognizes newer RUN structures. (Previously it was reporting "N/A" for RUN files requiring minimum runtime versions or with dynamic functions or embedded DEFSTRUCTs. 14. A-Shell/Windows command line bug fix: -g was not supporting quoted filespecs, and thus not supporting any filespecs with embedded spaces. Note that if there are multiple -g arguments, the last one takes precedence. (This can arise with HOSTEX using the $ASHELL macro where you want the new process to use a different icon than the parent.) 15. Compiler update (edit 965) includes the the features listed above. 16. ISAM 1.X enhancement: IDX rock now contains a count of the keys allocated (additions minus deletions) along with the records allocated. This maybe useful as a quick way to compare the number of keys with the number of records. (Typically these should be the same, except in cases where the application deliberately adds more or less than one key to the IDX per record.) Note that the keys allocated value will only be valid for files that have been rebuilt under 6.5.1711+. See the following related items. 17. ISMDMP 2.0(145) enhancement: Display new "Keys allocated" count if A-Shell version 6.5.1711+ and non-zero. 18. ISMROK.SBR enhancement: Add optional argument keyalc to return the new keys allocated value. Syntax: xcall ISMROK, ch, idaalc, idaavl{, recsiz, keysiz, keypos, devdrv, & idxalc, idxavl, idanxt, idxnxt, idx'lvls, idx'blk'siz, & idx'type, keyalc} 19. ISMPAR.SBX enhancement: Add new optional argument KEYALC to return the new keys allocated value. Syntax: xcall ISMPAR, ifname, ismpak {,lvl1cnt, keyalc} 20. PDFX printer selection refinement: the printer matching algorithm, which normally accepts the first left-anchored partial match between the specified DEVICE name in the printer initialization file and the printer name in the Windows printer list, now favors PDF-Xchange Standard over earlier versions when there are multiple possible matches. As always, you can eliminate uncertainty by specifying the complete name in the DEVICE statement. 21. MX_LASTPTRFIL refinement. Previously it only worked properly if the WAIT option was used in the prior SPOOL request. It now returns the last filespec written by the PDF-XChange Standard driver (for the current session) regardless of the switches. (But since the file writing operation is asynchronous, the WAIT option is still required to be sure that the filespec returned is from the last print request and not from a prior one if the application has gotten ahead of the printer driver.) 22. LIT file bug fix: the following updates fix a command line parsing problem caused by leading whitespace on the command line: COPY.LIT 3.4(145) ERASE.LIT 3.4(136) DIR.LIT 3.4(171) HEAD.LIT 3.4(106) TAIL.LIT 3.4(106) PRINT.LIT 3.4(136) ============================================================================ A-Shell Release Notes Version 6.5.1710.0 (13 December 2021) ============================================================================ 1. PDFX now supports version 9 of the driver (called PDF-XChange Standard). The interface and directives should be equivalent, but the driver contains innumerable refinements from the earlier version 5 (PDF-XChange Printer 2012). 2. MX_MAPI bug fix: Resolve issue causing failure under Windows 10+. Most common use of this function is in the Print Screen utility (if you select the email button).k ============================================================================ A-Shell Release Notes Version 6.5.1709.2 (12 December 2021) ============================================================================ 1. QUTL.LIT 3.1(132) adds a new command ZAPURJ (for ZAP UnResponsive Jobs) to remove all abandoned job table entries (resulting from sessions terminating without cleanly exiting from A-Shell). The command may be specified interactively from the QUTL menu, or via the /ZAPURJ command line switch. 2. Close a memory corruption loophole triggered when the MIAME.INI FILES parameter requires more buffer space than the size of the MEMORY partition. (Each FILE buffer requires 512-1024 bytes.) ============================================================================ A-Shell Release Notes Version 6.5.1709.1 (12 December 2021) ============================================================================ 1. ASHNET.DLL (and libashnet.so) 1.14.177 enhancements: - FTP2TIMEOUT now affects SFTP as well as FTP2. - XFTPF_RMVEXT (&h0200) now works for FTP2.SBR (SFTP mode only) as it does in FTPDLX. ============================================================================ A-Shell Release Notes Version 6.5.1709.0 (22 November 2021) ============================================================================ 1. New MIAMEX function MX_BASERR (201) allows you to arbitrarily trigger a BASIC error: xcall MIAMEX, MX_BASERR, eno where: eno (num) [in] - is the BASIC error # to set. The effect is immediate, as if the error had occurred naturally at the location of the XCALL. This can be useful for handling errors within functions where you want to make sure that the caller doesn't overlook an error condition. Similar to XCALL ASFLAG, AF_SETCTRLC, except that the ASFLAG version only supports error #1, and only works within an SBX call (detected on return). 2. XTREE Auto-Filter refinement: specifying Filter=NONE on a zero-width column now sets the default for subsequent real columns. 3. SRCCOM.LIT 2.0(201) rewritten to implement various improvements/fixes: - No longer requires a memory partition of 1MB+ - Supports a new switch /S which ignores whitespace differences - Removed limit on line length (previously was 512 characters) - Supports inserted blocks of up to 10000 lines (up from 750) - Reduces tendency for single-line "premature matches". (For example, when a block of new code is inserted, SRCCOM previously would re-sync on a single line match (even a blank line) between the original code and the new code, causing the inserted block to appear like a fragmented series of multiple insertions instead of a single block. - Is now able to recognize "parallel differencces" of up to 100 lines. (These result from line changes rather than insertions/deletions.) - The /Q mode now outputs the matching pair both before and after a set of differences. 4. AUI refinement: MBF2_DLGSTATE now saves not only the normal/maximized state, but for the non-maximized case, the actual window size and position as well. ============================================================================ A-Shell Release Notes Version 6.5.1708.1 (27 October 2021) ============================================================================ 1. Compiler refinement (edit 958) - USING expressions on the right side of shortcut operators are now evaluated after the completed expansion of the shortcut operator statement. For example: a += b using mask is now compiled as: a = a + b using mask Previously it was compiled as: a = a + (b using mask) Although USING is technically just another operator, by its nature and by the fact that it has the lowest precedence of all other operators, it is nearly always treated as the final step in a statement. So this change is believed to be more natural and intuitive for most programmers, not to mention more flexible. Note that all other expressions (not including USING) continue to be evaluated as a unit prior to executing the shortcut operator. So for example: a *= b + c is compiled as: a = a * (b + c) The only way to give the * operator in this expression precedence over the + operator would be to avoid using the shortcut operator. 2. Compiler enhancement (edit 959) : New auto-defined macro ABC_SCALE is set to the current SCALE value (0 if no SCALE statement yet encountered). In environments that depend on SCALE, this allows you to insert conditionals into ++include files to make sure that SCALE hasn't accidentally been omitted from the main program, e.g.: ++ifdef ABC_SCALE ! does this compiler version support ABC_SCALE? ++if ABC_SCALE <> 2 ! if so, is SCALE set to 2? ++error You forgot to set SCALE 2!!! ++endif ++endif 3. MX_FINDFIRST refinement (all platforms) : Overflowing fhe directory processing stack now generates Basic error 33 (stack overflow). Previously it only returned a non-zero status, making it too easy for the calling program to continue running without recognizing the error, leading to incorrect or inconsistent directory scan results. Furthermore, after such an error, the stack was not getting reset, leading to more errors on subsequent multi-level diretory scans. ============================================================================ A-Shell Release Notes Version 6.5.1708.0 (21 October 2021) ============================================================================ 1. Many internal adjustments to facilitate migration to 64 bit version. (Currently being tested in-house with Ubuntu 20.04; details to follow.) 2. DYNLIB.SBR enhancement: new parameter types supported: l 64 bit signed integer (treat as X8 in Basic) L 64 bit unsigned integer (treat as X8 in Basic) h 32 or 64 bit handle (treat as X8 in Basic) These were added to support the possibility of using DYNLIB to call 64 bit library routines. The h (handle) option in particular is needed to allow Basic programs to interface with libraries that rely on handles (like AXL) and which in the near future may be either 32 or 64 bit, depending on the environment. (The LIBXL.BSI module, used with PRTXLS, CSV2XL, and any programs that use the AXL library) is in the process of being upgraded to use the new h type. (This will require recompilation of AXL-calling programs, and possibly some minor adjustments, after which the programs will become both 32 and 64 bit compatible.) 3. New MIAMEX function MX_AS3264 (200) returns the architecture of the A-Shell executable (32 or 64 bit) rather than that of the OS: xcall MIAMEX, MX_AS3264, BITS where: BITS (num) [out] - returns 32 or 64 depending on the A-Shell architecture. Note that for prior A-Shell versions, attempting to call this function will generate a pop-up invalid opcode error message, so if you are coding to be 32/64 bit aware, you should first check the A-Shell version (perhaps using the SOSLIB function Fn'MinAshVer() found in fnminasver.bsi). It's safe to assume that any A-Shell version below 1708 is 32 bit (or less). 4. New XCALL JSON performs some JSON-related utility functions. General syntax: XCALL JSON, OP, {, PARAMS...} Where: OP (num) [in] specifies the operation (described in detail below) OP 1: Load a JSON string into an ordered map: XCALL JSON, 1, HANDLE, STATUS, JSONTEXT$, $ORDMAP() HANDLE (B4+ or F) [out] - returns a handle to the JSON structure in memory (for future expansion) STATUS (signed num) [out] returns the status of the operation: >= 0 indicates success (# nodes parsed) < 0 indicates an error: -1 = out of memory -3 = out of JSON library handles -5 = invalid map reference -6 = ordered maps not supported in this A-Shell version The resulting map uses an XPATH-like syntax, consisting of a key representing the path to the value and the value representing the value. For example, the following JSON excerpt describing a program menu bar ... { "menu": { "header": "SVG Viewer", "items": [ {"id": "Open"}, {"id": "OpenNew", "label": "Open New"}, null, {"id": "ZoomIn", "label": "Zoom In"}, ... ... would be converted to an ordered map something like this: /menu/header -> SVG Viewer /menu/items[1]/id -> Open /menu/items[2]/id -> OpenNew /menu/items[2]/label -> Open New /menu/items[4]/id -> ZoomIn /menu/items[4]/label -> Zoom In ... Note that you can use the SOSLIB function Fn'FileToStr$(fspec$) to load a JSON file into the string needed by the JSON.SBR function. OP 2: Free the JSON memory associated with the HANDLE XCALL JSON, 2, HANDLE, STATUS HANDLE (B4+ or F) [in] - handle returned from OP 1 STATUS (signed num) [out] - 0 for success OP 3: Escape the JSON text XCALL JSON, 3, STATUS, JSONTEXT$ STATUS (signed num) [out] - returns # of special characters escaped JSONTEXT$ (string) [in/out] - JSON text (both source and destination) This function applies JSON escaping rules to special characters in the specified JSONTEXT$, returning the resulting string in the same variable. Note that since escaping increases the size of the text, the JSONTEXT$ parameter should be sufficiently large to handle the worst case (which could be up to 6X the original), or be a dynamic string. The algorithm assumes that the JSONTEXT$ is encoded using the Latin1 character set, and supports the following: " (quote) -> \" \ (backslash) -> \\ / (slash) -> \/ chr(8) (backspace) -> \b chr(12) (formfeed) -> \f chr(10) (linefeed) -> \n chr(13) (CR) -> \r chr(9) (tab) -> \t chr(1)-chr(31) -> \u0001 - \u001F chr(160)-chr(255) -> \u00A0 - \U00FF chr(128) (Euro) -> \20AC Note that aside from eliminating the need to reinvent the wheel in a Basic function, the XCALL implementation is much faster than you could possibly do it in Basic. OP 4: Unescape the JSON text XCALL JSON, 4, STATUS, JSONTEXT$ STATUS (signed num) [out] - returns # escaped characters unescaped JSONTEXT$ (string) [in/out] - JSON text (both source and destination) This is the reverse of OP 3, converting the escaped sequences into their original raw form. Note that here the output will never be longer than the input. OP 5: Form a "name":"value" pair XCALL JSON, 5, STATUS, NAME$, VALUE$, JSONPAIR$ {,FLAGS} STATUS (not used) NAME$ (string) [in] - the name part of the name:value pair VALUE$ (string) [in] - the value part of the name:value pair JSONTEXT$ (string) [out] - the "name":"value" result is returned here FLAGS (num) [in] - optional flags: XJSONF_NUMBER &h0001 treat VALUE$ as a number (don't quote it) XJSONF_LCS &h0002 fold NAME$ lower case XJSONF_UCS &h0004 fold NAME$ upper case XJSONF_NOTRIM &h0010 don't trim leading/trailing spaces from value (else do) XJSONF_NONULLVAL &h0020 if VALUE$="", output will be "" instead of "name":"" XJSONF_NOCOMMA &h0040 no trailing comma (else output pair ends with a comma) (These symbols are defined in ashinc:json.def) Although this may seem like a minimal operation that can easily be accomplished in a simple Basic function, as with OP's 3 and 4, the big advantage is speed (which might matter when dealing with large datasets involving hundreds of thousands or millions of such pairs). Note that unless the XJSONF_NOCOMMA flag is specified, the output will contain a trailing comma so that you can call the function in a loop without having to explicitly output a comma between each pair. 5. Compiler bug fix (edit 956) : Close a loophole that resulted in a bogus syntax error following an instance of an array base reference in an XCALL parameter list. 6. Compiler refinement (edit 957) : DEFALIAS now updates the effective type (string or numeric) of the function, making it possible to alias a numeric function call to a string function or vice versa, e.g.: DEFALIAS Fn'Foo() = Fn'Foo$() DEFALIAS Fn'Bar$() = Fn'Bar() 7. (UNIX) MX_FINDFIRST/MX_FINDNEXT refinement: extend the maximum number of nesting levels from 3 to 20. (This was done years ago for the Windows version but somehow overlooked for the UNIX version.) ============================================================================ A-Shell Release Notes Version 6.5.1707.3 (07 October 2021) ============================================================================ 1. Compiler bug fix (edit 955) - use of an automapped %m variable in the global context was resulting in a memory error at runtime. ============================================================================ A-Shell Release Notes Version 6.5.1707.2 (06 October 2021) ============================================================================ 1. Compiler bug fix/refinement (edit 954) - close two loopholes related to the use of %x auto-mapped variables (see 1707.0 below) which were resulting in spurious compiler error messages. ============================================================================ A-Shell Release Notes Version 6.5.1707.1 (04 October 2021) ============================================================================ 1. Compiler bug fix/refinement (edit 953) - MX_DYNSTRUCT DYNOP_DEF was not supporting .SIZEOF(var), resulting in a spurious error. Also, it now terminates the define operation as soon as the target DEFSTRUCT is compiled, both speeding it up (when passing files containing many DEFSTRUCTs), and eliminating errors that wouldn't have affected the target structure. 2. MX_DYNSTRUCT DYNOP_DEF operation now returns both the error message and the source line in the errmsg$ parameter. ============================================================================ A-Shell Release Notes Version 6.5.1707.0 (03 October 2021) ============================================================================ 1. Compiler bug fix/refinement (edit 951) to auto-mapped %i variables (see 1706.0). Auto-mapped variables are now confined to local contexts (i.e within functions and procedures) only. And an auto-mapped loop variable must not have been previously defined within the same function as a non-loop auto-mapped variable. 2. Compiler refinement (edit 952) to the MX_DYNSTRUCT support: the default amount of work area memory allocated when defining (compiling) a dynamic structure has been increased from 128K to 2M. While 128K was more than enough for the largest ordinary structure definitions, it wasn't always enough for structures embedded within much large source files, especially files that ++included other files. (Defining a dynamic structure requires essentially compiling all of the source code preceding the target DEFSTRUCT to make sure that any dependent definitions or conditionals are properly taken into account.) 3. MX_DYNSTRUCT, DYNOP_DEF operation enhancement: a new optional parameter (workareak) has been added to allow the caller to specify more than the default amount of memory when defining a dynamic structure. Also, the xcall now properly returns status -3 for the out-of-memory condition, allowing the caller to try again with an explicitly larger workarea. New syntax: xcall MIAMEX, MX_DYNSTRUCT, DYNOP_DEF, status, src$, fields, stsize, & dsname$ {,errmsg$,workareak} workareak (num) [in] - requested work area size in Kilobytes. (Default 2048). ============================================================================ A-Shell Release Notes Version 6.5.1706.3 (28 September 2021) ============================================================================ 1. Compiler bug fix (edit 950) - eliminate bogus "ambiguous relop" errors in nested control statements involving DYNSTRUCT references. 2. Further fixes/refinements to the increase in size of expand/collapse buttons and checkboxes first introduced in 1706.0. ============================================================================ A-Shell Release Notes Version 6.5.1706.2 (27 September 2021) ============================================================================ (used for field debugging only) ============================================================================ A-Shell Release Notes Version 6.5.1706.1 (26 September 2021) ============================================================================ (used for field debugging only) ============================================================================ A-Shell Release Notes Version 6.5.1706.0 (24 September 2021) ============================================================================ 1. Language enhancement: Extend the auto-mapped loop counter concept (introduced in 6.5.1704.0) to support auto-mapping of any variables with a leading % character in the name, provide they are within a function or procedure. Variables of the form %name are mapped as F,6 and variables of the form %name$ are mapped as s,0 (dynamic strings). For example: Function Fn'Foo3(seed as i4:inputonly) %x = rnd(seed) ! auto map1 %x,f,6 %ran$ = "Random number sequence: " ! auto map1 %ran$,s,0 for %i = 1 to 10 ! auto map1 %i,f,6 %x = rnd(0) %ran$ += str(%x) + "," next %i ? %ran$;"..." EndFunction Note that the ability to auto-map variables within a function should not be taken as a blanket invitation to stop mapping local variables! The idea is mainly to use them for incidental, intermediate or temporary values with such limited scope that having to having to map them is more of a distraction than an aid to code readability. 2. Compiler update (edit 949) supports the automapped %var variables described above. 3. XTREE refinement: increase the size of the expand/collapse buttons, checkboxes and radiobuttons for higher resolution screens, as the original sizes were getting to be too small. ============================================================================ A-Shell Release Notes Version 6.5.1705.9 (05 September 2021) ============================================================================ 1. Compiler bug fix (edit 948) - automapped for/next loop variables (see 6.5.1704.0) were generating bogus compiler errors if there was a ++extern statement in the same function. ============================================================================ A-Shell Release Notes Version 6.5.1705.8 (17 August 2021) ============================================================================ 1. AUI_IMAGE bug fix: display position was failing to adjust for top or left toolbar. ============================================================================ A-Shell Release Notes Version 6.5.1705.7 (20 July 2021) ============================================================================ 1. XTREE bug fix/refinement: column header sort indicators were not working on the right side of a split tree. They now work, but only for the primary sort level. (Secondary/tertiary sort works, but the indicators don't appear.) Requires SftTree_IX86_U75.dll 7.5.3. ============================================================================ A-Shell Release Notes Version 6.5.1705.6 (14 July 2021) ============================================================================ 1. Refinement to server-side atesetup feature. The first step in the search path has been changed from $HOME/$LOGNAME to $MIAME/atesetup/$LOGNAME. This avoids a disconnect in privilege settings when running the ashell executable with the +s bit set. As before, if the user-specific directory exists, the search for the atesetup module is terminated (whether a setup package is found or not). ============================================================================ A-Shell Release Notes Version 6.5.1705.5 (12 July 2021) ============================================================================ 1. XTEXT bug fix: TXOP_CREATE opcode was creating the control but then immediately exiting (as a side effect of message handling revisions in 6.5.1705.2). Also note that contrary to the notes for 6.5.1705.2, XTEXT accepts dropped files as internal attachments and thus does not generate the exitcode -75 for the drop event. ============================================================================ A-Shell Release Notes Version 6.5.1705.4 (07 July 2021) ============================================================================ 1. XTREE bug fix: AutoSum wasn't working on columns defined prior to the level indicator (cformat @) column unless the XTF_MLVL flag was explicitly set. 2. XTREE bug fix: close memory corruption loophole that occurred when an AutoSum column was more than 30 characters wide (an unusual but not illegal scenario for a numeric column). ============================================================================ A-Shell Release Notes Version 6.5.1705.3 (06 July 2021) ============================================================================ 1. File drag-drop refinement: extend support to XTREE via the new flag XTF2_FILEDROP (&h01000000). Note that as with all other variations of the new file drag-drop feature, the drop event stores the dragged filename(s) and triggers exitcode -75, but it is up to the application to actually do something useful with the dropped files. (In the XTREE case, the application would presumably something like add the filename(s) to the tree and redisplay it.) ============================================================================ A-Shell Release Notes Version 6.5.1705.2 (05 July 2021) ============================================================================ 1. Revision to the drag-drop feature introduced in 6.5.1705.0 : the two modes are now referred to as "destructive" (previously "synchronous") and "non-destructive" (previously "asynchronous"). Exitcode -75 is now generated by the drop event, regardless of the mode, so the only real difference is whether the drop event replaces the existing contents of the drop bufffer or adds to it. Also, the range of control types eligible to accept dropped files has now been extended to include nearly all types that are created with AUI_CONTROL, include dialogs. The main exceptions are controls where it makes no sense, like date/time, up/down and progress controls, and those that aren't created with AUI_CONTROL (such as XTREE and XTEXT). Sample program FILEDROP1 has been enhanced to better illustrate the feature. 2. AG_DRAGDROP implemented: ? tab(-10,AG_DRAGDROP); opcode, ctlid {,fidx}; chr(127); AG_DRAGDROP (112) implements both destructive and non-destructive drag-drop modes (introduced via MX_DRAGDROP in 1705.0 and 1705.1). The return string is of the format: status, fspec This is one of the functions that has both a subroutine and print tab implementation. Parameters: opcode (num) [in] 0 query drop buffer, set status to the number of files in the drop target (ctlid) 1 retrieve fspec corresponding to fidx from the specified drop target (ctlid) 2 clear the contents of the drop target buffer 3 set non-destructive (previously "asynchronous") mode ctlid (string) [in] control id of the target control fidx (num) [in] for opcode 1, must be set to the number of the fspec to retrieve (starting with 1) status (signed num) [out] <=0: failure,m or no files available in opcode 0; >0: success (number of files for opcode 0 or bytes in fspec for opcode 1) fspec (string) [out] file specification returned for opcode 1 =========================================================================== A-Shell Release Notes Version 6.5.1705.1 (03 July 2021) ============================================================================ 1. Enhancement to drag-drop feature introduced in 6.5.1705.0 : asynchronous mode. In the normal drag-drop mode, each drop event generates an exitcode -75 which must be processed in order to retrieve the dropped file name, since the next drop event will replace it. In asynchronous mode, the drop event does not trigger any exitcode, and instead, file names accumulate in the drop target buffer, waiting for the application to query them at its leisure. To activate the asynchronous mode, use the new op 3 with the MX_DRAGDROP function after creating the drop target control: op = 3 xcall MIAMEX, MX_DRAGDROP, op, status, ctlid This disables the exitcode which otherwise gets fired for each drop event, and also changes the storage mechanism so that successful drop events just add to the buffered list of dropped files. To query the dropped file count or retrieve the file names, use the same techniques (op 0 and 1) with MX_DRAGDROP as described previously for synchronous mode. ============================================================================ A-Shell Release Notes Version 6.5.1705.0 (02 July 2021) ============================================================================ 1. New feature: support for accepting dragged-and-dropped files on a static text control. To enable the feature, specify the WS_EX_ACCEPTFILES (&h0010) flag in the winstylex parameter of the AUI_CONTROL call when creating the static control. (The control should probably have a colored background, or some kind of border to make it recognizable, along with some text identifying it as a target, e.g. "Drop files here".) When a file or group of files is dragged from an Explorer window and dropped on the target control, exitcode -75 is generated. The A-Shell application can then respond with the new MX_DRAGDROP (199) function... xcall MIAMEX, MX_DRAGDROP, op, status, ctlid {,fidx ,fspec} where: op (num) [in] - specifies the operation: 0) query drop buffer; return # files in status parameter 1) retrieve fspec corresponding to fidx 2) clear drop buffer status (signed num) [out] - returns status information: <= 0 : failure (or no files available in op 0) > 0 : success (# of files for op 0; # of bytes in fspec for op 1) ctlid (string) [in] - control id of the target control fidx (num) [in] - for op 1, must be set to the # of the fspec to retrieve fspec (string) [out] - fspec returned for op 1 Comments: Each drag/drop operation replaces the previous buffer (similar to the way the clipboard works). So the only way for the buffer to contain multiple filespecs is to drag multiple files in one operation. Although the implementation is primarily on the Windows side, accessing the new MX_DRAGDROP feature from an ATE session will require that the server instance of A-Shell also be at least at this level. See sample program FILEDROP1. ============================================================================ A-Shell Release Notes Version 6.5.1704.4 (30 June 2021) ============================================================================ 1. XTREE export to spreadsheet bug fix: TreeID strings containing special characters (like colon or slash) where interfering with the creation of the spreadsheet export files. ============================================================================ A-Shell Release Notes Version 6.5.1704.3 (22 June 2021) ============================================================================ 1. Error message refinement: when location counter are displayed in screen error messages, they are now preceded by &h to make clear that they are hex. 2. Ashlog bug fix: the location counters appearing in the prefix section of each ashlog message are now back to hex. (They were inadvertently switched to decimal in 6.5.1702.0 while upgrading some format specifiers for compatibility with newer standard library conventions.) 3. SCALE bug fix: .VALX(a$) wasn't applying the SCALE factor properly, resulting in values one or more powers of 10 larger than they should have been. ============================================================================ A-Shell Release Notes Version 6.5.1704.2 (21 June 2021) ============================================================================ 1. Mouse cursor reporting sequence enhancement: The TAB(-1,158) scheme for converting mouse clicks into byte sequences now works with controls that are nested within parent controls (such as a TABX or dialog) rather than being directly part of the main window. Previous enhancement (see 6.5.1702.0 below) only worked for controls that were direct children of the main window. ============================================================================ A-Shell Release Notes Version 6.5.1704.1 (10 June 2021) ============================================================================ 1. Language refinement (compiler edit 947) : all standard string functions now support the optional $ suffix on the name (e.g. STR(x) or STR$(x).) The following functions did not previously support the optional $ suffix: AUTOCAP$(a$) LCS$(a$) ODTIM$(date,time,flags) RTRIM$(a$) UCS$(a$) 2. IMGDSX.LIT 1.0(115) refinements: - Quoted image specs with UNIX-style directory separators are now supported. - Image specs are no longer folded to upper case (was a problem for web servers running Linux which are case sensitive). 3. WEBCACHE refinement: web repository URLs using https:// or an explicit :port were failing to work properly. Note: IMGDSX provides a convenient way to test the WEBCACHE feature -- point the repository at a web directory containing image files; SET WEBCACHE ENABLE,OPENI to enable the feature for files opened for input (which applies to images displayed with AUI_IMAGE); and then you should be able to display them using IMGDSX fspec. Also note that in the case of ATE, you have to enabled WEBCACHE on the ATE client using AG_WEBCACHE. ============================================================================ A-Shell Release Notes Version 6.5.1704.0 (05 June 2021) ============================================================================ 1. Language enhancement (compiler edit 946) : auto-mapped for/next loop variables. You may now create a new variable on the fly to act as the loop counter in a for/next loop by preceding the variable name with a % as in this example: for %i = 1 to 10 print %i next %i The variable %i will be automatically mapped (as an F,6), with its scope limited to the boundaries of the for/next loop. Besides acting as "syntactic sugar" to save typing (i.e. by eliminating the need to separately map the loop counter variable), the feature also has the benefit of reducing the chance of an accidental conflict between the loop counter and an existing concurrent use of the same variable. The concept is similar to the $$i iterators. ============================================================================ A-Shell Release Notes Version 6.5.1703.1 (30 May 2021) ============================================================================ 1. FTP2 remote delete in SFTP mode (XFTPF_SFTP+XFTPF_DEL) wasn't working properly unless the remote filespec was split into HOSTDIR and HOSTFILE components. It now allows you to combine them into just the HOSTFILE parameter (as indicated by the documentation). Note that the fix requires version 1.14.175 of the ASHNET library (see next). 2. ASHNET 1.14.175 (ashnet.dll for Windows or libashnet.so for Linux) fixes the issue with FTP2 described above. Also includes minor updates to the underlying HTTP and SSL/TLS libraries. 3. Fix display bug in FTP2 XFTPF_DEL operation - the progress dialog was was displaying the message "Out of Queue Blocks" instead of "Deleting". ============================================================================ A-Shell Release Notes Version 6.5.1703.0 (18 May 2021) ============================================================================ 1. New MIAME.INI directive (SBR=INFLD_NOPRINTS) disables the normal response to ^P to pop up the print/capture screen option. Primary motivation here is for those switching back and forth between A-Shell and the Linux shell prompt (where ^P is used to retrieve previous command lines.) Note the similar SBR=INFLD_PRINTS which causes ^P to invoke the File > Print Screen GUI utility in place of default text-based print/capture function. 2. Fix SQL-related bug resulting in spurious trace messages indicating recalculation of maximum file size. 3. Compiler bug fix (edit 945) - eliminate spurious error complaining about the type or size of the record number parameter in a file OPEN statement if the parameter is part of a DIMX array. (Introduced in compiler edit 944.) 4. Runtime now double-checks that the record number parameter in a traditional RANDOM or ISAM is F,6 and triggers an illegal record number error (31) if not. This protects against hard-to-debug errors resulting from inadvertent use of a non F,6 variable. (Prior to compiler edit 944, the type of the record size parameter was not checked at compile time; and as of edit 945, the compiler doesn't check the size of DIMX array variables (since their sizes aren't established until runtime). 5. GDI printing bug fix: //TEXTCENTER wasn't working properly with &#ddd and &#xhhhh entity references. 6. Trace messages related to the refreshing of updated SBX modules are now conditioned on TRACE=EXEC. 7. Trace message "Warning: uninitialized collection handle passed to stl_coll_size" has been eliminated from the log. (While the condition could be an error, most likely it is simply an attempt to get the extent of an uninitialized collection, which is a perfectly legal operation returning -1.) ============================================================================ A-Shell Release Notes Version 6.5.1702.2 (08 May 2021) ============================================================================ 1. Compiler refinement (edit 944) - generate error if non-F6 var specified in OPEN statement. 2. Remove log message if .extent($a()) references an uninitialized array. (Was giving the false impression of an error in the log.) 3. CSV2XL.SBX 2.1(263) supports two minor enhancements to existing INI file options: - SendToPC=2 forces the file transfer to use the ATE-specific non-FTP transfer protocol (useful in environments where (S)FTP is not supported). Option 1 continues to use (S)FTP if the server is not Windows and the file is larger than about 10K. - SaveToDir now supports AMOS-style directories, including ersatz. Previously it only supported native directory notation. If the directory does not exist and cannot be created, it will be ignored. ============================================================================ A-Shell Release Notes Version 6.5.1702.1 (15 April 2021) ============================================================================ 1. Refinements and bug fixes to new .VALX() function: binary radix now supported, using &b or 0b prefix. Issues with &h corrected. Updated table comparing VAL() and .VALX() ... Expression val(expr) .valx(expr) Notes --------------------- --------- ----------- ----------------------- 123 123 123 123 123 123 leading spaces -123 US -123 -123 leading minus and spaces $123 0 123 leading non-digits -$123.45 0 -123.45 leading -$ 123,456.78 123 123456.78 thousands separators ($1,234.56) 0 -1234.56 parentheses for neg price: (USD) 0.99 0 0.99 (USD) ignored (non-numeric) &h0200 512 512 &h for hex &O0200 128 128 &o for octal hex flags: &h0200 0 512 leading text hex flags: 0x0200 0 512 0x for hex octal flags: o0200 0 128 0o for octal binary flags: 0b10110 0 22 0b for binary &b1010101010101010 0 43690 &b for binary ============================================================================ A-Shell Release Notes Version 6.5.1702.0 (12 April 2021) ============================================================================ 1. Language enhancement: new .VALX(expr) function is an extended version of the VAL(expr) function. It supports all of the same behavior, plus it automatically skips over any amount of non-numeric text preceding the number, and also recognizes common types of numeric formatting such as thousands separators, currency symbols, and parentheses for negatives. This makes it particularly handy for importing values from spreadsheets and reading numeric cells in XTREE. Examples: Expression val(expr) .valx(expr) ----------------------- --------- ----------- 123 123 123 123 (leading spaces) 123 123 $123 0 123 123,456.78 123 123456.78 ($1,234.56) 0 -1234.56 sale price: USD 0.99 0 0.99 Notes: while the standard A-Shell notation for octal and hex values is to precede them with &h or &o, other languages (C, Python, etc.) may use 0x for hex and 0o for octal instead, which is why they are included in the new .valx(). 2. Mouse cursor reporting sequence enhancement: The TAB(-1,158) scheme for converting mouse clicks into byte sequences has been enhanced to work on GUI text objects created with TPRINT, DPRINT, or EPRINT. (Previously these acted like dead zones since they are effectively AUI_CONTROL objects without any defined click events.) 3. (Windows) VAL() bug fix: close a loophole in which the VAL() function would return a non-zero value (1 or -1) for an alphabetic argument starting with "INF", e.g. VAL("INFORMATION") was failing to return the expected 0 value for a non-numeric argument. (Caused by a quirk in the Windows ascii-to-float library routine related to special handling for "Infinity".) 4. INSTR() bug: function was failing if the flags argument contained both both INSTRF_ANYxx and PCRE_xxx flags. 5. INSTR() documentation correction: The documentation indicated that if the flags argument was specified (even if 0), the pattern was treated as a Perl-compatible regular expression. It failed to note the exception of a flags argument containing only the INSTRF_ANY or INSTRF_ANYQT bits, in which case the pattern is treated as a literal string. 6. High-resolution refinement: the initial size of the main window, saved to and restored from the .ash settings file, is now scaled so as to result in the same size whether using the -dpm mode in a high resolution environment or not. Previously the window size was stored in raw pixel units, causing the window to be much smaller when in -dpm/high-res mode vs. normal or Windows-scaled mode. Note that this will cause a one-time change in the initial window size for anyone currently using the -dpm switch on a high-res system, but that can be corrected by just resizing it to taste and then using the File > Save option again. The upside is that during the -dpm switch on or off, or switching between high-res and standard-res environments will not affect the default main window size. 7. .CLEAR ARY() bug fix: when used on an auto_extend array, it was failing to reset the extent of the array back to zero. (Problem was introducted in 6.5.1671.1.) ============================================================================ A-Shell Release Notes Version 6.5.1701.3 (24 March 2021) ============================================================================ 1. ASHNET.DLL 1.1.174: close loophole for a possible crash in the XFTPF_DIR operation. 2. XTEXT refinement: the automatic use of the Active Background Color (introduced in 6.5.1698.0) can now be overridden by setting one or more bits in the high byte of the txc'bcolor field. Note that even though XTEXT treats a txc'bcolor value of 0 as meaning "default" (i.e. white), 0 is technically the RGB value for black. So if you want to override the Active Background Color feature (so that the background remains white even when actively editing), then you should set txc'bcolor explicitly to white (i.e. -1 or &hFFFFFFFF). ============================================================================ A-Shell Release Notes Version 6.5.1701.2 (22 March 2021) ============================================================================ 1. XTREE/ATE bug fix: close a loophole through which an xtree with the XTF_MSEL and/or XTF_DRAGDROP flag, in a multi-xtree environment ATE environment, might fail to return the updated answer array due to optimization confusion. 2. XTREE bug fix: close a loophole in when dealing with multiple editable trees on the screen at once, where the editing font would be much larger than the display font. 3. XTREE refinements to the filter dialogs: - All of the text is now localized, i.e. subject to translation via the SBRMSG.xxx 026,xxx messages (specifically 015-024). - The dialog layouts have been expanded slightly to be more accommodating of non-English text (which is typically longer). - The dialogs are now system-modal and always-on-top. (Previously it was possible to click on another application while a filter dialog was active, causing it to be covered up and making the A-Shell application appear non-responsive.) 4. INFLD refinement: List substitution (||l or ||L) now supports matching an empty field to a key entry in the list consisting of just blanks, provided that the XMIN parameter is not zero and the O (optional) type code is not set. For example, in the following list... / /Nowhere/01/Up/02/Down/03/Middle// ... passing an empty field to INFLD will now match against the Nowhere entry in the list (provided XMIN>0 and field not optional). Previously, null fields were not initially matched against the list, resulting in the initial field display defaulting to nothing. ============================================================================ A-Shell Release Notes Version 6.5.1701.1 (15 March 2021) ============================================================================ 1. MX_GETOFD refinement - adjust window hierarchy so that the file open dialog cannot get underneath the current A-Shell modal window (which leads to the illusion that A-Shell is locked up.) 2. Fix unnecessary dependency on Windows 10 build 1607 (December 2015), which was preventing older systems from running A-Shell due to an inability to link to the GetDpiForWindow() function. ============================================================================ A-Shell Release Notes Version 6.5.1701.0 (13 March 2021) ============================================================================ 1. PDFX enhancement: you can now use the EMAIL (method 4) capabilities of PDFX for sending emails without any PDF attachment. This is an extension of a capability introduced in 6.4.1548.8 which allowed sending of a set of attachments without sending the primary PDF. In both cases, the key is for the print file to not contain anything that will generate output (i.e. plain text or //GDI commands that generate output). For the body of the email message, you have to use the //PDFX,Email.Content directives. As with all other cases involving Email.Content directives, the last one must be followed by some other Email.xxx directive. 2. Windows printing refinement: when the user is a windows system account (name ending in $), or if the SPSW_NOPREVIEW switch is passed, A-Shell no longer tries to read APEX-related settings from the registry prior to the print operation. Previously this was causing a "unable to access registry" error during print operations from system accounts, such as CGI during CGI sessions. ============================================================================ A-Shell Release Notes Version 6.5.1700.1 (08 March 2021) ============================================================================ 1. Windows printing update: selecting a WSD printer device from the printer dialog now works properly. (Previously nothing was getting output at all.) 2. XTREE bug fix: the $RESETCFG command (selected from the context menu) was also making the row-index column visible. (This column maintains the original row numbers to allow row number indexing independent of sorting; normally it is hidden though as it has little or no meaning to the user.) 3. Sorting bug fix: very large sorts were triggering a spurious error message and aborting. (Problem introduced around 6.5.1688; not noticed because it only affected sorts requiring more than the MALLOCLIMIT, which with today's copious memory availability, is mostly a non-issue.) 4. Windows high DPI refinement: when using the -dpm command line switch, moving the main window between monitors with different DPI values now works more smoothly, maintaining visual sizes of the various parts of the window better. 5. Windows main window system font sizing refinement: some fonts (particulary Courier) were not always resizing properly as the main window size was changed, sometimes resulting in the first and last column(s) getting clipped. Note that we strongly recommend using another font for the main window system font, such as Lucida Console or Consolas, as they scale and generally appear better. ============================================================================ A-Shell Release Notes Version 6.5.1700.0 (26 February 2021) ============================================================================ 1. XTREE enhancement: Save/restore the current filter toggle status between sessions for each tree, provided that the Advanced Coldef Option TreeID has been set, and that the XTR'USRCFG field in the XTRCTL parameter is not zero. 2. New XCALL SQUEEZ implements the data "squeeze" algorithm used by the MX_FILEHOOK File-Based File Hook Handler. Usage: xcall SQUEEZ, outbuf, cbout, inbuf{, cbin} where: outbuf (X) [out] Receives the squeezed version of the data in inbuf. Note that it should either be dynamic (X,0) or a fixed size greater than or equal to two times the size of inbuf. (Although in most cases the squeezed data will be much smaller than the original, the worst case could be twice as large.) cbout (signed num) [out] Receives the number of bytes written to outbuf. A negative value indicates an error, most likely that the outbuf wasn't large enough. Note that you should use this value rather than the size of outbuf to determine how much of its contents to process. inbuf (X) [in] The raw data to be squeezed. cbin (num) [in] If specified, this determines the number of bytes in inbuf to process. If omitted, the entire contents of inbuf is processed. Comments You can use the Fn'Hooklog'Read'Squeezed() function in the SOSLIB module fnfhooklog.bsi to unsqueeze the data. Note that unlike the actual file hook routine, SQUEEZ.SBR doesn't automatically include any envelope with the data. You should probably include your own envelope, or at least a designated packet start byte to make sure that your unsqueeze operation is in sync with the data. See File-Based File Hook Handler for details on the squeeze algorithm. 3. MX_GETOFD bug fix: the new version (implemented in 6.5.1698) was not preloading the file name edit field with the name from the path argument. 4. XTREE bug fix: context menu items below the Filter group were off by one (i.e. clicking on one would result in the action of the subsequent one.) ============================================================================ A-Shell Release Notes Version 6.5.1699.0 (13 February 2021) ============================================================================ 1. XTREE enhancement: Add a "Toggle All Filter Buttons" option automatically to the context menu when XTF2_AUTOFILTER is enabled. The option toggles the visibility of the filter button in the column headers of any column not actively being filtered. (The point is mainly to free up header space when the columns are tight.) Note that even without the filter buttons, you can still use the context menu to filter a column to the clicked on cell value. 2. (Windows) New MIAME.INI option to control whether to use the new Open/Save File dialogs (implemented in 6.5.1698.0): SBR=GETOFD_NOCOM When specified, A-Shell uses the old implementation of the Open/Save File dialogs (in MX_GETOFD along with internal operations like File > Load). The default (i.e. when not specified) is to use the new implementation. 3. Enhancements to Omniledger subroutines XUSER and XOKEY: - New opcode "R" for destructive read - New opcode "Z" to clear all messages - MIAME.INI SBR=MSGNUM:## now may be used to increase the number of packets beyond the default/minimum of 400. ============================================================================ A-Shell Release Notes Version 6.5.1698.0 (07 February 2021) ============================================================================ 1. (Windows) Replace the XP-compatible File Open/Save Dialog implementations (used by MX_GETOFD and various other internal functions) with a more modern implementation. The application interface is the same except that a new MX_GETOFD flags option is defined: OFN_FORCEPREVIEWPANEON (&h40000000) - Forces Preview pane on Also, the OFN_EXPLORER option is now essentially meaningless (always on). The user interface is also virtually the same. The main difference is in the internal plumbling, which might work better with newer Windows versions, and might support additional new features in the future. 2. XTEXT refinement: the Misc Settings > Set Active Background feature now applies to XTEXT controls like it does to INFLD. Note that this will override the txc'bcolor setting while the control is active. 3. XTEXT bug fix: clicking on an XTEXT control was not triggering the exitcode event if another XTEXT control currently had the focus. ============================================================================ A-Shell Release Notes Version 6.5.1697.1 (27 January 2021) ============================================================================ 1. Compiler bug fix (edit 942) : references in PRINT statements to entire arrays, such as PRINT .EXTENT(ARY()), were resulting in spurious syntax errors. ============================================================================ A-Shell Release Notes Version 6.5.1697.0 (22 January 2021) ============================================================================ 1. New language feature: WRITECD or WRITETD of an entire array. Syntax: WRITECD #ch, ary() or WRITETD #ch, ary() The above syntax is equivalent to... WRITExD #ch, ary(1), ary(2), ... ... up the the extent of the array. Requirements / Comments: - Compiler edit 941+ (and runtime 6.5.1697.0+) - The ary() must be of type X. The element size can be fixed or dynamic, and the array itself can be fixed (i.e. MAPped) or created with DIMX. (DIMX with AUTO_EXTEND is recommended for maximum flexibility.) - See corresponding INPUT CSV #ch, ary() feature added in 6.5.1629.0 and updated below. 2. Runtime refinement: INPUT CSV #ch, ary() (where ary() is a DIMX array with the AUTO_EXTEND option) now updates the ary() extent based on the number of elements input. Previously it expanded the array extent as needed, but would not contract it. The new behavior matches the original intent (and documentation). As an illustration, you can now replicate a CSV file using the following: dimx ary(0), x, 0, auto_extend open #1, "in.csv", input open #2, "out.csv", output do input csv #1, ary() if eof(1) then exit else writecd #2, ary() endif loop close #1 close #2 Note that the explicit test for eof(1) prior to the writecd is only needed to prevent an extra blank line at the end of the output file resulting from the final writecd with a zero element ary(). If a blank line at the end isn't a bother, then you could simplify the loop to: do input csv #1, ary() writecd #2, ary() loop until eof(1) 3. Runtime bug fix: close a very small window of opportunity following an INPUT CSV #CH, ARY() in which a subsequent operation on a dynamic array may have aborted. 4. MSGBOX refinement: The timein parameter now applies selectively to each of the buttons (based on the xflags MBX_TIx bits), and is independent of the timeout value (except that the timeout value overrides the timein value for the default button). Previously the timein needed to be applied to all buttons for it to work at all, and there was no visual indication of the timein countdown. ============================================================================ A-Shell Release Notes Version 6.5.1696.1 (18 January 2021) ============================================================================ 1. Compiler bug fix (edit 940) - Close a loophole resulting in spurious "attempt to input from outputonly parameter" (or vice versa) errors in SBXs. (Problem introduced in compiler edit 939 and 6.5.1695.0) ============================================================================ A-Shell Release Notes Version 6.5.1696.0 (17 January 2021) ============================================================================ 1. Runtime system enhancement: the number of open files is now tracked in the JOBTBL.SYS, making it available to status programs such as JSTAT.LIT 2. JSTAT.LIT 3.3(112) enhancement: the number of open files, and if applicable, the number of open ISAM 1.x files, is now displayed, e.g. Files{,ISAM} Open: 3,2 Aside from general interest, the information may also be useful for determining if the parameters of the FILES=###,### statement in the miame.ini are adequate. (The numbers displayed in JSTAT correspond directly to the parameters of the FILE statement. The first value counts all random, sequential, ISAMA, and ISAM files, plus the terminal itself. The second value counts each ISAM 1.x file opened. ============================================================================ A-Shell Release Notes Version 6.5.1695.0 (10 January 2021) ============================================================================ 1. Language enhancement: "Implicit function return value capture". That's a mouthful to describe what is really a kind of "syntactic sugar" to simplify referencing the result of a previously called function without having to map a variable and explicitly assign the value to it. To invoke the feature, you simply prefix the called function with a dot, after which the returned value of that function will be available by referencing a variable with the same name as the function (including the dot). For example: if .fn'foo(x) < 0 then ! dot-prefix call ? "fn'foo(x) error "; .fn'foo ! use implicit capture value endif ... function fn'foo(value as f6:inputonly) as f6 ... .fn = endfunction In the above example, we have a function fn'foo() that takes a numeric argument. For the purposes of our example, assume the return value is >= 0 for success, or < 0 for an error. In the call to the function (at the top of the example), the dot prefix -- .fn'foo(x) instead of just fn'foo(x) -- causes the return value to be captured in a variable named .fn'foo (matching the name of the called function, with the dot prefix). That variable is then available to be used subsequently. Effectively, this is equivalent to: map1 .fn'foo,f,6 .fn'foo = fn'foo(x) if .fn'foo < 0 then ... So in other words, the compiler expands a reference to a function using the dot prefix into the combination of a variable definition (map statement) and an assigment from the function to the variable. The "fingertip savings" consists of the automatic mapping of the variable and the automatic assignment, plus, in a case like the above where the function reference is not a simple call but is part of an expression, it effectively embeds the assignment into the expression in a way that otherwise would have required multiple statements and a possible rearrangment of the logic. Another way to look at it is that aside from simply reducing the amount of "coding busy work", the automatically created dot variable (.fn'foo in this example) provides a runtime savings by eliminating the need to call the function again in order to recall its value. So logically speaking, the original example would also be equivalent to: if fn'foo(x) < 0 then ! normal call ? "fn'foo(x) error "; fn'foo(x) ! second call endif Comments: If the dot variable already exists in the scope of the function call, then the existing variable is re-used. (The normal scoping rules apply, including the various extern directives, just as they do with any other variable reference.) Only if the variable is not defined within the visible scope is it created. The newly created variable has the same scope as any other variable mapped at the present location would. Because of the scoping rules, it is possible for multiple instances of the automatically created dot variable to exist simultaneously, with independent values. For example, a program could call the .fn'foo(x) function (using the example above) from a global context (creating a global instance of the .fn'foo variable), and it could later call the .fn'foo(x) function from within another function, using a different value of x, resulting in a local instance of the .fn'foo variable with a correspondingly different value. This can obviously lead to confusion, so caution is advised when referencing one of these implicitly created dot variables, particularly when the reference to the variable is separated from the call that last assigned it. The implicit function return value capture feature only applies to user-defined functions with names starting with fn' (or FN' or Fn'). It does not apply to built-in dot functions like .instrr(). The dot prefix is not part of the function name; instead it acts as a compiler directive. The function can be called with or without the dot prefix, but the implicit return value capture only occurs when called with the dot prefix. The feature requires compiler edit 939 (included with the 6.5.1695.0 release as well as separately), and it is entirely implemented within the compiler. (There is no runtime dependency.) ============================================================================ A-Shell Release Notes Version 6.5.1694.2 (02 January 2021) ============================================================================ 1. XTREE refinement: reinstate the confusing feature (removed in 1692.1) in which cformat S in combination with a mask will display blank for a 0. To get that effect, you can now use cformat S or Z. ============================================================================ A-Shell Release Notes Version 6.5.1694.1 (24 December 2020) ============================================================================ 1. IFE$() bug fix: when an IFE$(a$,b$) function was part of a larger expression and the b$ parameter was selected, the a$ parameter was effectively replacing the prior term in the larger expression. (Problem was introduced in 6.5.1690.2) ============================================================================ A-Shell Release Notes Version 6.5.1694.0 (14 December 2020) ============================================================================ 1. XTREE enhancement: name of exported file (CSV or XLSX) can now be set via the new Advanced Coldef Option: ExportFspec= If not specified, it will use the TreeID for the export file name. If neither specified, it reverts to the previous default (XTREE- for the CSV2XL export and ASHGRID for the CSV export). 2. CSV2XL.SBX 2.1(257) Fix problems with automatic date column detection and with dates not formatting correctly when combined with cell attributes. 3. New MIAMEX function to retrieve information about the amount of time that the system has been up: XCALL MIAMEX, MX_GETUPTIME, systime {,jobtime, ashtime} Parameters: systime (num) [in] - Number of seconds since the operating system booted. jobtime (num) [in] - Number of seconds since the current job logged in. ashtime (num) [in] - Number of seconds since the Job Table (jobtbl.sys) was last created. (This is likely to be the same as the jobtime under Linux, since the jobtbl.sys creation time comes from the directory ctime which may be updated for reasons other then creation.) ============================================================================ A-Shell Release Notes Version 6.5.1693.0 (24 November 2020) ============================================================================ 1. License tracking refinement: define a new bit in the JOBTBL record, JOBTYP_LICNODE (&h008), to indicate that the job currently has a node license attached to it. The license may still move from one job to another as sessions are launched and closed, but this allows the overall count to be accurate between full recalculations. It also allows for a new SYSTAT/LIC feature (see next). 2. SYSTAT 3.2(185) now displays a "+" next to the trmdef name for jobs that are currently are using a node license. 3. XTREE feature: support single or double-click (or ENTER) to toggle the expanded/collapsed state of multi-level items via new bits in the XTR'SHOWBUTTONS field, defined in XTREE.DEF as... XTSBF_LCLICK = &h0040 ! single click expands/collapses XTSBF_DBLCLK = &h0080 ! double click (or ENTER) expands/collapses When enabled, these options may make it easier for the user to operate a multi-level tree (reducing the amount of hand-eye coordination otherwise needed to click precisely on the +/- button). (Burying these options in the XTR'SHOWBUTTON field may be slightly counter-intuitive since they have nothing to do with whether the buttons are visible, but the features are closely related enough that it seemed better than introducing yet another field to the XTRCTL structure.) Note that the double-click option (XTSBF_DBLCLK) probably only makes sense when there is no other action or meaning associated with parent tree items (since it stifles the ability to "choose" the item). ============================================================================ A-Shell Release Notes Version 6.5.1692.3 (03 November 2020) ============================================================================ 1. XTREE user refinement: Control-' (apostrophe) may now be used within an editable text cell to copy/paste the contents of the cell above it (as in Excel). ============================================================================ A-Shell Release Notes Version 6.5.1692.2 (29 October 2020) ============================================================================ 1. (Windows) Remove dependency on Windows 10 that was introduced in 1692.0 with the MX_GETDPI/AG_GETDPI function. Note that the function will not work prior to Windows 10 (i.e. will return DPI values of 0). ============================================================================ A-Shell Release Notes Version 6.5.1692.1 (27 October 2020) ============================================================================ 1. XTREE refinement: remove a confusing feature in which cformat S in combination with a mask will display blank for a 0. To get that effect, you can now use cformat Z. 2. Close GPF loophole in XTREE related to legacy answer array formulations. ============================================================================ A-Shell Release Notes Version 6.5.1692.0 (24 October 2020) ============================================================================ 1. New MIAMEX function (applicable to A-Shell/Windows and ATE): xcall MIAMEX, MX_GETDPI, sysdpi {,ctlid, ctldpi} MX_GETDPI returns information about the effective or simulated resolution of the workstation monitor(s) in DPI (dots per inch). Parameters: sysdpi (num) [out] - system DPI (primary monitor). ctlid (str/num) [in] - optional control ID (name or number) of control for which to return the control's DPI. (This will only differ from sysdpi in a multi-monitor system where the control is on one of the secondary monitors.) ctldpi (num) [out] - DPI of the monitor on which the control specified by ctlid is located. Comments: If you don't specify the -dpm command line switch when launching A-Shell/Windows or ATE, the return value will probably be a value simulated by Windows (typically 96) rather than the real resolution of the monitor. The -dpm switch disables the Windows standard resolution simulation, giving you access to the actual monitor resolution. See the documentation on the -dpm switch for more details. 2. New AUI client function AG_GETDPI (111) ? TAB(-10,AG_GETDPI);{ctlid};chr(127); input "",sysdpi,ctldpi Returns the DPI for the workstation, and optionally for the monitor associated with the specified ctlid. See MX_GETDPI for more details. 3. XTREE/ATE bug fix: last character of returned answer array was in some cases being truncated. (Problem introduced in 1680.10.) 4. XTREE autofilter bug fix: close obscure window of opportunity for GPF. 5. XTREE refinement: stifle the initial sort operation during reentry when the opcode is XTROP_RESELECT and both the XTF_EDITABLE and XTF_NOREDRAW flags are set. This resolves an annoyance that otherwise occurs when exiting and re-entering due to validation of a change to an editable cell when the column is marked for sorting: the change to the cell most likely causes the row to be relocated due to the sort, making it seem to the user like the item just disappeared in the middle of editing. ============================================================================ A-Shell Release Notes Version 6.5.1691.3 (18 October 2020) ============================================================================ 1. (Standard Windows release only) - The -dpm switch was being inadvertently forced on, resulting in most window objects being smaller than they were previously (unless you were already using the -dpm switch). ============================================================================ A-Shell Release Notes Version 6.5.1691.2 (16 October 2020) ============================================================================ 1. Close window of opportunity for a GPF or segmentation fault during a CHAIN operation. (Problem was fairly rare, possibly explaining why it has been latent at least as far back as 6.5.1688.0 and probably a lot further.) ============================================================================ A-Shell Release Notes Version 6.5.1691.1 (15 October 2020) ============================================================================ 1. INFLD refinement: new type code ||1 now processes timer on each character received, as well as after 1 second of no characters, allowing it to time out even in the middle of steady (faster than 1 character per second) typing. Normally, the timer logic is only processed at the end of each second without input. That makes sense from standpoint of minimizing CPU overhead in idle fields, as well as user-friendliness (since timing out while the user is actively typing isn't very friendly). But ||1 is a special case, intended to accept only burst-style input (such as might be received from a scanner). Note that it is left to the application to weed out partial inputs deemed invalid after the timeout. (Exitcode will be set to 11 to indicate timeout). And also note that you probably want to disable most of the timer-related messaging (see type codes / and +), but not Q (since ||1 relies starts by suspending the timeout until the first character received). ============================================================================ A-Shell Release Notes Version 6.5.1691.0 (14 October 2020) ============================================================================ 1. INFLD enhancement: new type code ||1 modifies the timeout feature causing it to start out suspended. The first character typed reactivates the timer. Note that all other timer-related options and type codes remain in effect, and that the initial timer suspension, as with the normal manual timeout suspension, is for 10 minutes. 2. INFLD enhancement: new type code ||p disables the use of the clipboard paste option. 3. XTREE enhancement: increase the maximum number of columns from 100 to 200. ============================================================================ A-Shell Release Notes Version 6.5.1690.4 (13 October 2020) ============================================================================ 1. XTREE bug fix: multiple FileListX options for a single tree were not being supported. (Only the first one was being recognized.) 2. XTREE bug fix: close a loophole in the AutoSum logic that would sometimes result in an incorrect sum being displayed after an XTROP_REPLACE operation, particularly if rows were added. 3. XTREE AutoFilter bug fix: the updatable filter status column type (0U) wasn't getting updated properly after a filter operation (resulting in previously filtered-out rows reappearing after an exit/re-entry). 4. XTREE AutoFilter refinement: the CB and Pattern filter types now treat blank cells as normal. Previously, there was no way to filter out the non-blank cells using the CB filter because it didn't present a checkbox option for blank. And in the case of the pattern filter, a blank pattern was matching everything. ============================================================================ A-Shell Release Notes Version 6.5.1690.3 (08 October 2020) ============================================================================ 1. Compiler (edit 938) refinement: support a ++ifdef ... ++endif statement on a single source line, e.g. ++ifdef TEST_MODE : ? "Running in test mode" : ++endif Note that this is intended to be an accommodation to simplify injection of test or debugging code into source code, and not as an embrace of the generalized concept of jamming multiple statements (especially not pragmas) on one source line. Developers are encouraged to use the TRACE and DEBUG statements for messaging that can be enabled at run time rather than compile time. ============================================================================ A-Shell Release Notes Version 6.5.1690.2 (06 October 2020) ============================================================================ 1. $IFE(a$,b$) bug fix: wasn't working properly when the a$ value was rejected (e.g. null or blank) and the result was being converted to a numeric value (either explicitly or implicitly). 2. ISMUTL.LIT 1.4(143) enhancement: add INIT function to menu. INIT preserves the structure of the file but removes all the data and keys. The original DAT and IDX files are rolled over to D0? and I0? (up to three generations, i.e. D01, D02, D03). 3. Loosen the license counting rules slightly to allow for a second session from the same workstation when MX_SETUSRNAM had been used to change the user name of the first session. ============================================================================ A-Shell Release Notes Version 6.5.1690.1 (21 September 2020) ============================================================================ 1. INFLD combo bug fix: the rubout key was in some cases leaving the cursor one position to the left of the where it should have been. Problem introduced in 6.5.1688. ============================================================================ A-Shell Release Notes Version 6.5.1690.0 (18 September 2020) ============================================================================ 1. TABX control refinement: you can now specify any of the label RGB attributes in the global attributes section of the configuration string (passed in the ctext parameter). Any attributes thus specified will be used as the default for any labels that do not specify their own RGB attributes. (This eliminates the redundancy of having to specify the same RGB attributes on every label.) 2. MX_FINDFIRST / MX_FINDNEXT refinement: expand the previous limit on the maximum length of a filename from 123 to 255 characters. ============================================================================ A-Shell Release Notes Version 6.5.1689.2 (10 September 2020) ============================================================================ 1. Compiler (edit 937) refinement: arrays/collections may now be passed to DYNFUNC(), as they can in normal function references. Previously only array elements were supported. ============================================================================ A-Shell Release Notes Version 6.5.1689.1 (08 September 2020) ============================================================================ 1. ISAMA refinement: minor improvements to the tracing information relating to DELETE'RECORD and RELEASE'RECORD when the ISAM TRACE flag active. ============================================================================ A-Shell Release Notes Version 6.5.1689.0 (07 September 2020) ============================================================================ 1. XTREE enhancement: you can now associate a column with a numeric ID number which is not affected by either the physical column number (position in the coldef array) or logical column number (display position). This can be potentially useful for associating validation or other column-related logic with columns in trees containing many editable columns, especially during development (when the column numbers are likely to be fluid). To associate an ID number with a column, add the new Advanced Coldef Option to its coldef definition: ID=### where ### is an integer in the range of 1-255, e.g. ID=25. On exit from the tree, a new field at the end of the XTRCTL structure, XTR'COLID, will be set to the column ID corresponding to the physical column set in XTR'XCOL, i.e. the exit column (if relevant). The XTRCTL map and structure definitions in XTREE.SDF and XTREE.MAP have been updated according. The end of the structure now looks like this... map2 XTR'SHOWROWHDR,B,1 ! [129] see XTRHF_xxx map2 XTR'CTLID,B,2 ! [132] A-Shell ctl # map2 XTR'LEFTINDEX,B,1 ! [133] Left-most visible column map2 XTR'SHOWFOOTER,B,1 ! [134] Show footer map2 XTR'FOOTERSTYLE,B,1 ! [134] same xxx flags as HEADERSTYLE map2 XTR'COLID,B,1 ! [135] column ID (6.5.1689.0+) map2 XTR'UNUSED2,X,11 ! [135] was 12 Note that there is no requirement to define column ID's for every column, nor any rule against using the same ID for multiple columns (which might make sense if they share common validation or other processing logic.) 2. XTREE bug fix: the combination of cformat P and B with a mask was resulting in shifting or truncation of the field during editing. 3. XTREE refinement: The automatic red coloring for negative values now works even when the cformat type is S, provided there is a mask. (This combination is used to display numeric 0 as blanks, but previously it was also disabling the automatic red coloring of the negative values.) =========================================================================== A-Shell Release Notes Version 6.5.1688.7 (04 September 2020) ============================================================================ 1. XTREE bug fixes related to combination of cformat P and the mask option. ============================================================================ A-Shell Release Notes Version 6.5.1688.6 (31 August 2020) ============================================================================ 1. CSV2XL 2.1(253) - close loophole where 00/00/00 appearing in date-formatted columns would end up appearing in the XLSX file as 11/30/1999 due to a problem in the string-to-date cell format conversion. These dates now will appear as blank cells. 2. INFLD Windows keyboard mode refinement: Ctrl+LEFT and Ctrl+RIGHT now navigate to previous and next word (equivalent to the traditional Ctrl+A and Ctrl+W) when |K specified. 3. INFLD enhancement: new type code |9 causes Ctrl+HOME to exit with exitcode 9. This is mainly intended for use with Windows keyboard mode (|K) where you would probably want the HOME key to just move the cursor to the start of the field (like Ctrl+U), in which case you would want to omit the type 9 and just use |9. 4. XTREE bug fix: when there were multiple Export-related options on the context menu that got automatically grouped into a sub-menu, subsequent selections were offset by one (i.e. clicking on an option would act like the option below it). 5. XTREE bug fix: Columns using the cformat combination "ET" or "ER" were causing a "editable column count mismatch" error. (The E in both cases is actually redundant, but would have been harmless if following the T or R.) 6. XTREE bug fix: the Advanced Coldef Option Mask was conflicting with cformat code P, causing either truncation of the first character or a size mismatch error. 7. Minor adjustments to Window keyboard handling conventions relating to the HOME and END keys and type |K. (This remains a work in progress as there are some outstanding issues involving combo fields, HOME/END, and some locales.) ============================================================================ A-Shell Release Notes Version 6.5.1688.5 (20 August 2020) ====================================================================== 1. XLOCK.SBR refinement: if an out-of-queue blocks condition, or other queue system failure occurs while trying to place an XLOCK, it now returns a non-zero value in the MODE parameter, and also displays a messagebox clarifying the problem, with abort/retry/ignore options. Previously it merely displayed "?Out of queue blocks" but did not return an error code, so the application had no way of recognizing the problem. Note that the issue didn't affect FLOCK, which does return status 103 for these queue error conditions. ============================================================================ A-Shell Release Notes Version 6.5.1688.4 (15 August 2020) ============================================================================ 1. (Windows) INFLD bug fix: close loophole in fold operation allowing a GPF to occur when folding certain strings involving accented characters. (Problem introduced in 1688.3) ============================================================================ A-Shell Release Notes Version 6.5.1688.3 (10 August 2020) ============================================================================ 1. (Windows) Upgrade again to the VC2017 runtime libraries and fix the AUI dialog clipping issue described below by adjusting the target /SUBSYSTEM option. 2. INFLD bug fix: Copy/Paste of certain accented characters was in some cases resulting in corrupted graphic characters ending up in the field, and/or causing the terminal to appear to be locked. (Alternate workaround is to explicitly add the ANSI option to the FONT directive in the miame.ini.) 3. INFLD bug fix: fold to upper case option (TYPE code ^) wasn't working for all accented characters. ============================================================================ A-Shell Release Notes Version 6.5.1688.2 (01 August 2020) ============================================================================ 1. (Windows) Revert to the VC2012 libraries and remove the AUI workaround described in 6.5.1688.1.3 below. ============================================================================ A-Shell Release Notes Version 6.5.1688.1 (31 July 2020) ============================================================================ 1. Dynamic variable bug fix: close a loophole resulting in a spurious out of memory error when assigning an uninitialized dynamic variable from the result of a function that was itself set from an uninitialized dynamic string. 2. Bug fix: close a small loophole leading to segmentation fault when chaining to a program. 3. AUI workaround: a recent upgrade to a new Windows runtime library version had the side effect of causing dialogs to be slightly shorter and narrower than before. As a temporary fix, this version adds 20 pixels back. 4. HOSTEX.SBR refinement: The $ASHELL macro now includes the -cgi switch if applicable (allowing CGI programs to use HOSTEX to launch subprograms). Note that this also affects AMOS.SBR in situations where it is forced to launch a new session. ============================================================================ A-Shell Release Notes Version 6.5.1688.0 (21 July 2020) ============================================================================ 1. ATE transport library (ASHNET2.DLL 2.4.210) upgraded to OpenSSL 1.1.1g to incorporate many accumulated protocol and security upgrades, bug fixes, etc. 2. ASHNET.DLL 1.1.173 : supports new SHA3 hash algorithms in the CRYPTO.SBR CRYPTOP_HMAC operation via new mode parameter symbols (in crypto.def): CRYPTO_MODE_SHA3_224 30 HMAC-SHA3-224 CRYPTO_MODE_SHA3_256 31 HMAC-SHA3-256 CRYPTO_MODE_SHA3_384 32 HMAC-SHA3-384 CRYPTO_MODE_SHA3_512 33 HMAC-SHA3-512 3. Floating point precision enhancement: you can now completely disable the normal downscaling of floating point precision (from 64 to 48 bit for AMOS F6 compatibility) by setting the MX_ROUND factor to -1: OP = 1 ! set FACTOR = -1 ! special flag to disable downscaling xcall MIAMEX, MX_ROUND, OP, FACTOR This may be useful when dealing with values containing more than 11 signficant digits. Note that to be effective, you must also disable the FPROUND option (e.g. SET NOFPROUND). You should also add SIGNIFICANCE 16 to the program (for printing unformatted values). Note that the MX_ROUND factor persists across programs, so it only needs to be set once per session. 4. LOKSER WAIT'FILE and WAIT'RECORD enhancement: when waiting for more than 5 seconds for access to a file or record, a status message will now display on the bottom unshifted status line of the main terminal window indicating the name of the file, access type, and elapsed wait time. 5. JOBTBL.SYS enhancement: the program version edit number of the current program is now stored (in the PRGEDIT field of the updated jobtbl.sdf structure definition), making it available to SYSTAT (see next). 6. SYSTAT.LIT 3.2(183) will now report the program version edit number (if available) as a parenthesized suffix to the current program name when the /V switch is specified. For example: .SYSTAT/N/V Status of A-Shell/32 Ver. 6.5.1688.0 on Tuesday, July 21, 2020 18:32:58 TSKAAA TSKAAA jack DSK0:1,4 RN VUE 6.5.1687.6 TSKAAB TSKAAB jack DSK0:150,277 RN SYSTAT(183) 6.5.1688.0 In the above list, the (183) represents the edit number of the SYSTAT version. The versions at the far right side are the A-Shell versions for each job. (Since this feature wasn't available prior to 6.5.1688.0, it doesn't show for VUE on the first job, which is running an earlier version.) 7. SEND.LIT 2.3(125) enhancement: new /F switch allows querying one or all jobs to see which have a specified file open. For example, the command... .SEND /F ALL CUSTO ... queries all other jobs to see if they have a file named CUSTO (any directory or file extension) open. This can be a convenient alternative to the use of OS-level utilities to figure out which job is preventing your job from gaining access to a needed file resource. ============================================================================ A-Shell Release Notes Version 6.5.1687.6 (17 July 2020) ============================================================================ 1. XTREE bug fix: Enabling export-related SBR options in the miame.ini was in some cases causing XTREE to crash when the context menu displayed. ============================================================================ A-Shell Release Notes Version 6.5.1687.5 (15 July 2020) ============================================================================ 1. Minor XTREE tracing refinements. ============================================================================ A-Shell Release Notes Version 6.5.1687.4 (13 July 2020) ============================================================================ 1. Bug fix: close loophole in 1687.3 bug fix which could result in LOKSER queue overflow. ============================================================================ A-Shell Release Notes Version 6.5.1687.3 (12 July 2020) ============================================================================ 1. Bug fix: RELEASE'RECORD #CH (without specifying a record number) was, in rare cases, triggering an ISAMA EBADF error. The problem was introduced in 6.5.1684.0, and occurred only when the current record number was 0 (which normally only occurs after opening an empty file). ============================================================================ A-Shell Release Notes Version 6.5.1687.2 (11 July 2020) ============================================================================ 1. Bug fix: MX_OSVER was returning the ATE OS release and platform fields in the ATE OS version and ATE release fields, respectively, when the OS version is empty (as it currently is for Windows 10). ============================================================================ A-Shell Release Notes Version 6.5.1687.1 (08 July 2020) ============================================================================ 1. XTREE bug fix: the $XTRCSV and $XTRCSV2XL were failing to output any data. (Problem introduced in 1683 when the $XTRCSV2XLSX version with color support was added.) ============================================================================ A-Shell Release Notes Version 6.5.1687.0 (07 July 2020) ============================================================================ 1. Language enhancments (compiler edit 935) : new dot variables - .MILLITIME - returns number of milliseconds since midnight .MICROTIME - returns number of microseconds since midnight Note that due to quirks of the system scheduling clocks on different platforms, the resolution of the .MICROTIME results may not be as granular as one might expect. 2. Compiler bug fix (also edit 935) : a missing closing parenthesis on the end of a function parameter list wasn't always being flagged as a syntax error. (It was compiling as if the closing parenthesis had been there.) 3. Run-time bug fix: several dot functions which take an argument, such as .RECSIZ(ch), .FSTAT(ch), .LINENO(ch), etc. were not working properly in multi-part expressions except when they were the first argument. For example: IF .FSTAT(CH) = -3 THEN ... ! worked correctly IF -3 = .FSTAT(CH) THEN ... ! was comparing -3 to CH, not .FSTAT(CH) ============================================================================ A-Shell Release Notes Version 6.5.1686.1 (05 July 2020) ============================================================================ 1. Run-time bug fix: .RECSIZ(ch) and .RECNO(ch) weren't working for ISAMA files (as of the 1685.0 update). ============================================================================ A-Shell Release Notes Version 6.5.1686.0 (02 July 2020) ============================================================================ 1. Language enhancement (compiler edit 934) : new unambiguous shortcut operators: #+= and $+=. These are equivalent to the existing shortcut operator += except that they unambiguously specify either addition or concatenation, respectively, regardless of the destination type. For example: map1 a$,s,10 dimx $num, ordmap(varstr;varstr) map1 n,f a$ += 1 ! sets a$ = "1" a$ += 1 ! sets a$ = "11", e.g. "1" + "1" a$ #+= 2 ! sets a$ = "13", e.g. val("11") + val("2") ? "a$ = ";a$ ! "13" $num("one") = "1" ! sets $num("one") = "1" $num("one") #+= "1" ! sets $num("one") = "2" $num("one") #+= $num("one") ! sets $num("one") = "4" ? "$num(""one"") = "; $num("one") ! "4" n += 1 ! n = 1 n #+= $num("one") ! n = 5, e.g. 1 + val("4") ? "n = ";n ! 5 Note that these new unambiguous shortcut operators do not require an update to the run time system as they are compiled down to the traditional and equivalent long form of the operations. ============================================================================ A-Shell Release Notes Version 6.5.1685.0 (01 July 2020) ============================================================================ 1. Language enhancments (compiler edit 933) : new dot variables - .SBXNAME - returns name of current SBX or "" if not applicable .SBXVERSION - returns version string for current SBX or "" if NA. .CCYYMMDD - returns current date in CCYYMMDD format .MMDDYY - returns current date in MMDDYY format .DDMMYY - returns current date in DDMMYY format .RECSIZ(ch) - returns the record size for the specified open file channel based on the OPEN (or XOPEN) statement. If the channel does not specify an open RANDOM, ISAM or ISAMA file, a negative value is returned. 2. XTREE enhancement: Checkbox columns may now contain text as long as the first data position (i.e. the checkbox value character) is blank. ============================================================================ A-Shell Release Notes Version 6.5.1684.7 (30 June 2020) ============================================================================ 1. XTREE bug fix: separate images were sometimes being displayed using the same image due to hash collisions on the filespecs. 2. READ, XREAD and ISAMA GET operations now work with dynamic X (X0) record variables, regardless of whether they are pre-initialized. Previously this only worked if the variable was pre-initialized to the size of the record. ============================================================================ A-Shell Release Notes Version 6.5.1684.6 (25 June 2020) ============================================================================ 1. MX_ROUND refinements: - F4, F6, and F8 format now accepted for the factor. (Previously only F6 was recognized.) - Rounding factors larger than 1 are now rejected, since they would otherwise interfere with certain floating point operations which assume at least integer precision (such as FOR/NEXT loops). Previously it was possible to accidentally set the MX_ROUND value to something crazy and produce seemingly inexplicable downstream errors. - An attempt to set the MX_ROUND factor will be rejected if SCALE is in effect. (The interaction between SCALE and MX_ROUND would be too complicated for anyone to make sense of; use one or the other, or neither.) - The SCALE statement now overrides and resets any prior MX_ROUND factor. - All of the above will result in warnings in the ashlog.log file. 2. XTREE bug fix: XTF2_CSV was treating the first line as both a header and data if XTF_HIDEHEADER was not set. Warning: certain other CSV-related features (such as the {skipcol} clause) were apparently removed in the transition to UNICODE support (between 5.1 and 6.0) and have yet to be reinstated. ============================================================================ A-Shell Release Notes Version 6.5.1684.5 (18 June 2020) ============================================================================ 1. GDI printing bug fix / refinement: Single-line //TEXTRECTANGLE directives with no text were being incorrectly intepreted as the start of a multi-line TEXTRECTANGLE construct, causing subsequent text and directives to be interpreted literally. ============================================================================ A-Shell Release Notes Version 6.5.1684.4 (17 June 2020) ============================================================================ 1. Licensing bug fix / refinement: Adjustment to the licensing logic changes in 1679.4 that in some cases resulted in more secondary sessions being counted as physical nodes under Linux than previously. ============================================================================ A-Shell Release Notes Version 6.5.1684.3 (17 June 2020) ============================================================================ 1. Ordered map bug fix: assigning a string containing accented characters from an X variable to an ordmap(varstr;varstr) was potentially resulting in some alteration of the string due to an asymmetrical binary/string conversion sequence. 2. XCALL AMOS bug fix: when the command passed to the AMOS subroutine started with "LOOK ", it was failing to perform the function. (Problem was introduced in the parameter passing overhaul between 1672 and 1680.) ============================================================================ A-Shell Release Notes Version 6.5.1684.2 (16 June 2020) ============================================================================ 1. TMENU.SBR / TMEN2.SBR bug fix: the select parameter was not being returned. (Problem surfaced during the parameter-passing overhauls, somewhere in the 1670-1680 range.) 2. TPRINT refinement: TPRINT statements now automatically activate the MBF_AUTOGROW option so that the control coordinates don't take up any more space then needed for the text. Previously, it assumed each character in the string being output was going to occupy one grid space, which for typical proportional text is much more than needed. This solves a problem which otherwise might surface when TPRINT is used to display labels beside an input field; the input might appear normal but mouse click operations might not work and the field might sometimes be partially cleared due to the order of screen painting. ============================================================================ A-Shell Release Notes Version 6.5.1684.1 (15 June 2020) ============================================================================ 1. Minor ISAM-A refinement (Windows) - Continue to process Windows messages even while stuck in a low-level lock waiting on file access. Previously A-Shell appeared non-responsive to Windows during such a wait. ============================================================================ A-Shell Release Notes Version 6.5.1684.0 (12 June 2020) ============================================================================ 1. Compiler bug fix (edit 930) - The new SET'RECNO statement was causing a syntax error on a subsequent statement in certain contexts. 2. Compiler bug fix (edit 931) - In programs compiled without the /X:2 or /RC switches, the memory storage assigned to the last explicitly mapped variable was overlapping the first unmapped variables (assuming no /M). Problem was introduced in compiler edit 894 (A-Shell 6.5.1656.1) 3. Language enhancement: the XOPEN statement for ISAMA now supports the FDFV_EXCLUSIVE (&h0800) flag to elevate INDEXED or ISAMP'INDEXED to INDEXED'EXCLUSIVE or ISAMP'INDEXED'EXCLUSIVE. This provides a way to create a generic ISAM OPEN routine (perhaps within a function) that supports both shared and exclusive modes via a parameter. For example: XOPEN #ch, fspec$, INDEXED, recsiz, FDVF_EXCLUSIVE+FDVF_W'FILE is equivalent to: XOPEN #ch, fspec$, INDEXED'EXCLUSIVE, recsiz, FDVF_W'FILE 4. Language enhancement (compiler edit 932): XOPEN now supports RANDOM and ISAM 1.x files. Also, XOPEN supports the option of expressing the flags argument as an expression rather than as a binary variable. XOPEN for RANDOM: XOPEN #ch, fspec$, RANDOM, recsiz {,flags} In the case of RANDOM, you may use the flag FDVF_FORCED (&h0010) to convert it to RANDOM'FORCED (i.e. shared). XOPEN for ISAM 1.x: XOPEN #ch, fspec$, ISAM'INDEXED, recsiz {,flags} In the ISAM 1.x case, as with ISAMA, you can use the flag FDVF_EXCLUSIVE (&h0800) to convert from ISAM'INDEXED shared to ISAM'INDEX'EXCLUSIVE. For completeness, here is the complete list of flags that can be used with XOPEN (defined in ashinc:addsfdv.def) Symbol Value Description -------------- ------ ---------------------------------------- FDVF_FORCED &h0010 Convert RANDOM to RANDOM'FORCED (shared) FDVF_EXCLUSIVE &h0800 Convert INDEXED to INDEXED'EXCLUSIVE FDVF_READONLY &h1000 READONLY FDVF_END_FILE &h2000 END'FILE FDVF_W_RECORD &h4000 WAIT'RECORD FDVF_W_FILE &h8000 WAIT'FILE 5. Language bug fix / refinement: RELEASE'RECORD now properly releases just the one record (whether specified explicitly or implicitly). Previously it was effectively releasing all records. ============================================================================ A-Shell Release Notes Version 6.5.1683.1 (10 June 2020) ============================================================================ 1. File I/O bug fix: close a loophole in which an INPUT statement might have returned nothing, including no EOF (usually leading to an infinite loop.) ============================================================================ A-Shell Release Notes Version 6.5.1683.0 (08 June 2020) ============================================================================ 1. Language enhancement: new XOPEN statement for ISAMA ... XOPEN #ch, fspec, mode, flags This is equivalent to the traditional OPEN statement for ISAM files, except: - XOPEN eliminates the implicit connection between the fstat and recno variables normally specified in the OPEN, and the file access statements. (The recno and fstat parameters are eliminated.) - XOPEN allows for the various flags (WAIT'RECORD, WAIT'FILE, END'FILE,...) which must normally be specified as literals to the compiler to instead be evaluated at runtime. The values for flags are defined in the definition file ashinc:addsfdv.def file: define FDVF_READONLY = &h1000 ! READONLY define FDVF_END_FILE = &h2000 ! END'FILE define FDVF_W_RECORD = &h4000 ! WAIT'RECORD define FDVF_W_FILE = &h8000 ! WAIT'FILE 2. Language enhancement: new dot functions to access the fstat and recno attributes associated with an ISAMA file: .fstat(channel) - returns the file status for the last operation .recno(channel) - returns the current record number The only link between these functions and the file open (OPEN or XOPEN) statement is via the channel number. 3. Language enhancement: new statement to set the record number of a file: set'recno #channel, expr This would be equivalent to setting the recno variable (associated with channel in the OPEN statement) to the value of expr. 4. Compiler (edit 928) updated to support the above language enhancements. 5. Compiler (edit 929) enhancements/refinements: - New ++PRAGMA FORCE_F1_HDR "" may be used to toggle the /F1 switch. - Use of the .ISNULL() function now sets the minimum runtime version to 1414. 6. XTREE refinement: the XLSX export now exports background colors for empty cells. ============================================================================ A-Shell Release Notes Version 6.5.1682.0 (05 June 2020) ============================================================================ 1. XTREE enhancement: the export to XLSX via CSV2XL now supports foreground and background colors. The feature can be enabled in one of three ways: - By setting the system option SBR=XTREE_CSV2XLSX, either in the MIAME.INI, or by setting the SBRF2_XTREE_CSV2XLSX flag using MX_SBRFLG or AG_SBRFLAGS. - By explicitly adding a PopupMenu option using the new $EXPCSV2XLSX special command. - By adding the Advanced Coldef Option ExportOptions=Attr to any column, provided that the XTREE_CSV2XL global option (previously labeled "Export (XLS)" and now labeled "Export (Data Only)" option is set. The XTREE_CSV2XL global option continues to enable the generic CSV2XL export, which does not support colors or other attributes, except that the ExportOptions=Attr option will upgrade it to be equivalent to the XTREE_CSV2XLSX option. Note that ExportOptions may be applied to the zero column, in which case it enables output of color (and potentially other) attributes for all columns; otherwise it only applies to the column to which it is attached. Note that there is also an ExportOptions=NoAttr which overrides the option previously set globally. Example: coldef="0~0~x~H~ExportOptions=Attr~~" ... coldef += "30~5~Test~S~RGBbg=22,33,44~ExportOptions=NoAttr~~" The above column definitions start by enabling the export of attributes globally, and then disabling it specifically for the one "Test" column. Comments Support for exporting color attributes to a spreadsheet requires CSV2XL.SBX 2.1(250) or higher (see below). When the attribute export is enabled, the spreadsheet output format will be forced to XLSX, regardless of the setting in the relevant CSV2XL INI file. See the topic "Export to XLS" for more details on exporting to a spreadsheet. 2. CSV2XL 2.1(247) Refinements to SetRow directive; it now supports setting attributes (such as colors) for the next row or a specified set of rows yet to be output. Also, fix an apparently intermittent issue with the total and nototal parameters on the SetCol directive. 3. CSV2XL 2.1(248) Support cell-level attributes using the syntax: "field data", ... The attribute clause must begin with "<" and end with "/>", and there needs to be quotes around the entire combination of the attribute clause and the field data. (WRITECD will take care of the quoting.) The attribute list may contain any of the Common XL Parameters, except mask and formatid. Any attributes specified at the cell level are combined with the attributes previously defined by the SetCol directive for that column. For example, in the following data line, all fields will output using the attributes previously set, but the middle field font will be changed to lavender and bold. hello,"Bonjour",Hola Also, a new shorthand attribute bgc has been defined to set the background color (which otherwise requires setting the fillpattern to FILLPATTERN_SOLID and the patternbgc to the desired color.) For example: Breakfast,"burrito",4.99 4. CSV2XL 2.1(249) New //XL directive to support RGB colors: //XL,SetRGBMode {,rgbmode=boolean} The AXL library always starts out in color index mode (rgbmode=false), meaning that colors must be specified via the COLOR_xxx index values. Using this directive, with rgbmode=true (or omitting the parameter entirely), switches the library over to RGB mode, in which colors are specified using the hex format &hbbggrr. For example: hello,"Bonjour",Hola You can continue to use COLOR_xxx indices in RGB mode, as they can be converted unambiguously by the AXL library functions. But the reverse is not supported, i.e. you cannot specify RGB values when not in RGB mode. Notes; - RGB mode is only supported with XLSX format (not XLS) - If using the AXL library functions directly, you must recompile with LIBXL.BSI edit [138] or higher and LIBXL2.BSI [103] or higher. - Attempts to specify colors that are incompatible with the mode will result in a warning message in the debug message window. 5. CSV2XL 2.1(250) Enhancement - new directive: //XL,SetOutputFormat, This directive overrides the OutputFormat directive in the INI file. The two options in either case are XLS and XLSX As with the SetINI directive, it has to appear in the CSV source file prior to any lines that do not start with //XL. 6. XTREE refinement: The Advanced Coldef Option Filter=None may now be associated with the zero column to disable autofiltering for the entire tree. This may be useful if you've enabled autofilter globally (in the MIAME.INI) but want to disable it for a particular tree. Previously, to accomplish this you would have had to add the Filter=None option to each column. 7. XTREE refinement: new message strings have been added to the SBRMSG.xxx file to support the PopupMenu text for the new export options: 026,011,Export (XLSX) 026,012,Export (Data Only) 026,013,Export to Spreadsheet... ============================================================================ A-Shell Release Notes Version 6.5.1681.4 (01 June 2020) ============================================================================ 1. GUI color bug fix: setting the background color (BGC param) on a static text control with the MBF_VCENTER flag on a TABX panel to a value less then 64 was resulting in the default Windows gray background. ============================================================================ A-Shell Release Notes Version 6.5.1681.3 (01 June 2020) ============================================================================ 1. Mousewheel refinement: the NOWHEEL system OPTION now disables the mouse wheel within a combo box field. 2. Mousewheel refinement / INFLD type code addition: a new type code, ||W is now recognized as an another way to disable the mousewheel within the context of a single combo box field. ============================================================================ A-Shell Release Notes Version 6.5.1681.2 (26 May 2020) ============================================================================ 1. Dynstruct bug fix: close loopholes in dynamic structure memory handling, especially related to SBX usage. (Previously, returning an SBX was clearing dynamic structure definitions previously created in the main program.) ============================================================================ A-Shell Release Notes Version 6.5.1681.1 (20 May 2020) ============================================================================ 1. CentOS/RedHat -EL8 bug fix: adjust to change in the standard stream library in which EOF is now persistent, requiring an explicit clear when running out of keyboard input. ============================================================================ A-Shell Release Notes Version 6.5.1681.0 (20 May 2020) ============================================================================ ============================================================================ A-Shell Release Notes Version 6.5.1680.10 (19 May 2020) ============================================================================ 1. XTREE refinement: when using split mode (XTF_SPLIT) and setting the XTR'LEFTPANEWIDTH parameter to 0, the routine was often calculating a left pane width that was a few pixels too narrow. 2. Parameter passing bug fix - close loophole left behind by the patches in 1679.2, 1679.5 and 1680.5, affecting dynamic string parameters passed with the outputonly option set. ============================================================================ A-Shell Release Notes Version 6.5.1680.9 (18 May 2020) ============================================================================ 1. XTREE bug fix: Close a crash opportunity related to ATE and XTF_MSEL. ============================================================================ A-Shell Release Notes Version 6.5.1680.8 (16 May 2020) ============================================================================ ============================================================================ A-Shell Release Notes Version 6.5.1680.7 (15 May 2020) ============================================================================ ============================================================================ A-Shell Release Notes Version 6.5.1680.6 (06 May 2020) ============================================================================ 1. (Yet another) parameter passing bug fix related to the patches in 1679.2 and 1679.5. This one primarily related to passing numeric expressions. ============================================================================ A-Shell Release Notes Version 6.5.1680.5 (05 May 2020) ============================================================================ 1. Parameter passing bug fix - further correction to the patches in 1679.2 and 1679.5 which affected @lblref arguments. Symptom was Basic Error #34 (illegal syntax code). ============================================================================ A-Shell Release Notes Version 6.5.1680.4 (03 May 2020) ============================================================================ 1. MX_FILETIMES (196) bug fix: The Windows version was failing to translate AMOS-style filespecs and embedded %env% variables (so was only working with ordinary native filespecs). ============================================================================ A-Shell Release Notes Version 6.5.1680.3 (27 April 2020) ============================================================================ 1. ATE atesetup refinement/fix: if the $HOME/atesetup directory exists, don't look in $MIAME/atesetup (even if the $HOME/atesetup directory is empty.) Previously it was terminating the search only if the $HOME/atesetup directory contained files. ============================================================================ A-Shell Release Notes Version 6.5.1680.2 (27 April 2020) ============================================================================ 1. ATE atesetup bug fix; patch in 1678.0 to use the FTP2 instead of FTPDLX for the file transfer was causing problems with ATE clients older than edit 1370). ============================================================================ A-Shell Release Notes Version 6.5.1680.1 (26 April 2020) ============================================================================ 1. AMOS.SBR bug fix (problem introduced in 1679.2) ============================================================================ A-Shell Release Notes Version 6.5.1680.0 (20 April 2020) ============================================================================ 1. New GUI interface command: AG_DPM (110) activate the Windows DPI awareness, which generally results in smaller but sharper display objects on higher res screens. ? TAB(-10,AG_DPM);mode;chr(127); where mode is one of the following: -1 : DPI Unaware -2 : DPI System Unaware -3 : DPI Per Monitor Aware -4 : DPI Per Monitor Aware Version 2 -5 : DPI Unaware GDI Scaled -4 is equivalent to using the -dpm command line switch. -1 is equivalent to not using the -dpm switch. For details on the other options, please see the Microsoft documentation for SetThreadDpiAwarenessContext(). Note that as with all TAB(-10,xxx) commands, the implementation is on the client side, so no update of the server side is needed. If the client doesn't recognize the command, it will just be ignored. ============================================================================ A-Shell Release Notes Version 6.5.1679.5 (16 April 2020) ============================================================================ 1. Parameter passing bug fix - further correction to the patch in 1679.2 which was complete failure to pass parameters to XCALLs implemented within certain library modules (such as ASQL). 2. Increase the maximum number of modules that can be loaded into the user partition at one time, from 96 to 128. 3. CGI mode startup refinement: when newly launched CGI task exceeded the license, in some cases it would itself timeout (due to the standard CGI seven second inactivity timeout) before it finished probing for phantom jobs. 4. APEX refinement - //XOFFSET and //YOFFSET values are now preserved across page breaks. Previously they needed to be explicitly specified for each page. 5. APEX bug fix - //SETOPTION values were being reset at the start of printing from the printer selection dialog button. (This was mainly an issue when using //SETOPTION,NO-AUTO-MARGINS with virtual printer drivers.) ============================================================================ A-Shell Release Notes Version 6.5.1679.4 (15 April 2020) ============================================================================ 1. (Windows) JOBCTL.SYS bug fix: close a window of opportunity through which a new session that exceeded the license count might have prematurely zapped an existing session, falsely thinking it had died. 2. License counting bug refinement: when a newly launched session exceeds the license limit, A-Shell now always does a full recount before checking to see if there are any phantoms. (In systems that run close to the limit and have a lot of rapid in/out activity, such as for web services, this can reduce the frequency of startup delays due to trying to recover abandoned licenses.) 3. License counting bug fix: although child processes were never counted against the license during startup, during some recount scenarios they were being charged as licensable. ============================================================================ A-Shell Release Notes Version 6.5.1679.3 (15 April 2020) ============================================================================ 1. APEX bug fix - the //XOFFSET and //YOFFSET values set on the first page were not getting carried over to subsequent pages. 2. Parameter passing bug fix: correction to patch in 1679.2 (below) which was resulting in string expressions passed in XCALLs showing up as "@". ============================================================================ A-Shell Release Notes Version 6.5.1679.2 (14 April 2020) ============================================================================ 1. Compiler bug fix (edit 927) - STRSIZ 0 was causing spurious errors in some function declarations. 2. Parameter passing bug fix: Close a memory corruption loophole during outputting of xcall/function dynamic parameters. The loophole appeared when a parameter list contained more than one dynamic variable from the same pool context, and the act of outputting one of them caused the pool to be relocated. Note that the ashlog has contained warnings relating to this issue going back to 6.2; those warnings have been convertion to "%Info:" messages that only appear when the MALLOC trace is set. 3. Parameter passing bug fix: Close a memory corruption loophole during passing of parameters to subroutines and functions. Similar to the above patch, this loophole appeared when parameters were passed via string expressions rather than variables. If two or more such expressions occurred in one parameter list, there was small opportunity for one of the latter parameter expressions to cause the string stack to be relocated, invalidating the parameter address pointers to earlier stack expression parameters. ============================================================================ A-Shell Release Notes Version 6.5.1679.1 (13 April 2020) ============================================================================ 1. PDFX refinement: //PDFX,Overlay.OverlayFile,spec wasn't converting AMOS-style specs (or specs containing %MIAME% references) to native format. (It was working, however, with the older variation //PDFX,Overlay.File,spec). 2. APEX refinement: Restore automatic margin behavior prior to 6.5.1679 (of automatically adding //XORIGIN,360 and //YORIGIN,360) when none was specified), unless the //SETOPTION,NO-AUTO-MARGINS directive specified. This avoids a subtle but possibly unwanted behavior change when updating. Going forward though, the NO-AUTO-MARGINS option is recommended. ============================================================================ A-Shell Release Notes Version 6.5.1679.0 (06 April 2020) ============================================================================ 1. APEX refinement: remove the automatic setting of XORIGIN/YORIGIN to 360 for virtual printers (such as PDF writers) that do not report a built-in physical margin. Adding the margin looks better in the case where you are thinking in terms of what the report would look like on a real printer, but it's misleading in the case of virtual printers like PDFX. (Such virtual printers have no inherent margins, but may add them when viewing in the PDF viewer, or when printing.) Note that while this is a change in behavior, it only occurs when APEX is being used to preview output of a virtual printer (e.g. PDFX), which is of questionable utility in the first place; in any case the change doesn't appear to affect the actual printed output. 2. GDI printing enhancement: //SETOPTION,NO-AUTO-MARGINS When specified, this option disables the automatic 1/4" margin adjustment applied by the //SETFONT directive when calculating the character width from a negative width parameter (i.e. from the number of characters to fit in the width of the page). This automatic adjustment was added years ago in conjunction with the APEX auto-margin adjustement described above, on the theory that even if the printer doesn't report a physical margin, at some point you may want to print to paper, where the margin would most likely need to be applied. So it seems better to be calculate the font width so as to be compatible with physical printing. There are situations however where this doesn't make sense and in fact causes problems. One would be when using //SETFONT with a negative width parameter to come up with an appropriate font size to match up to a form generated from an image scaled to the page. In that case, you probably want the width basis used for the font calculation to be the same as used for the image scaling, i.e. without any automatic margin offsets. 3. GDI printing enhancement: the Vertical Motion Index (VMI) can now be set in terms of tenths of lines that will fit in the printable height of the page by specifying a negative value. For example: //SETVMI,-625 The above would result in vertical spacing such that 62.5 lines would fit on the page. For a typical laser printer LETTER page, with a printable height of 10.67 inches, this would be equivalent to: //SETVMI,246 Based on 10.67 * 1440 (twips per inch) / 62.5 and rounded to nearest twip. The difference, however, between the two //SETVMI directives shown above would be that the first one would adjust to variations in the printable height of the page, whereas the second would not. That could be useful when trying to synchronize the printing with an underlying image that was also scaled to fit the page. 4. XMPP.SBR enhancement: revisions to the parameter list and to the associated libashxmpp library to support receiving as well as sending. New parameter list: xcall XMPP, op, status, fromid, pw, server, port, toid, msg, msgid, & flags {, timeout {, rcvfile}} where op (num) [in] Operation code: 1 : connect, send message, disconnect 2 : connect, receive message(s), disconnect 3 : connect, send message, receive message(s), disconnect status (num) [out] 0 : ok (for op 1) >0 : # messages received (ops 2 and 3) -1 : routine abort during startup -2 : error opening the xmpp.log file (when debug flags set) -3 : failure to create a connection context -4 : error during configuration of connection options -5 : failure to connect -6 : failure to disconnect timeout (num) [in] Number of seconds to wait for messages to be received. rcvfile (string) [in] File specification (AMOS or native) of file to receive messages in. If not specified, default is ashxmpp.xml. (All other parameters are as previously documented - 1676.0 below) WARNING: This A-Shell update requires the libashxmpp.so.1 library to be upgraded to version 1.0.102+ (and vice versa). 5. XMPP library updated to 1.0.2 to support the changes in XMPP.SBR described above. Both the library and the ashell executable must be updated together. ============================================================================ A-Shell Release Notes Version 6.5.1678.0 (02 April 2020) ============================================================================ 1. A-Shell/Linux enhancement for ATE connections: when a new A-Shell session is launched from an ATE connection, A-Shell will now check if the directory $HOME/atesetup exists, and if so, will look there, instead of the normal location $MIAME/atesetup, for any ATE update packages. This allows the site administrator to tailor ATE updates for different users. 2. ATE setup file transfer refinement: if the ATE client supports it, the setup package will be transferred using the newer FTP2 routine rather than the older FTPDLX. (Same idea as in 1676.4 below, but applied to the atesetup transfer which was overlooked in the earlier update.) ============================================================================ A-Shell Release Notes Version 6.5.1677.0 (27 March 2020) ============================================================================ 1. New ATE command line switch: -logintext "" The specified text string (with mandatory quotes) overrides the login text embedded in the ATE configuration. As with the ATE configuration, you can use the "^m" notation to specify control characters (^m = carriage return, ^[ = escape) and tilde to cause a 0.25 second delay. This feature is primarily useful in cases where you want to launch another ATE session using the existing configuration information (protocol, host address, login, etc.) but with a different startup command. HOWEVER: in the case of UNIX servers, as with the login text in the ATE configuration, it gets processed after the operating system login startup command (e.g. the $HOME\.bash_profile). If that startup file launches A-Shell, then your login text will have to be designed to pick from there. 2. New ATE command line switch: -zate This is similar to the other -z switches (variations on hiding the window) except that it carries over to after the connection with the server is established. This would mainly be useful if you were confident that the combination of the server login startup commands and the ATE login text (as specified in the ATE configuration or specified via the -logintext switch described above) will result in launching a program that creates its own window. (Or perhaps carries out a task that you don't want to make visible.) 3. Refinement to the existing -min command line switch when used with ATE: Similar to -zate, the -min switch launches ATE in a minimized state and leaves it that way after connecting to the server. This has the advantage of allowing you to interactively make the window visible (perhaps for debugging) by clicking on the task bar icon, but unlike the hidden status set by -zate, the minimized status set by -min affects not just the main window but any dialogs as well. ============================================================================ A-Shell Release Notes Version 6.5.1676.8 (20 March 2020) ============================================================================ 1. XTREE bug fix - spurious 'only one filter state column' warning removed. ============================================================================ A-Shell Release Notes Version 6.5.1676.7 (12 March 2020) ============================================================================ 1. XTREE date sorting bug fix: the date sort comparison routine was not always treating dates with explicit and implied century values as equivalent. 2. XTREE date filtering bug fix: using the calendar filter range consisting of just one date was failing to match dates with implicit rather then explicit centuries. Also, any column data containing both a date and a time was being excluded even if the date matched the ending date in the filter range. (For example, a filter consisting of a single date MM/DD/CCYY was rejecting data of the form MM/DD/CCYY HH:MM). ============================================================================ A-Shell Release Notes Version 6.5.1676.6 (11 March 2020) ============================================================================ 1. Further dramatic improvements in the recycling of memory used for dynamic variables. The difference can be particularly substantial in cases where a single dynamic memory pool (i.e. the global pool or a particular function or procedure) persists over the course of a large number of dynamic variable assignments, especially when working strings experience repeated cycles of concatenation and truncation. ============================================================================ A-Shell Release Notes Version 6.5.1676.5 (03 March 2020) ============================================================================ 1. Dynamic variable memory management refinement: the garbage collection subsystem managing memory used by dynamic variables (S,0 or X,0) has been substantially rewritten to do a much better job at recovering fragments which were previously left behind. ============================================================================ A-Shell Release Notes Version 6.5.1676.4 (28 February 2020) ============================================================================ 1. Further refinement to the change in 6.5.1676.3 to use FTP2 instead of FTPDLX, but only if the ATE client version supports it (i.e. if it is version 6.1.1380+) ============================================================================ A-Shell Release Notes Version 6.5.1676.3 (15 February 2020) ============================================================================ 1. A-Shell/Windows session identification bug fix with long user names: In cases where the A-Shell session identifier is based on the user name (rather than the workstation machine name), long user names were resulting in truncation of the unique suffix on the identifer, resulting in two sessions being given the same identifier, resulting in job table conflicts. These long names are now truncated so that the unique suffix fits within the allowed maximum of 19 characters. (Use SYSTAT/C to see these.) 2. XTEXT and AUI_IMAGE refinement: when either of these functions needs to transfer a file between the server and client via {S}FTP, they now use FTP2 rather than the older (and now deprecated) FTPDLX routine. (Among other advantages of FTP2 is that it doesn't require registering a DLL on the Windows side.) ============================================================================ A-Shell Release Notes Version 6.5.1676.2 (14 February 2020) ============================================================================ 1. XMPP.SBR refinement: the PW (password) parameter may now be optionally encrypted using MX_PWCRYPT. Modes 1-3 are supported; in the case of mode 3, use the FROMID as the encryption seed and omit the key parameter (to use the internal A-Shell generated key). See 6.5.1676.0 below for more details on XMPP.SBR. ============================================================================ A-Shell Release Notes Version 6.5.1676.1 (06 February 2020) ============================================================================ 1. Compiler bug fix (edit 926) - in programs compiled without the /M (require all variables to be mapped) option, a reference to a non-existent structure member (ST.MEMBER) within an otherwise defined structure (ST) was resulting in the structure name getting auto-mapped as a F,6 variable. This wasn't causing any compiler errors, but in assignments of the form ST = , the assignment was being made to the auto-mapped variable rather than the structure. Such errors are now properly reported. Note that even without /M, variables of the form ST.MEMBER are not eligible for auto-mapping. ============================================================================ A-Shell Release Notes Version 6.5.1676.0 (03 February 2020) ============================================================================ 1. (Linux only) New xcall subroutine XMPP.SBR allows sending of instant messages using the XMPP protocol (Extensible Message and Presence Protocol, aka Jabber) to third party instant messaging systems implementing that protocol. (Compatible examplelsl include the OpenFire messaging server and Pidgin client.) xcall XMPP, op, status, fromid, pw, server, port, toid, msg, msgid, flags where op (num) [in] Operation code: 1 : connect, send message, disconnect status (signed num) [out] Return code: 0 : success -1 : failed to initialize the xmpp library -2 : unable to open xmpp.log -3 : failed to initialize connection structure -4 : failed to set server connection options -5 : failed to connect (authentication? unreachable?) -6 : failed to disconnect fromid (str) [in] JID (Jabber ID) of sender, using syntax name@domain (Must be recognized by server for authentication) pw (str) [in] Authentication password for sender. Currently plain text. (Encryption options to be added.) server (str) [in] Hostname or IP address of messaging server port (num) [in] Port to connect to server on (0 = default: 5222) toid (str) [in] JID of the receipient (individual or group), e.g. name@domain msg (str) [in] Text of message. There is no inherent limit to the length; dynamic strings (S,0) supported. msgid (str) [in] Short string to identify message, preferably unique. Mainly of use for tracking messages within the server. flags (num) [in] option flags (zero or more of the following) AXMPPF_LOG (&h0001) - output traces to ashmpp.log AXMPPF_TRUST_TLS (&h0002) - trust all TLS certs AXMPPF_DISABLE_TLS (&h0004) - disable TLS; use insecure connect AXMPPF_DEBUG (&h0008) - low level tracing to xmpp.log ============================================================================ A-Shell Release Notes Version 6.5.1675.1 (01 February 2020) ============================================================================ 1. APEX bug fix: the preview window state was not being correctly saved and restored when it was closed from a maximized state. ============================================================================ A-Shell Release Notes Version 6.5.1675.0 (01 February 2020) ============================================================================ 1. XTREE enhancement: New Advanced Coldef option: AutoNumber= Defines a column whose contents are filled automatically starting with the specified base number, and incrementing by 1 for each data row in the tree. This is similar to the XTR'SHOWROWHEADER feature in that the column appears immune to sorting, and that collapsed rows in multi-level trees are counted (causing visual gaps in the numbering), while rows filtered out are not counted. Unlike the row headers, an AutoNumber column otherwise shares most of the features of a normal column, i.e. can be in any position, have a column header, column color attributes, a context menu, click codes, can be moved or resized, etc. As with the constant data column feature (activated via the Advanced Coldef option "Data"), an AutoNumber column does not occupy any space in the data array. To indicate this, you must set the cpos and cwidth fields in the coldef definition to -1, e.g. coldef$ += "-1~-1~ ~#~AutoNumber=1~RGBbg=200,225,250~~" (Minus one, tilde, minus one, tilde, column title, tilde, format, tilde, advanced coldef options starting with AutoNumber.) Note that in the above example, the two minus one values and the AutoNumber clause are essential. The column title could be anything (blank in this example); the format code could be anything that makes sense for a numeric column. Additional advanced coldef options can be added as appropriate to specify a background color (as in this example), click codes, etc. 2. XTREE bug fix: updatable color columns (e.g. bU, cU, CU) were losing their color codes on update when AutoFilter was in effect. ============================================================================ A-Shell Release Notes Version 6.5.1674.1 (30 January 2020) ============================================================================ 1. ATE bug fix relating to HTML escaping of special characters (like quote) when passing back and forth between the server and client. Symptom was sequences like %22 showing up in a data field in place of quote. 2. Minor refinement in the RND2() initial randomization logic for better improved distribution of the initial generated seed. 3. XTREE bug fix - the ^Z undo operation for enhanced checkboxes was sometimes failing to recover the initial state. ============================================================================ A-Shell Release Notes Version 6.5.1674.0 (26 January 2020) ============================================================================ 1. Initial release of A-Shell for RHEL8/CentOS8 ============================================================================ A-Shell Release Notes Version 6.5.1673.2 (02 January 2020) ============================================================================ 1. Compiler bug fix (edit 925): some variations of invalid DEFTYPE statements were crashing the compiler. 2. Dynamic variable update bug fix: close a loophole leading to memory pool corruption in assignments to a dynamic variable that also appears on the right side of the quals sign. ============================================================================ A-Shell Release Notes Version 6.5.1673.1 (22 December 2019) ============================================================================ 1. XTREE bug fix: click on inactive sorted tree was activating wrong row. ============================================================================ A-Shell Release Notes Version 6.5.1673.0 (16 December 2019) ============================================================================ 1. Windows printing enhancement: new printer pseudo device LASTPROMPT: uses the printer last selected in an A-Shell or ATE printer selection dialog. As with PROMPT:, it can be used with ATE AUXLOC: printing, i.e. DEVICE=AUXLOC:LASTPROMPT: The above would send the printout to ATE via the AUXLOC: device, where ATE would then send it to the printer previously selected. Note that the PROMPT: device also uses the printer previously selected (by A-Shell or ATE) as the default printer in the selection dialog, while PROMPT(DEFAULT): use the printer set as "the default" in your Windows printer definitions. ============================================================================ A-Shell Release Notes Version 6.5.1672.2 (13 December 2019) ============================================================================ 1. Compiler bug fix (edit 924): - Revise edit 923 so that all ++ conditional compilation directives within functions and procedures are included in the LSX, even if within a function that has been shaken out by the /PX switch. (Such conditionals may still be be relevant to how the rest of the file is compiled, and this resolves problems with conditionals that span the start or end of a routine.) ============================================================================ A-Shell Release Notes Version 6.5.1672.1 (11 December 2019) ============================================================================ 1. Compiler bug fixes (edit 923): - Incorrect minimum run version was written into object header in some cases. - LSX file may have ended up with mismatched ++IF/++ENDIF if a conditional block straddled the function definition and the function was shaken out by the /PX switch. ============================================================================ A-Shell Release Notes Version 6.5.1672.0 (07 December 2019) ============================================================================ 1. XLOCK.SBR enhancements / refinements: - New mode 6 (check for lock without wait); equivalent to mode 0 but without setting the lock. Similar to 4 (when the class parameter is non-zero) but without any conflict/confusion with the reservations. - New mode 7 (expanded list); equivalent to mode 3 but the returned lock'array elements also contain the lock class, e.g. map1 lock'array map2 lok'jobnum,b,2 map2 lok1,b,x ! x=2 or 4 depending on myjob param map2 lok2,b,x ! " " " map2 lokclass,b,2 ! always 2 bytes - Mode 3 and mode 7 now pick up the array size from the parameter passed, whether it is passed as an unformatted block, or as the first element of the array. The value returned in mode (# of locks set) will be the total number of locks set (as before), but the list will be limited to the size of the array. (Previously it may have overrun the array if not large enough to hold all the locks.) 2. CSV2XL.SBX 2.1(244) enhancement to the SetBanner directive: you may now embed an explicit line break by inserting "^M" into the text, in which case the height of the banner will be increased accordingly. (Unlike the column headers, the banner does not typically wrap and increase in height automatically, at least under most versions of Excel, apparently due to complications with the cell merging used to spread the banner across all the columns.) 3. Fix a bug in handling the -e command line switch, in which under some circumstances it would get stuck in an infinite loop while trying to exit. ============================================================================ A-Shell Release Notes Version 6.5.1671.8 (05 December 2019) ============================================================================ 1. A-Shell/Windows bug fix: resolve a side effect of edit 1671.6 (intended for ATE) that prevented a second job from sharing the JOBTBL. 2. XTREE bug fix: when a single tree coldef parameter contained multiple Format clauses with |## style suffixes, the style suffix was in some cases showing up as text in the field. ============================================================================ A-Shell Release Notes Version 6.5.1671.7 (04 December 2019) ============================================================================ 1. ATE refinement - exiting via the "X" in the upper right corner (in conjunction with OPTIONS=ABORTX) was sometimes opening the trace window and outputting a few traces before the application completed exiting. 2. GDI printing bug fix: When printing multi-page documents with copies > 1, //PAPERSIZE, //ORIENTATION, and/or //BIN options at the top of the page were in some cases reverting to their default state after the first page of the second copy. ============================================================================ A-Shell Release Notes Version 6.5.1671.6 (03 December 2019) ============================================================================ 1. ATE refinement - fix bug relating to launching child processes from the ATE client that was resulting in spurious not-licensed prompts. ============================================================================ A-Shell Release Notes Version 6.5.1671.5 (03 December 2019) ============================================================================ 1. Windows printing workaround: if you know the exact and complete name of the printer, you can eliminate the normal logic which enumerates the available printers in order to determine the best match, by preceding the name with an asterisk, e.g. DEVICE = *PDF-XChange Printer 2012 This could potentially be useful in certain environments where the printer enumeration operation was hanging, taking too long, or otherwise causing problems. ============================================================================ A-Shell Release Notes Version 6.5.1671.4 (02 December 2019) ============================================================================ 1. CSV2XL 2.1(242) Bug fix - formatting issue with the SetBanner directive 2. CSV2XL 2.1(243) Enhancement - new directive: //XL,SetGroup,rowfirst=##,rowlast=##{,collapsed}{,summary{=#}} This directive creates a row group that can be collapsed or expanded. If the collapsed argument is specified, the group will be initially collapsed when viewed in the spreadsheet application; else expanded. The summary option determines whether the spreadsheet app should allow for a summary line and where (above or below). Specifying the summary argument by itself, or summary=1, puts the summary below the group; summary=-1 puts it above. Note that you have to create the summary line yourself and insert it in the proper order. For example, Conference,Team,Wins,Payroll($M) AFC,Ravens,10,87 AFC,Patriots,10,79 AFC,Bill,9,82 //XL,SetGroup,rowfirst=2,rowlast=4,collapsed,summary AFC,"","",=SUM(D2:D4) NFC,49ers,10,93 ... In the above example we have column titles and 3 data rows, followed by the SetGroup directive (after the data rows it relates to). Following that is the summary line for the group, and then the start of another group. 3. AXL enhancement: Add summary argument to the Fn'LibXL'SheetGroupRows() and Fn'LibXL'SheetGroupCols() functions. See libxl. 4. LibXL.dll 3.8.8 bug fixes and refinements: reduced memory consumption for files with a lot of strings; improved performance; fix a critical bug with loading some xlsx files in 3.8.6. 5. Compiler refinement (edit 922): attempting to use the .ISNULL() function with a non-string argument now generates an illegal expression error. Side note: although this addresses one mistaken use of .ISNULL(), it doesn't address the case where the argument is a string or structure variable but is less than 6 characters long. For example, this works: IF .ISNULL($MAP(A$)) THEN ... ! good but this only works if VAR is an S or X type (or structure) at least 6 bytes long: VAR = $MAP(A$) IF .ISNULL(VAR) THEN ... ! only good if sizeof(VAR)>=6 6. XTREE (ATE) bug fix: when editing cells containing a background cell color byte (cformat B), changes to the cell were potentially resulting in the answer array (sent back to the host application) being prematurely truncated. ============================================================================ A-Shell Release Notes Version 6.5.1671.3 (28 November 2019) ============================================================================ 1. INFLD refinement: increase max size for multi-line GUI control from 1K to 4K. ============================================================================ A-Shell Release Notes Version 6.5.1671.2 (14 November 2019) ============================================================================ 1. Fix INFLD bug with inability to type into ||s combo fields (introduced in 1671.0). ============================================================================ A-Shell Release Notes Version 6.5.1671.1 (13 November 2019) ============================================================================ 1. Close loophole in .CLEAR ARY() in which it may have been possible to clear an array, then use REDIMX ARY(X) and recover the contents. 2. SftTree_IX86_U_75.dll update to 7.5.3.0 (column width optimization now takes the header filter buttons into account; other minor technical/ compatibility fixes.) ============================================================================ A-Shell Release Notes Version 6.5.1671.0 (08 November 2019) ============================================================================ 1. CSV2XL.SBX 2.1(240) fixes a problem the headers not getting scroll-locked in multi-sheet workbooks when using /XL,SetBanner. (Only the banner line was being locked.) 2. CSV2XL 2.1(241) Enhancement - New directive: //XL,AddFootnote,{text=}text{,title=text} Footnotes are useful for providing explanatory details about how the data in the spreadsheet was compiled. The AddFootnote directive can appear multiple times anywhere in the file. Each instance of adds a footnote to the bottom of the current sheet. If no title is specified, the default title "Footnotes:" will be used. For example, //XL,AddFootnote,1) This is footnote #1 //XL,AddFootnote,"2) Data source: Manny, Moe and Jack" The above pair of directives would cause the following to be added to the bottom of the current sheet, below any totals: + Footnotes: The actual footnotes are collapsed within the group; clicking the "+" will expand them to show: Footnotes: 1) This is footnote #1 2) Data source: Manny, Moe and Jack Notes: - Footnotes will appear in the order the corresponding directives appear. - There is no automatic formatting or numbering. (Supply your own.) - Make sure to quote the footnote in the directive if it contains commas. 3. INPUT CSV refinement: the statement will now automatically recognize the pipe character "|" as a delimiter (along with comma, tab, colon, and semi-colon). 4. New MIAMEX function: xcall MIAMEX, MX_FILETIMES, fspec, op {status {,mtime {,ctime {,atime}}}} MX_FILETIMES provides a way to set a file's last modification time (mtime), creation time (ctime), and/or last access time (atime). Setting the mtime of a file is equivalent in the UNIX world to using the touch command on the file. For convenience, the function can also retrieve the file times (overlapping functionality already provided by MX_FILESTATS). Parameters: fspec (str) [in] - native or AMOS-style file specification of file op (num) [in] - 0 to get the current times, 1 to set them status (signed num) [out] - returns 0 for success, else an error code (file not found, etc.) mtime, ctime, atime (T_FILETIME or B,4) [in/out depending on op] - UNIX-style file times, i.e. seconds since "the epoch" (midnight Jan 1, 1970). (Same format used for MX_FILESTATS.) When op = 1 (set), any time parameters either omitted or set to 0 will result in no change to the corresponding time attribute; -1 (or &hffffffff) may be used as a shortcut for the current time. Notes: - T_FILETIME is defined in ashinc:types.def as B,4 - You can use the MX_FTFORMAT function to convert these time values to other formats. - To convert other time formats to the T_FILETIME format, you can use the SOSLIB function Fn'Date'Time'tO'FILETIME() function (fndatetime.bsi). - The operating system may impose limits and/or perform cleanup on your attempts to set file times. For example, in the UNIX world, the ctime value isn't really the "creation" time but the time that the file's metadata was last changed, and there is no direct way to change it. However, changing either the mtime or atime will indirectly set the ctime to match. Examples: Set the modification time of the file fspec$ to the current time. Note that the literal -1 will be auto-converted to the T_FILETIME (B,4) format: xcall MIAMEX, MX_FILETIMES, fspec$, MXOP_SET, status, -1 Get the mtime and ctime and display the mtime in human readable form: xcall MIAMEX, MX_FILETIMES, fspec$, MXOP_GET, status, mtime, ctime xcall MIAMEX, MX_FTFORMAT, mtime, strtime$ ? "Last mod time of ";fspec$;" was: ";strtime$ 5. Compiler refinement (edit 921) - optimize the runtime code generated by trace statements of the forms: DEBUG.PRINT TRACE.PRINT (level,tags) The optimization adds a few bytes to the RUN code for each statement, but eliminates nearly all of the overhead associated with runtime evaluation in the caes where where no DEBUG level or tags have been set (as would be typical for most production environments). Previously, the overhead, while small, was enough to become significant when such statements were embedded in code executed in tight loops. This partially undermined the advantage of being able to insert many such traces into code so that they could be activated selectively for debugging purposes. Note while the optimization requires runtime version 6.5.1671.0+ to be effective, it will continue to run with older runtimes (but without the benefit of the optimization). ============================================================================ A-Shell Release Notes Version 6.5.1670.3 (01 November 2019) ============================================================================ 1. Correction to 1670.2 fix for XTREE sorting. Was failing to perform the initial sort under certain conditions. ============================================================================ A-Shell Release Notes Version 6.5.1670.2 (31 October 2019) ============================================================================ 1. Refinement to the secure password feature to make the reveal button only available after the password has been changed and while it is still being edited. 2. Refinement/fix to the XTREE HdrClickExit feature so that it now returns the xtr'columnsort() and xtr'sortorder() arrays as if sorting had occurred. ============================================================================ A-Shell Release Notes Version 6.5.1670.1 (30 October 2019) ============================================================================ 1. Auto-enable the secure password in the ATE configuration dialog. (ATE only.) ============================================================================ A-Shell Release Notes Version 6.5.1670.0 (30 October 2019) ============================================================================ 1. INFLD enhancements to password handling in GUI environments: password data now encrypted within the edit control, preventing it from being snooped on by external system utilities. To help manage the feature, two new TYPE codes have been defined: ||* (enable) |* (disable) Eventually the feature will become enabled by default, but initially during beta testing, it has to be explicitly enabled. (The recommended way to do this is by adding SBR=INFDEF:||* to the MIAME.INI, or use the SET INFDEF command from the dot prompt for ad hoc testing.) The feature only applies when the following TYPE codes are also set: S (security field) |G (GUI) |E (field remains displayed as a edit control when inactive) When all of the conditions have been met, password edit controls will exhibit the following behavior: - The contents are encrypted as they are loaded into the control and decrypted as read back out again. - You can TAB through the field without changing it, but any data entry into the field will first clear it. (So you can't just change or add a single character to an existing password field.) - An "eye" icon will be displayed at the end of the field. Clicking down on the icon reveals the password, clicking back up re-masks it. Note that due to some display-related mysteries within the implementation of the Windows edit control, the eye may not always be visible; in such a case, moving the mouse over the end of the field should redisplay it. 2. INFLD bug fix: TYPE ||P was only supporting MX_PWCRYPT mode 2. It now supports mode 1 as well. (Mode 3 support still pending.) 3. XTREE bug fix: HdrClickExit was sorting the column before exiting. It now exits without sorting (leaving it entirely up to the application). 4. XTREE refinement: when using the XTUCFG_SRTORD flag in the XTR'USRCFG parameter to save/restore the user's sort order settings, the reset command (either CTRL / or $RESETCFG from the PopupMenu) now restores the sort order as specified in the XTR'COLUMNACTIVE, XTR'COLUMNSORT() and XTR'SORTORDER() parameters passed in the XCALL XTREE. 5. Compiler refinement (edit 920): the minimum run version stored in the program header (see compiler edit 896 in 6.5.1657.0) now distinguishes between two variations of the .CLEAR statement: .CLEAR $MAP() ! (collections) minimum vrsion is 1354 .CLEAR MAP() ! (mapped or DIMX array) minimum version is 1624 Previously it was setting the minimum version in both cases to 1624. The point is largely moot since the minimum version for running any program containing the new header type is 1657, but it was creating confusion as to whether such a program could be run if the header was removed (using the /F1 switch). 6. AXL (Windows) update: version 3.8.6.1 of the libxl.dll includes several minor bug fixes and refinements. 7. CSV2XL.SBX 2.1(239) fixes a problem with for //XL,SetCol directive parameter option "formatid=NUMFMT_xxx" (particularly NUMFMT_TEXT) where the format may have reverted back to NUMFMT_GENERAL, depending on the analysis of the actual data. 8. Licensing bug fix: close an obscure GPF loophole in the licensing code. ============================================================================ A-Shell Release Notes Version 6.5.1669.0 (15 October 2019) ============================================================================ 1. Language enhancement: new statement: XUNLOKR #ch, recno This variation of the UNLOKR statement, parallel in concept to the XREAD and XWRITE variations of READ and WRITE, takes an explicit record number expression rather than implicitly getting the record number from the variable associated with the file OPEN statement. Note that the appearance of XUNLOKR in a program will set the minimum version requirement in the RUN header to 1669. ============================================================================ A-Shell Release Notes Version 6.5.1668.3 (02 October 2019) ============================================================================ 1. XTREE bug fix: disabling the AutoFilter due to insufficient memory (see 1668.2 below) was resulting in an editable column mismatch error in trees with a filter status column. 2. ASHNET.DLL 1.13.168 relinked with updated library components for various low level bug fixes/refinements to web protocols HTTP, SFTP, FTP, etc. 3. ISMBLD.LIT/SBX 2.1(145) bug fix: specifying a device in the initial filespec (e.g. ISMBLD DSK3:MYFILE) was resulting in the device being embedded into the IDX. This was harmless and maybe even desirable, except that if the file pair got moved, it would then cause a location mismatch. ============================================================================ A-Shell Release Notes Version 6.5.1668.2 (26 September 2019) ============================================================================ 1. XTREE bug fix: Close a loophole that in some cases prevented a progress dialog specified in XTR'DELCTLID from being removed. 2. XTREE refinement: If unable to allocate sufficient memory for the AutoFilter operation in a very large tree, it now disables the AutoFilter for the current tree. (Previously it crashed.) 3. XTREE refinement: CTRL_SHFT_+/- (expand/contract all) is now sensitive to the level of the current item. When expanding, it only expands items at that level that are visible (along with all of their dependents.) When contracting, it only contracts from the current level down. So for example, to make the top 2 levels visible but none below that, start with CTRLSHFT+ on a top level item (to expand all), then CTRLSHFT- on a 2nd level item (to contract the levels below that). ============================================================================ A-Shell Release Notes Version 6.5.1668.1 (24 September 2019) ============================================================================ 1. XTREE bug fix: resolve a conflict between AutoFilter and ListX. ============================================================================ A-Shell Release Notes Version 6.5.1668.0 (19 September 2019) ============================================================================ 1. ATE refinement: streamline the delivery of type 2 server-based ATE licenses to the client (shaving dozens of milliseconds from the initial handshake, and eliminating one source of intermittent licensing failures). 2. Compiler refinement (edit 918) : the shortcut operators += and -= now work with collections. Adding/subtracting collections was implemented in 6.5.1650, but the compiler was recognizing only the long form of the assignment, e.g. $map1() = $map1() + $map(2). 3. New LOGROLL.LIT command added to the release. Usage: .LOGROLL wildspec/switches Switches affecting user interface: /Q Query (prompt) for confirmation on each file /F Force confirmation (roll over without asking) Switches limiting selection of files to roll over: /MINDAYS:### Roll over only files not modified in at least ### days /MINSIZE:#### Roll over only files larger than #### blocks Switches limiting number of generations of rolled-over files kept: /MAXDAYS:### Discard rolled-over copies beyond ### days old /MAXGENS:### Discard rolled-over copies beyond ### generations Notes: Retention of rolled-over copies stops after MAXDAYS or MAXGENS, (whichever comes first). Defaults: DAYS=unlimited, GENS=5 If GENS < 100, rolled-over copies will use extension x## (where x is the first character of the original extension) Else rolled-over copies will use extension ### (001,002,...) 4. CSV2XL 2.1(233) Enhancement - New directive: //XL,AddComment,row=##,col=##,text=text{,width=pixels}{,height=pixels} Note that as of LIBXL 3.8.5, this directive is ignored for XLSX format, i.e. is only supported for XLS format. 5. CSV2XL 2.1(234) Enhancement: new parameters to the //XL,SetCol directive: total (forces column to be totaled) nototal (disables totals for the column) These override the ColTitleTextRegex directive in the CSV2XL.INI file, as well as the default rules (which are to total numeric columns). 6. CSV2XL 2.1(235) refinement: remove warning about "non-date/time" previously generated by empty cells in date and time columns 7. CSV2XL 2.1(236) refinement to the AddSheet directive: extension may now be eliminated from the directive in order to allow the current output format to set the standard extension. Previously you had to specify either xls or xlsx which would then cause problems if the actual format didn't match. 8.CSV2XL 2.1(237) bug fix: date and time formats were getting corrupted in some cases due to confusion between the format set in a SetCol directive and the format determined by examining the actual column data. (Since dates and times are normally encoded in a standardized binary format in order to allow the spreadsheet program to sort and/or reformat them, encoding non date/time values in date/time format results in unintelligible values.) 9. CSV2XL 2.1(238) enhancement: New directive: //XL,SetBanner,text= When set, the banner occupies the first row of the spreadsheet, above the headers, with the text centered in a bold 12 point font. (All of the columns are merged so at to make a single wide column for the banner.) This is a good way of displaying a spreadsheet title or other identifying information about the spreadsheet, such as dates, selection criteria, etc. Note that the SetBanner directive, if used, must appear after any AddSheet directive and before the headers. For example: //XL,AddSheet,sheetname=Frozen,color=COLOR_CORAL_CF //XL,SetBanner,text=Frozen Aged Inventory as of 09/21/19 Code,Description,Qty,NetWt,0-6,7-13,14-20,21-27,28-34,35+ //XL,SetCol,colfirst=5,collast=10,width=7,formatid=NUMFMT_NUMBER_SEP ... 10. SftTree_IX86_U_75.dll update to 7.5.2.2 (minor technical/compatibility fixes.) ============================================================================ A-Shell Release Notes Version 6.5.1667.2 (12 September 2019) ============================================================================ 1. APEX refinement: independent viewer sessions no longer count against the MAXINST limit. (Believe it or not, some users deliberately like to keep a dozen or more of these previous window open at the same time, and that should have no bearing on the application itself.) 2. Logging refinement (Linux): MSGBOX.SBR calls using MBICON_QUESTION are no longer logged to the ashlog. (Only MBICON_STOP or MBICON_EXCLAMATION trigger the logging.) 3. PDFX bug fix: Email.Subject lines containing a colon were losing the part of the subject prior to the colon. ============================================================================ A-Shell Release Notes Version 6.5.1667.1 (10 September 2019) ============================================================================ 1. Refinements to the xMASCB hook support. Change the hook log version from version 1 to version 2. ============================================================================ A-Shell Release Notes Version 6.5.1667.0 (09 September 2019) ============================================================================ 1. DYNLIB enhancement: new argument type "P" acts similarly to "p" but receives the size of a ">" argument. Useful for functions that return a pointer to a buffer in one argument and the size of the buffer in another. (The new AXL function Fn'LibXL'GetPicture uses this technique.) 2. Support file hooks in the xMASCB.SBR routines. ============================================================================ A-Shell Release Notes Version 6.5.1666.0 (05 September 2019) ============================================================================ 1. XTREE enhancement: ability to limit the Auto-Sum feature (introduced in 6.5.1631.0) to specific levels in a multi-level tree. As with the regular Auto-Sum feature, it is activated by inserting one of the following tokens into the header (or more typically, the footer part of the header): =SUM ! standard auto-sum =SUMLVL(#) ! auto-sum just level # =SUMLVL(#,#,...#) ! auto-sum the specified levels The last level in the parenthesized list may have a "+" appended to it, e.g. =SUMLVL(#,#+) indicating all of the levels from the specified one down. So for example, =SUM(0,2+) would include all levels except level 1. This example includes levels 0, 1 and 2 in the Auto-Sum: coldef += "20~10~Qty::=SUM(0,1,2)~#E~~ 2. (Windows) enhancement: new command line switch -dpm activates "Dpi Per Monitor awareness" mode. This is a first pass attempt at conforming to new Windows 10 High Res scaling requirements. ============================================================================ A-Shell Release Notes Version 6.5.1665.4 (30 August 2019) ============================================================================ 1. Compiler bug fix (edit 917): eliminate spurious "exceeded 512K limit" error on DATA statements when used in conjunction with some newer features. ============================================================================ A-Shell Release Notes Version 6.5.1665.3 (28 August 2019) ============================================================================ 1. XTREE enhancement: further extend (see 1665.0) the range of RGB color indices from ASCII 35 (#) to ASCII 125 (}). Note that "=" remains a special value which forces the default color to be used. 2. Compiler bug fix (edit 916): static functions which were called only by dynamic functions were getting shaken out by the /PX algorithm. ============================================================================ A-Shell Release Notes Version 6.5.1665.2 (27 August 2019) ============================================================================ 1. Compiler bug fix (edit 915): the presence of a single Dynamic function was disabling the /PX removal of un-called functions. (It now only ensures that no Dynamic functions are removed, since we can't be sure if they are called dynamically.) ============================================================================ A-Shell Release Notes Version 6.5.1665.1 (26 August 2019) ============================================================================ 1. (Windows) GDI/PDFX bug fix/refinement: Remove the 512 byte limit on the overall length of individual //GDI (including //PDFX) directives. Note that this affects only the overall length of a single //GDI directive; it does not affect any existing limits on the length of individual parameters. Also note that previously the PDFX doc indicated (incorrectly) that the limit on an Email.Content directive was 1024. 2. Compiler refinement (edit 914): Add comment marker (!) to "{shaken out by /PX}" notations in the LSX file for ease of recompiling from the LSX. ============================================================================ A-Shell Release Notes Version 6.5.1665.0 (15 August 2019) ============================================================================ 1. XTREE enhancement: extend the limit on the number of defined RGB colors indices (previously limited to A-Z and a-z for 52 total), to include 0-9 (for 62 total). ============================================================================ A-Shell Release Notes Version 6.5.1664.4 (11 August 2019) ============================================================================ 1. Compiler bug fix (edit 913): TRACE.xxx statements were not allowing additional statements on the same line (using colon separators). Not that we'd like to encourage the anachronistic practice of jamming several statements together on a single line (presumably for the purpose of sharing a single THEN or ELSE clause), when it is much cleaner to use the multi-line IF/ENDIF construction. But technically it should be legal. 2. ATE refinement: the contents of the ATECACHE directory are now cleared only upon exit of the last instance of ATE (or A-Shell/Windows) running within the same client memory context. Previously it was cleared on each instance exits, potentially creating a conflict or inefficiency for other instances sharing those cached files. (Note that in some server contexts like RDP, it may not be possible for the ATE client to detect other instances due to memory sandboxing, in which case this change will have no effect.) ============================================================================ A-Shell Release Notes Version 6.5.1664.3 (05 August 2019) ============================================================================ 1. Checkbox bug fix: clicking on a checkbox now processes the auto-click event prior to sending the keyboard command. This fixes a problem introduced in 1634.3 in which clicking on a checkbox while another control (particularly XTREE had the focus) was failing to auto-toggle the checkbox state. 2. Compiler bug fix (edit 912): The /PX switch was causing .GLBI (and previously CMPGLOBAL.TMP) temporary files to be left behind. ============================================================================ A-Shell Release Notes Version 6.5.1664.2 (30 July 2019) ============================================================================ 1. Compiler refinement (edit 911): The temporary file used to hold a GLOBAL_BEGIN/END block now uses a source-file-specific name .glbi instead of the fixed name cmpglobals.inc. This resolves a conflict with running multiple simultaneous compilations in the same directory. 2. CGIUTL bug fix: the HTML unescape routine was converting "<" characters after the first one to "[" as an ill-advised defense against HTML injection hacks. (It falls back on your application to be careful not to send potentially dangerous HTML sequences back to the browser.) Same patch in 6.4.1558.8. ============================================================================ A-Shell Release Notes Version 6.5.1664.1 (25 July 2019) ============================================================================ 1. Bug fix: AG_XFUNCS return values were not being transmitted from the client back to the host correctly. (Problem introduced in 1661.6) ============================================================================ A-Shell Release Notes Version 6.5.1664.0 (24 July 2019) ============================================================================ 1. New MIAMEX function MX_FILEVAR (195) gets or sets the value of the file record number variable (and in the case of ISAMA, the stats variable). Syntax: xcall MIAMEX, MX_FILEVAR, op, ch, sts, recno {,stat} where: op (num) [in] specifies 0 for get, and 1 for set ch (num) [in] is the file channel sts (signed num) [out] - returns 0 for success, -1 if file ch not open, or -2 for unsupported file type recno (num) [in/out] - the value of the record number variable (associated with the file in its OPEN statement) to be retrieve or set. stat (num) [in/out] - the value of the stat variable (associated with the file in its OPEN statement) to be retrieve or set. Comments 2. XTREE CB autofilter refinement: adjustment to the way cell values are grouped into checkbox options to better handle values with leading spaces. Also, increase the checkbox dialog width to better accommodate longer values. 3. Refinement to the scanning and selection of available ATE setup modules: Now it selects the newest version; previously when both monolithic and -web modules existed, it chose the -web module regardless. ============================================================================ A-Shell Release Notes Version 6.5.1663.1 (22 July 2019) ============================================================================ 1. XTREE bug fix (ATE client side only): an interaction between the TotalLines option, XTROP_REPLACE, and row update optimization protocol in sortable trees was leading to duplication a line when adding a row and increasing the number of TotalLines at the same time. =================================================== ======================== A-Shell Release Notes Version 6.5.1663.0 (14 July 2019) ============================================================================ 1. Compiler enhancement (edit 910): new ++pragma provides a way to assign a name to the LSX file that includes the vedit field of the program version: ++PRAGMA LSX_FSPEC "filespec" where "filespec" can be an A-Shell-style or native filespec, optionally including the following special macros: %s program source name (without directory or extension) %v the vedit field of the PROGRAM statement (or zero if not avail) For example: PROGRAM FOO,1.0(245) ... ++PRAGMA LSX_FSPEC "LSXARC:%s-%v.LSX" If the program above is compiled with the /LF switch, the LSX file will be named LSXARC:FOO-245.LSX. Notes: - The ++PRAGMA does not by itself activate the /LF switch. - The ++PRAGMA may appear before or after the PROGRAM statement. - The ++PRAGMA has no effect if compiling an LSX file (in which case the list file will have the same name as the LSX source file except with an LSY extension. - If the filespec in the ++PRAGMA statement does not specify an extension, LSX is assumed. ============================================================================ A-Shell Release Notes Version 6.5.1662.6 (14 July 2019) ============================================================================ 1. XTREE bug fix: close a loophole in which clicking on an editable cell in an tree that isn't currently active was sometimes resulting in the wrong cell getting the focus, possibly even with that cell's data then getting written to the originally targeted cell. ============================================================================ A-Shell Release Notes Version 6.5.1662.5 (11 July 2019) ============================================================================ 1. (Linux) Refinement: AXL library module (libxl.so) now supports up to version 3.8.5 (previous limit was 3.7.2). Numerous minor improvements and bug fixes, particularly in the area of XLSX support. 2. (ATE client) XTREE bug fix: Close a loophole in which image resources might be prematurely deleted during a XTROP_REPLACE operation using the ATE row optimization protocol (which eliminates transferring and updating rows from the server to the client that haven't changed.) ============================================================================ A-Shell Release Notes Version 6.5.1662.4 (08 July 2019) ============================================================================ 1. DIR.LIT 3.4(169) enhancement: support for /LT and /P switches 2. Hex conversion bug fix (Linux platform only) - conversions from hex format strings, e.g. val("&h00aaf18c") were sometimes producing wildly incorrect results. 3. XTREE bug fix: certain clicks on inactive trees were failing to send the activation string, resulting in the control being given the focus without the application realizing it. 4. Further refinement to TotalLines, so that setting TotalLines to a non-zero value and then later removing the TotalLines clause from the coldef during a replace operation now always clears the setting. ============================================================================ A-Shell Release Notes Version 6.5.1662.3 (02 July 2019) ============================================================================ 1. XTREE bug fix: calling XTREE with TotalLines=N (N>0) and later calling the same tree using XTROP_REPLACE but with TotalLines=0 was effectively leaving the TotalLines values set to 1 instead of 0. Note that the XTF_TOTALS flag, while still supported, is now deprecated and has no other purpose than to set the default value of the TotalLines option to 1. ============================================================================ A-Shell Release Notes Version 6.5.1662.2 (29 June 2019) ============================================================================ 1. AUI_CONTROL bug fix: the MBST_CENTER option was not working properly when the parent object was in negative coordinate space (i.e. to the left of or above the primary monitor). 2. Compiler bug fix (edit 909): it was failing to recognize the new LSX headers (causing total failure to be able to recompile LSX files). 3. Tracing refinement: increase max size of each generation of the ashlog log file from 3MB (Windows) or 5MB (Unix) to 10MB. ============================================================================ A-Shell Release Notes Version 6.5.1662.1 (25 June 2019) ============================================================================ 1. Memory corruption bug fix: close a loophole that was allowing corruption in rare cases on return from an SBX if the SBX moved a shared memory block. ============================================================================ A-Shell Release Notes Version 6.5.1662.0 (24 June 2019) ============================================================================ 1. Increase internal maximum filename.ext length for AMOS-compatible files to 72 for the filename and 8 for the extension. Previously the limit was 10.3 for ambiguous contexts (where it wasn't otherwise obvious if the filespec was meant to be AMOS-style or native-style), and 32.8 for MX_FSPEC conversion operations where the context was explicit. 2. Several LIT commands updated to support the increased maximum length of AMOS-style filenames: DIR.LIT 3.4(167) COPY.LIT 3.4(133) MOVE.LIT 3.4(133) PRINT.LIT 3.4(135) ERASE.LIT 3.4(134) RENAME.LIT 3.4(117) ZTXFER.LIT 1.4(109) In addition to recognizing longer filename using AMOS-style syntax (e.g. with device or ersatz prefix, [p,pn] suffix), DIR.LIT also supports an expansion of the existing /L{ONG} switch to specify the desired display width. For example: DIR /L ; display using 10.4 format DIR /L:30 ; display using 30.4 format DIR /L:50.6 ; display using 50.6 format 3. ASHNET library update 1.13.166: FTP2 enhancement: new opcode XFTPF_DIR (&h00400000), in conjunction with XFTPF_SFTP, allows you to create a local directory listing of a remote directory. The xcall parameter usage is similar to that for XFTPF_GET, with localpath specifying the filespec of the directory listing, which will be created in CSV format as follows: "file.ext",type,permissions,owner,group,size,"ctime","mtime" Comments: The hostfile and hostdir parameters must specify the remote directory; filecards are optional. (*.* will be assumed if hostfile="".) The host directory is not included in the "file.ext" field in the CSV directory listing. The type field will be one of the following: regular,directory,symLink, special,unknown,socket,charDevice,blockDevice,fifo The owner and group fields will be empty if the server does not support SFTP v4+. The "ctime" (creation time) and "mtime" (last modification time) fields will be in RFC822 format, e.g. "Mon, 17 Jun 2019 17:40:32 -0700". See the SOSLIB module fndatetime.bsi Fn'Date'To'xxxx() functions for handy conversions from RFC822 (and many other) date formats. The implementation is entirely within the ashnet.dll (or libashnet.so.1) library module and is not dependent on any particular A-Shell version. 4. ASHNET library update 1.13.167: FTP2 enhancement: new opcode XFTPF_RENAME (&h00800000), in conjunction with XFTPF_SFTP, allows you to rename a remote file or directory. Use the same parameter list as for the other opcodes, except: localpath should specify the old file or directory name hostfile should specify the new file or directory name hostdir should be set to "" On return the status parameter will be set to 1 on success. 5. Bug fix: close a potential GPF or segmentation fault loophole in the return from an AG_XFUNC or MX_AGWRAPPER operation. 6. Compiler bug fix (edit 908) - fix failure to allow IFE() and IFE$() functions within relative expressions, e.g. IF IFE$(A$,B$) = C$ ... ============================================================================ A-Shell Release Notes Version 6.5.1661.3 (06 June 2019) ============================================================================ 1. Error handling bug fix: close a loophole through which a BASIC error during evaluation of an expression, e.g. subscript out of range, might lead to a subsequent spurious floating point overflow error. Error was introduced on or about 1645 (Aug 2018). 2. CSV2XL.SBX 2.1(231) bug fix: the presence of a formula in an otherwise numeric cell was causing the column to be mis-classified as text. 3. CSV2XL.SBX 2.1(232) bug fix: //XL,SetPrint,repeatrows=#,repeatcols=# was failing to work properly in a variety of ways. 4. CSV2XL.SBX 2.1(232) enhancement: - Add hcenter and vcenter options to the //SetPrint directive, e.g. //SetPrint,vcenter{=1},hcenter{=1} Note that the =1 is optional (1 for on, 0 for off), but since there is little reason to ever specify the attribute except when turning it on, it isn't really necessary to specify the attribute value. ============================================================================ A-Shell Release Notes Version 6.5.1661.2 (21 May 2019) ============================================================================ 1. Compiler bug fix (edit 907) - .sizeof(var) was generating spurious variable not found errors for defstruct references in isolated cases. (Introduced in compiler edit 902.) ============================================================================ A-Shell Release Notes Version 6.5.1661.1 (17 May 2019) ============================================================================ 1. Compiler bug fix (edit 906) - .sizeof(var) was generating spurious variable not found errors under a certain situations. (Introduced in compiler edit 902.) ============================================================================ A-Shell Release Notes Version 6.5.1661.0 (16 May 2019) ============================================================================ 1. AXL (Windows) update: version 3.8.5.2 of the libxl.dll includes several minor bug fixes and refinements. Warning 1: This update of AXL (both libxl.dll and libxl.bsi) are not compatible with earlier versions of A-Shell/Windows prior to 6.5.1661. The updated A-Shell however is compatible with older version of the library. Warning 2: The parameter lists of some of the library functions have changed. To be sure of continued compatibility, you should recompile any AXL-dependent programs using the updated LIBXL.BSI interface module. 2. LIBXL.BSI [131] update: several fixes, refinements, enhancements: - Increase the stack size (needed for libxl.dll 3.8.5+) - Support changes to the calling signatures of some existing functions. - Add sheet parameter default to definition of several Sheet-related functions so it can be omitted in case of a single sheet workbook. - Add tempfile$ parameter to LoadBook and SaveBook function (may reduce memory requirements for very large files). - Add optional sheetindex, firstrow and lastrow params to the LoadBook() function to allow loading a partial file - Add SheetSetTabColor() - Add lastrow option to SheetSetRow() to operate on a range of rows. - Add password and enhanced options to SheetSetProtect() - Add NamedRange functions - Add option to GetColWidth() and GetRowHeight() to return size in pixels. - Fix problems with the fit-to-cell scaling option in SheetSetPicture() and SheetSetPicture2(). 3. Compile refinement (edit 903) - .SIZEOF() now supports DEFTYPE names, e.g. .SIZEOF(BOOLEAN). 4. CSV2XL.SBX 2.1(230) enhancements: - //XL,AddSheet now supports an optional parameter COLOR=COLOR_xxx to set the tab color. - Set wrap attribute for column headers 5. Compiler bug fix (edit 904) - Resolve an issue with MX_DYNSTRUCT in which source files with multiple DEFSTRUCTS containing MAP1 statements may have led to corrupted extents of array members of the target structure. 6. New MIAMEX function MX_GETWINFILEVER (194) to retrieve version of a Windows DLL or executable: xcall MIAMEX, MX_GETWINFILEVER, file$, vmajor, vminor, vbuild, & vpatch, status where: file$ (str) [in] Specifies the executable or DLL to retrieve the version info from. If no explicit path given, the search path is the same as it would be for loading that kind of file. vmajor, vminor, vbuild, vpatch (num) [out] These will be updated with the parts of the version information from the specified file$. All but vmajor are optional. status (signed num) [out] (optional) Returns operation status: 0 = success -1 = unable to locate file -2 = unable to read version resource -3 = memory allocation failure -4 = premature end of version string (must contain at least three parts - vmajor, vminor, vbuild) 7. Compiler language enhancement (edit 905): new compiler functional directive .EXTERN(expr), when used within a function or procedure, changes the normal scope search rules (first local, then module, then global) for the enclosed variable or expression, to consider only global variables. For example: map1 state$,S,20,"Ignorance" ... Function Fn'Foo() as i4 map1 state$,S,.sizeof(.extern(state$)) ! S,20 state$ = "Bliss" ! assign local state$ print .extern(state$);" is ";state$ ! Ignorance is Bliss EndFunction In the above function, there are references to two variables named state$; one local to the function and one global. Normally, the scope rules would give the local variable precedence, even if ++pragma auto_extern or an explicit ++extern state$ directive was specified. The use of the .extern() functional directive allows the function to selectively and explicitly refer to the global version of the variable. ============================================================================ A-Shell Release Notes Version 6.5.1660.7 (08 May 2019) ============================================================================ 1. Compile refinement (edit 902) - .SIZEOF(VAR) was not respecting scope, (i.e. was finding global VAR when it shouldn't.) 2. ATE bug fix - extend patch introduced in 1660.2 to apply to other client- side functions XTREE, XTEXT, INFLD. (Solves, among other problems, the delay and subsequent error when launching the ATE print screen utility from within an XTREE, XTEXT or INFLD call. ============================================================================ A-Shell Release Notes Version 6.5.1660.6 (06 May 2019) ============================================================================ 1. Stack overflow bug fix: Use of the IFE() / IFE$() function was inhibiting the automatic expression stack cleanup, which, depending on the subsequent sequence of operations, could lead to a stack overflow error in another statement. 2. CSV2XL.SBX 2.1(227) enhancement: new directive to set print features: //XL,SetPrint,attribute=value,attribute=value,... where the possible attributes and values are: orientation=landscape or portrait (default portrait) - Set initial orientation when printing header= - Set print header text. May contain special ¯os: &L Start of left-justified section &P Current page # &N Total # of pages &## Specify font size (## points), e.g. &14 &S Set strikethrough text attribute &Y Set subscript text style &C Start of the center-justified section &D Current date &T Current time &U Set underline text attribute &E Set double-underline text attribute &R Start of the right-justified section &Z Workbook file path &F Workbook file name &A Current sheet name &"font" Font, e.g. &"Times New Roman" &B Set bold text attribute &I Set italic text attribute && Literal ampersand footer= - Set footer text. Same set of ¯os as for header hmargin= fmargin= lmargin= tmargin= rmargin= bmargin= - Set the header, footer, left, top, right and bottom margins repeatrows=<#> - Set # of rows to repeat at top of each page repeatcols=<#> - Set # cols to repeat at left edge of each page Notes: All of the above attributes affect the current page, and thus should be specified after the page is initiated. For example, they might come after the first row data on the page. Warning: Excel seems rather persnickety about the details of the column headers when the repeatrows option is used, possibly resulting in some spurious complaint when loading the file. (If you experience this, try turning that option off.) 3. AXL library update (libxl.bsi) [128] adds commands to set the margins and the print repeat feature. ============================================================================ A-Shell Release Notes Version 6.5.1660.5 (29 April 2019) ============================================================================ 1. XTREE bug fix (client-side) : the export to CSV or CSV2XLS options were failing to encode embedded characters so that Excel (or most other CSV importers) will treat them as raw characters rather than delimiters. ============================================================================ A-Shell Release Notes Version 6.5.1660.4 (28 April 2019) ============================================================================ 1. GUI bug fix: Control auto delete logic was being incorrectly triggered when a new image control with MBF2_PIXSIZE was created above and to left of an existing image control. 2. RANDOM and old ISAM WRITEs now perform a secondary check on the file size if the specified record number is beyond the end of the file (matching the behavior of the READ routine. This addresses a rare situation where a dynamic expansion of a file by one user might result in another user getting an illegal record error writing to the expanded section of the file. 3. Compiler bug fix (edit 899): ++PRAGMA GLOBAL_BEGIN wasn't working when the source file spec was longer than 50 characters (i.e. when using native filespec notation for the program source). 4. Compiler bug fix (edit 900): In /X:1 or /X:2 mode, a FOR/NEXT loop was incorrectly starting from one STEP unit after the correct starting value if the initial expression ended with an operator with lower precedence than addition. For example, FOR I = X MAX Y TO Z was starting at (X MAX Y) + 1 rather than (X MAX Y) because MAX has lower precedence than the implicit addition or subtraction of the step value. The problem didn't affect the OCMPIL implementation of FOR/NEXT, and didn't occur if the 'from' expression was parenthesized. Same patch as 6.4.xxxx 5. Compiler bug fix (edit 901): IFELSE(relexpr,expr1,expr2), along with the IFELSE$() string version, were both treating the relexpr as being purely numeric, which after edit 890 was resulting in any string operands within the relexpr being converted to numeric prior to evaluation. This rendered string comparisons, e.g. A$ > B$ as being equivalent to VAL(A$) > VAL(B$), which had only about a 50% chance of giving the expected result. ============================================================================ A-Shell Release Notes Version 6.5.1660.3 (21 April 2019) ============================================================================ 1. XTREE (client-side) bug fix: close a loophole in which an explicit or implicit XTROP_REPLACE operation reducing the number of rows in the tree might lead to memory corruption if auto-filtering was enabled. The problem was being detected and reported in the ashlog (search for "Corrupt!" or "Cell_store anomaly") but not necessarily prevented. A new warning message has been added to ashlog to advise when the workaround (truncating the unfiltered data array to match the new smaller number of rows) is triggered. ============================================================================ A-Shell Release Notes Version 6.5.1660.2 (20 April 2019) ============================================================================ 1. ATE (client-side) bug fix: when the ATE client was on the server side of a server-client operation, such as when it was executing a client-side SBX that issued client commands requiring responses, in some cases the responses were being sent to the application server, rather than to the ATE client acting as a server. This was resulting in spurious timeout conditions in which ATE would appear to hang for 15 seconds (duration of the typical timeout), and possibly result in an application-level error (client not responding). The only known incidence occurred when exporting to XLS from XTREE, but it might have occurred in other contexts, possibly without being recognized. ============================================================================ A-Shell Release Notes Version 6.5.1660.1 (14 April 2019) ============================================================================ 1. IFE(a,b) bug fix: it was failing to take SCALE into account for the b parameter. 2. EMAILX 6.5(140) bug fix: was complaining about too few parameters if less than 11 passed, even in situations where the 11th parameter (socket) wasn't really necessary. 3. ASHNET library update 1.12.165: misc. refinements: -- When the XHTTPF_REQGET call fails, it now returns an abbreviated status message in the response parameter instead of the full library debug string. In cases where the call succeeds in connecting to the endpoint, but the endpoint service then rejects the request, the response will be an HTTP header (e.g. "415 Unauthorized"). In the case of a complete failure to connect, the response will be empty or "0". (The status parameter will give additional information, as will a subsequent call using XHTTPF_GETSTSTXT.) -- A new opcode flag, XHTTPF_REQGETX (&h01000000) has been defined to implement a more advanced version of the "GET" operation. Currently the main visible difference is that the returned reponse will be more detailed in the case of a successful connection but a failed transaction (due to some kind of logic or validation issue on the server). The HTTP.DEF file contains the updated symbol definition. -- You can now include custom headers (using XHTTPF_HDRBODY) with the string request versions of the XHTTPF_REQPOST and XHTTPF_REQGETX operations. Previously this was only possible with XHTTPF_FILEREQ (file based requests). Format the request string the same way you would the file, i.e. with CRLF between each custom header, then a blank line (terminate by CRLF), then, in the case of _REQPOST, the body of the request. (GET operations have no request body.) ============================================================================ A-Shell Release Notes Version 6.5.1660.0 (07 April 2019) ============================================================================ 1. New A-Shell command line switch -erz allows you to specify a file containing ersatz device definitions to be processed prior to any ERSATZ= statement(s) in the miame.ini file (regardless of whether the -erz switch comes before or after the -ini switch). should be in native syntax, for example: ashell -i /vm/miame/miame.ini -erz /vm/env1/test.erz This is intended to be a convenience in situations where you have multiple environments which could share a miame.ini file except for the ersatz definitions. Note that when there two or more definitions for the same ersatz device, the first one defined will take precedence. So any ersatz definitions in the file specified by the -erz command line will take precedence over any subsequent definitions. 2. Compiler refinement (edit 898): MX_DYNSTRUCT now allows DEFTYPE aliases for implicitly sized X variables. There were previously allowed, but the DEFTYPE name was lost during the runtime compilation. 3. ASHNET library update 1.12.164: refinement to HTTP.SBR to allow custom headers to be added to a GET request (XHTTPF_REQGET). Previously this was only possible with the POST request type (XHTTPF_REQPOST / XHTTPF_REQUPLOAD). To specify custom headers, set the XHTTPF_HDRBODY flag and put the new headers into the request$ parameter, using chr(13) to separate multiple headers, e.g.: flags = XHTTPF_REQGET or XHTTPF_HDRBODY request$ = "Referer: http://www.microsabio.com" request$ += chr(13) + "User-Agent: A-Shell/ashnet-1.2.164" ... xcall HTTP, 1, status, flags, url$, request$, response$, properties$ Note that you must specify at least 7 parameters (i.e. at least thru the properties$ parameter), even if the properties$ parameter is blank. (Otherwise a more limited version of the routine will be used, which doesn't support this enhancement.) You can also put the custom headers into a file, as you would with XHTTPF_REQPOST + XHTTPF_FILEREQ + XHTTPF_HDRBODY. (With the GET request, anything following the first blank line would be ignored.) Note that to examine/debug your headers, set the XHTTPF_DEBUG flag and then look at the DEBUG.LOG file on return from the XCALL. ============================================================================ A-Shell Release Notes Version 6.5.1659.0 (26 March 2019) ============================================================================ 1. Compiler fix (edit 897) and runtime fix for IFE() and IFE$() functions (see 6.5.1657). Original implementation didn't hold up when nested within other types of expressions, in particular IFELSE(). Note that the fix involves both the compiler and runtime. ============================================================================ A-Shell Release Notes Version 6.5.1658.1 (20 March 2019) ============================================================================ 1. XTREE bug fix: repeated use of the print preview operation from the $PRINT PopupMenu command within a single XTREE session was eventually crashing the A-Shell client. ============================================================================ A-Shell Release Notes Version 6.5.1658.0 (12 March 2019) ============================================================================ 1. MX_FILEHOOK enhancement: ISAM-A now supported. UPDATE'RECORD and CREATE'RECORD hooks are handled the same as WRITE and WRITEL, respectively. Use the one of the HFE_xxx_WRITE or HFE_xxx_WRITEL event flags to enable. The DELETE'RECORD hook is enabled by one of the two new event flags added to ASHINC:HOOK.DEF: define HFE_PRE_ISAMA_DEL= &h00200000 ! ISAMA pre delete'record define HFE_POST_ISAMA_DEL= &h00400000 ! ISAMA post delete'record GET'LOCKED and GET'NEXT'LOCKED are hooked like READL, while GET and GET'NEXT (without locking) are hooked like READ. Use the HFE_xxx_READL and/or HFE_xxx_READ flags to enable. ALLOCATE'INDEXED is hooked like ALLOCATE (HFE_xxx_ALLOCATE flags). A new sample program, ISMTSTH.BP, has been added to [908,50] of the EXLIB: to demonstrate/test the new ISAM-A hooks. Also see the SOSFUNC:fnhooklog.bsi module (updated for the new hook event flags). 2. XTREE bug fix: self-service combos were requiring an extra click on the "..." entry to complete the exit. (Problem was introduced in 6.5.1645). ============================================================================ A-Shell Release Notes Version 6.5.1657.0 (03 March 2019) ============================================================================ 1. Compiler enhancement (edit 895) - new functions: IFE(expr1,expr2{,flags}) IFE$(expr1$,expr2${,flags}) Without the flags parameter, these act as follows: IFE(expr1,expr2) ! if expr1 then expr1 else expr2 IFE$(expr1$,expr2$) ! if expr1$ # "" then expr1$ else expr2$ The optional flags are defined in ashell.def and may be used to alter the type of test performed on the first expression: define IFE_NB = 0 ! IFE$() default (test if expr1$ "Not Blank") define IFE_NZB = 1 ! Treat "0" same as blanks define IFE_TRUE = 0 ! IFE() default (test if expr1 TRUE) define IFE_FALSE = 2 ! Test if expr FALSE (zero) instead of TRUE For example: IFE(expr1,expr2,IFE_FALSE) ! if expr1 = 0 then expr1 else expr2 IFE$(expr1$,expr2$,IFE_NZB) ! if expr1$ # "0" and expr1$ # "" then ! then expr1$ else expr2$ Note that consistent with the way A-ShellBASIC tests for string equality, trailing blanks are not significant. IFE() and IFE$() are similar to the IFELSE() and IFELSE$() functions, except: - Whereas IFELSE/IFELSE$ uses a separate relative expression argument to decide which of the two possibilities to return, IFE/IFE$ uses the first expression both as the test expression and as a return value (if the test passes). - Unlike IFELSE() and IFELSE$() which always evaluates each of the arguments, IFE() and IFE$() do not evaluate the second expression unless the test on first expression fails (i.e. unless the second expression is to be returned.) This is particulary useful when the second expression is a function call or other complex expression with significant overhead and/or side effects.) 2. Compiler enhancement (edit 896) - The compiler now embeds into the object header an indication of the minimum acceptable A-Shell runtime version, when certain newer language features are present. Runtime versions prior to 6.5.1657 will not recognize the new header signature and will treat the RUN as invalid (i.e. will refuse to run it). From this version on, the runtime system will recognize the minimum version header and will give a more precise error, i.e. "Program requires minimum A-Shell level ####". 3. VERSYS.LIT 3.0(108) enhancement: nows recognize the new header signature and reports the minimum A-Shell version needed to run the program. Example: .VERSYS MYPROG.RUN MYPROG.RUN -- A-Shell Version & System Information: File Version: 1.0(100) Program format: 0xF276 (compil/x?; requires A-Shell edit 1657+) 4. COMPIL.LIT 1.1(136) (and OCMPIL.LIT, COMPLP.LIT) enhancement: support new switch /F1 to disable the new header signature which otherwise would be used if the program contains any features introduced in 6.5. The new signature makes it impossible to run such a program on an A-Shell version prior to 6.5.1657. The new switch may be useful in cases where even though the program contains features incompatible with an earlier A-Shell version, you know that those features will never be invoked in that environment. The switch name (/F1) comes from the fact that the older program header signature started with 0xF1, e.g. 0xF167. The new program header signature starts with 0xF2. (See VERSYS.LIT to display the signature.) ============================================================================ A-Shell Release Notes Version 6.5.1656.1 (27 February 2019) ============================================================================ 1. Compiler bug fixes (edit 894) - - Close a loophole in the ++PRAGMA TRACE_BEGIN logic that was resulting in spurious variable-not-defined errors in certain kinds of IF GOTO