============================================================================ A-Shell Development Notes Version 5.0.1000.7 (03 Jan 2009) ============================================================================ 1. --- ISAM-A 6.11k now supports IDX files > 2GB. (Previously, only DAT files were allowed > 2GB.) ============================================================================ A-Shell Development Notes Version 5.0.1000.6 (02 Jan 2009) ============================================================================ 1. --- INMEMO locking bug fix (UNIX): close a loophole in which an unexpected value for the lock-in-use status caused INMEMO to loop while waiting but without responding to ESC. Also, the XTREE trace flag now shows the failed attempts to access a locked record. 2. --- VUE bug fix (UNIX): Edit 289 fixes a problem in which the CRNL command, when entered on the command line, was not really taking effect. 3. --- Fix mixup in Victorex subroutine launch table. 4. --- Lock tracing refinement (UNIX): eliminate excessive logging of "resource temporarily unavailable" messages when application is looping/testing a locked record. ============================================================================ A-Shell Development Notes Version 5.0.1000.5 (30 Dec 2008) ============================================================================ 1. --- INMEMO tracing enhancement: setting TRACE=XTREE (or SET TRACE XTREE ON) will now output traces showing each call to INMEMO, along with the lock operations and the return codes from INMEMO. (Added to help track down a problem in one particular application.) 2. --- Victorex subroutines updated. ============================================================================ A-Shell Development Notes Version 5.0.1000.4 (07 Dec 2008) ============================================================================ 1. --- SIGHUP bugfix: close a loophole in which SIGHUP was generating Basic error 1 instead of 250 under certain circumstances. ============================================================================ A-Shell Development Notes Version 5.0.1000.3 (15 Aug 2008) ============================================================================ 1. --- EFS bug fix: random seek/write operations within streams were not being handled correctly by the stream wrappers. (Affected MX_FILEPOS operations on encrypted files.) ============================================================================ A-Shell Development Notes Version 5.0.1000.2 (14 Aug 2008) ============================================================================ 1. --- EFS update to revision 6. ============================================================================ A-Shell Development Notes Version 5.0.1000.1 (13 Aug 2008) ============================================================================ 1. --- DTPACK.SBR bug fix; wasn't handling blank dates properly. ============================================================================ A-Shell Development Notes Version 5.0.1000.0 (13 Aug 2008) ============================================================================ 1. --- Bug fix: XCALL SERCH was failing to find most keys in files that were opened directly in memory (by LOADing the file and then using OPTIONS=AUTO_MEMOPEN or the MEM: device). The problem did not affect memory mapped files or ordinary random I/O to memory-resident files. ============================================================================ A-Shell Development Notes Version 5.0.999.9 (30 Jul 2008) ============================================================================ 1. --- EFS update: modifications to support new logging functions in EFS build 112. 2. --- MX_EXPFIL fix: on error, was returning positive rather than negative values, which didn't match the documentation, and might even have been confused with file sizes for very small file expansion operations. 3. --- (AIX) ISAM-A was generating Basic error 23 (protection violation) rather than setting FSTAT to ISAM_NA (-2) when a GET'LOCKED requested a record that was already locked. (Problem only affected AIX.) ============================================================================ A-Shell Development Notes Version 5.0.999.8 (11 Jul 2008) ============================================================================ 1. --- Fix CentOS problem relating to the handling of B4 variables assigned negative values. (Same fix as in 5.1.1118.0, which see for details.) 2. --- EFS bug fix: INPUT LINEs longer than 4094 bytes were not working properly. 3. --- MIAMEX,27,CHIN,CHOUT bugfix: Contrary to the documentation, it was not supporting RANDOM files under UNIX. Now it does. 4. --- Calendar Control (ASHMONTHCAL) bugfix: Querying the control was not returning the currently set date if the control had been updated programmatically and no event such as a mouse click occurred in the interim. 5. --- MX_FILESTATS ATE refinement: When MX_FILESTATS is used to query the status of a file on the PC (via ATE), if the filespec is a UNC spec (i.e. starts with "\\"), then the timeout wait is extended from 5 to 15 seconds. This should eliminate most problems with ATE timing out before Windows times out (if the UNC spec is not available). (This situation was leading to ATE becoming unsynchronized with the server, which in some cases was leading to application confusion.) ============================================================================ A-Shell Development Notes Version 5.0.999.7 (05 Jun 2008) ============================================================================ 1. --- XTREE bug fix: The TRACE XTREE had a memory corruption loophole. 2. --- AIX I variable type arithmetic fix: Under AIX, I2 was not properly evaluating -1, and both I2 and I4 were not crossing over correctly from negative to positive when adding 1 or subtracting 1 from the maximum or minimum value. Problem did not affect little-endian platforms such as A-Shell/Linux and A-Shell/Windows.) ============================================================================ A-Shell Development Notes Version 5.0.999.6 (05 May 2008) ============================================================================ 1. --- GDI printing fix/enhancement: //XTEXT, //IMAGE, and //METAFILE will now look for the file in the same directory as the printfile itself, if not found at the location specified, even when the location specified is a UNIX path. (This was previously true, since 5.0.999, but only when the original spec was a Windows path. The new logic is mainly of use in ASHLPD or other environments where you generate the GDI printfile under UNIX and then transfer it to Windows.) 2. --- Update Celibec subroutines (in particular, add EXTRAI.SBR) 3. --- XTEXT bug fix: Setting TXC'CTLNO = -1 (to auto-select the control #) was causing memory corruption (usually leading to a crash or weird error.) 4. --- XTEXT bug fix: TXOP_DISPLAY was not working as documented. 5. --- Windows numerical bug fix: Certain operations on B4 variables (particularly INPUT) were truncating the value to 2^31 if was > 2^31. 6. --- Dialog title bug fix in handling "&": The "&" was getting converted to "&&" if the MBF_DLGNOCREEP flag was set. ============================================================================ A-Shell Development Notes Version 5.0.999.5 (29 Apr 2008) ============================================================================ 1. --- SYSTAT.LIT 3.0(158) fixes "subbmited" spelling in SYSTAT/? display (thanks to eagle-eyed Scott Buechler, for noticing this after only about 10 years.) 2. --- Multiline INFLD/GUI now supports multiline clipboard paste. (Same fix as in 1109.2.) 3. --- XTREE max columns increased from 64 to 80 (and overflow test inserted). (Same fix as in 999.5). 4. --- AUI_CONTROL enhancement: max size of ctext parameter increased from 512 to 1024. (Can be an issue with extremely large TAB controls or multi-line text controls.) Fix problem with truncation of command strings in a large TAB even when the TAB text fits within the limits. Also, check for overflow of ctext string before it crashes A-Shell. 5. --- ISAM-A eof errors (after a GET'NEXT or GET'PREVIOUS) are no longer logged unless both the ISAM and BASERR traces are set. Previously, they were logged if either of those traces are set. (Since BASERR is recommended at all times, this was causing some distress over what appeared to be a lot of ISAM "errors" which weren't really errors.) Note that the same logic applies to the key-not-found error in a FIND or GET statement. ============================================================================ A-Shell Development Notes Version 5.0.999.4 (08 Apr 2008) ============================================================================ 1. --- ATE / GUI bug fix: The clipboard paste operation into a control such as INFLD or XTEXT was not working properly when the number of characters to paste was more than 100. (The characters were being sent to the host and thus appearing in some later context.) ============================================================================ A-Shell Development Notes Version 5.0.999.3 (19 Mar 2008) ============================================================================ 1. --- Windows GDI printing bugfix: PITCH=AUTO was (inappropriately) considering //GDI command lines when calculating the longest line (and thus determining the font width). Typically was only an issue for //PDFX commands, which could be long. GDI commands are now ignored for the purpose of the auto pitch calculation. 2. --- MX_GETOFD bug fix: An initial AMOS spec in the PATH argument wasn't being parsed correctly due to the comma. (Native specs were working ok.) 3. --- ATE / INFLD bug fix: The date and time format error message boxes were leaving "!" garbage characters in the input buffer (and possibly even locking up the terminal). ============================================================================ A-Shell Development Notes Version 5.0.999.2 (07 Feb 2008) ============================================================================ 1. --- Important UNIX locking bug fix - A recent "improvement" in the file locking routine (to loop when a lock request was interrupted by an unexpected signal) was opened a window of opportunity for an infinite loop to occur. (The symptom was that the job appeared to lock up and the ashlog.log file filled up very quickly with "RLOCK Error" messages.) 2. --- UNIX / ATE auxiliary printing refinement: The spooler switches are now passed to the ATE client even if no printer name was specified. Previously, the switches were only passed when an printer was explicitly specified (e.g. DEVICE=AUXLOC:LASER). An example of where this is useful is to force ATE to print a file in landscape even if the ATE default printer configuration was portrait. 3. --- XTREE bug fix: In a split tree, when exiting from an editable cell on the right with ESC, sometimes the tree was left in a selection-only state where exit keys would not work. Toggling the focus to another window and back again was one workaround, but this patch should eliminate the need for the workaround. ============================================================================ A-Shell Development Notes Version 5.0.999.1 (30 Jan 2008) ============================================================================ 1. --- Windows bug fix: the left and right margins of the main A-Shell window (and by extension, the grid metrics) were going haywire with some multi-monitor configurations. (It isn't clear what triggered the problem, as the workaround affected logic that had been there for many months.) 2. --- Remove 6.3 limitation on module names in user memory. They can now go to 10.3. ============================================================================ A-Shell Development Notes Version 5.0.999.0 (23 Jan 2008) ============================================================================ 1. --- EFS refinements: When EFS is enabled, all stream I/O is now passed through the EFS library (making it available to the mirroring subsystem). A number of conflicts between EFS and stream handling have been fixed. 2. --- ERR(2) fix/enhancement: It was not counting INPUT and PRINT statements to files (thus possibly misleading you about the last file accessed). 3. --- TRACE RW improvement: INPUT and PRINT statements to files now traced. 4. --- XTREE fix/enhancement: COLDEF type EM now works as one might logically expect. (E=edit, and M=multiline, with the ENTER key inserting a CRLF into the field rather than exiting the cell.) Same idea as Em (except it treats the ENTER key as exiting the cell edit.) 5. --- XTREE fix: column-specific context menus were not working properly when the tree was on a secondary monitor in negative coordinate space. 6. --- GUI TRACE fix: When the GUI trace was active but the Debug Message Window not open, certain XTREE events were opening the Debug Message Window but not outputting any message (which was rather annoying and confusing). 7. --- XTREE bug fix: Double-clicks on an XTREE which result in the control being deleted by the application were sometimes leaking through to an underlying control (causing an unwanted click event). 8. --- INFLD bug fix: SETDEF pattern matching was allowing partial matches when the size of the field data was within 1 of the XMAX value. (It should only allow a partial match if there is a wildcard in the pattern or if the field data matches the XMAX value.) ============================================================================ A-Shell Development Notes Version 5.0.998.9 (07 Jan 2008) ============================================================================ 1. --- MX_GDICALC fix: Incompabitibility with MX_GDICALC and the new Width parameter to the //SETFONT GDI command (introduced in 998.3) 2. --- DIR.LIT 3.0(145) bug fix: /NATIVE switch was displaying the wrong path in the directory header. ============================================================================ A-Shell Development Notes Version 5.0.998.8 (29 Dec 2007) ============================================================================ 1. --- Fix XTREE bug: Context menus in editable cells with validation were not always working. They were exiting with -48 (validation) instead of displaying the context menu or returning the context menu's exitcode. (Problem introduced in 997.9). 2. --- XTEXT/ATE enhancement: When loading text from a buffer, the control now filters out spurious LF characters (which sometimes result from confusion in passing the text back and forth between the server and PC using various line ending disciplines). (Mainly this was noticed with ATE connecting to a Windows server.) ============================================================================ A-Shell Development Notes Version 5.0.998.7 (22 Dec 2007) ============================================================================ 1. --- ISAM-A enhancement: max record size increased from 8K to 16K. 2. --- Runtime bug fix: RESUME from an error trap triggered by the user hitting ^C while waiting on a locked record in READL was generating an error 35 (unsupported function). This is apparently a rare case, as the problem went back many years. (Probably most apps handle ^C either with an explicit RESUME or by terminating the program.) 3. --- XTEXT enhancement: If a text string is supplied in the AUXDATA parameter, it will be used for the title of any dialog box displayed under XTEXT's direct control. Previously this applied only to the XTEXT popup dialog (when the XTF_POPUP flag was specified). Now, it extends to the dialog which asks whether to save when user hits ESC after changing the text. If AUXDATA not specified, or null, then XTEXT continues to use the SYS:APPMSG.xxx 000,001 message string (which is normally reserved for the application name). 4. --- ASHW32.EXE code signature bug fix: The code signature on ASHW32.EXE was broken in 998.6. 5. --- ERSATZ.LIT 2.0(103) bug fix: Display format now allows for 10 character ersatz names. (Previous display format truncated at 6 characters.) 6. --- ASHUPD.LIT 1.2(123) bug fix: Was falsely indicating no updates available. 7. --- ISMUTL.LIT 1.4(132) enhancement: Max record size increased from 8K to 16K. 8. --- SLEEP.LIT 1.0(101) enhancement: Now supports fractional seconds. ============================================================================ A-Shell Development Notes Version 5.0.998.6 (15 Dec 2007) ============================================================================ 1. --- GDI printing bug fix: PITCH=AUTO was broken in 986.5. 2. --- AMOS.SBR bug fix: if the command argument was passed as a variable which had no trailing null, garbage was effectively concatentated to the end of the command. (Mainly affected XCALL AMOS, CMD$ where CMD$ = "VUE + filename.) 3. --- Compiler bug fix: If last line of file ended with an &, compiler was getting stuck in an infinite loop. 5. --- ashico1.dll update: New version 1.0.0.6 adds another 26 icons: document_cert::ashico1 document_cup::ashico1 document_heart::ashico1 document_info::ashico1 document_pref::ashico1 first_aid::ashico1 fit_to_size::ashico1 font::ashico1 gears::ashico1 history::ashico1 notebook::ashico1 notebook_pref::ashico1 preferences::ashico1 q_and_a::ashico1 signpost::ashico1 star_blue::ashico1 text_bold::ashico1 text_italics::ashico1 text_normal::ashico1 text_speaker::ashico1 text_ul::ashico1 window_colors::ashico1 window_env::ashico1 window_gear::ashico1 window_pref::ashico1 The sample program icodlg[908,27] in the SOSLIB has been updated (edit 110) to show all of the icons available. ============================================================================ A-Shell Development Notes Version 5.0.998.5 (10 Dec 2007) ============================================================================ 1. --- XTREE bug fix: close loophole causing rapid in/out in certain cases of typeahead; fix "click-through" problem on double-click. 2. --- GDI printing fix: BIN command in printer init file was not working. 3. --- GDI printing enhancement: //BIN command (if within top 5 lines of printout and before any lines which generate output) will set bin without causing a page feed (i.e. acts like the equivalent BIN command in the printer init). 4. --- UNIX file copy bug fix: Logging into a write-protected directory and then trying to copy a file to it was causing a segmentation fault. ============================================================================ A-Shell Development Notes Version 5.0.998.4 (06 Dec 2007) ============================================================================ 1. --- GDI printing enhancement: //SETFONT now supports an optional width parameter, allowing you to stretch or squeeze the width of the font independent of the height: //SETFONT,height,face,pitch-fam{,charset,weight,style,rotation,width} The units of width are equivalent to that of height (10ths of points). 2. --- ATE aux port printing fix: Aux on/off codes weren't working for WYxxx. 3. --- MX_SHELLEX fix: The return status wasn't correct (in some cases generating an out-of-memory error.) ============================================================================ A-Shell Development Notes Version 5.0.998.2 (28 Nov 2007) ============================================================================ 1. --- MX_SHELLEX bug fix: was failing to return the error code in the STATUS parameter. 2. --- NT 4.0 compatibility fix: When support for dual monitors was added (around edit 970), a function call was introduced which did not exist under NT 4.0, causing A-Shell to abort. (A messagebox was displayed, indicating that the function, GetMonitorInfoA could not be located.) ============================================================================ A-Shell Development Notes Version 5.0.998.1 (28 Nov 2007) ============================================================================ 1. --- ATE bug fix: When support for WYSE50 was added (in 997.7), auxiliary printing became unreliable in detecting the end of the printing operation, resulting in commands immediately following the print request being lost, which in turn could have given ATE the appearance of being hung. 2. --- GUI bug fix: In some cases, it was impossible to open up the debug message window (if it had been previously open and closed indirectly, by closing the parent dialog.) 3. --- ATE/XTREE server-side refinement: Eliminate a situation where null bytes within an XTREE data array would cause the tree data to be terminated at that point under ATE, but not under local A-Shell/Windows. (This situation pops up periodically in cases where the physical data array contains some data that is not referenced in the COLDEF definition.) ============================================================================ A-Shell Development Notes Version 5.0.998.0 (22 Nov 2007) ============================================================================ 1. --- Bug fix (UNIX only): Assignments of the type BVAR = were failing when BVAR was of type B1, B2 or B3, and was greater than 2^32. It was assigning 0 to BVAR, instead of the modulo 8, 65536 or 16777216 value. (This is an unlikely situation, so probably didn't affect many programs, but was nevertheless incorrect and inconsistent with the Windows version, which handled it correctly). 2. --- Log file refinement: ISAM retry (locking) messages are no longer logged to ashlog.log unless the TR_XDEBUG or TR_ISAM trace flag is set. 3. --- Log file refinement: Image file loading error messages are no longer logged to the ashlog.log unless the TR_XDEBUG or TR_GUI trace flag is set. 4. --- Bug fix: ALT-F11, ALT-F12 were not working under Windows. 5. --- INFLD (GUI) bug fix: eliminate a spurious chr(13) character that was appearing in the input buffer after certain kinds of fast-mode combo box operations. 6. --- Bug fix (Windows): Strings of the form %string% were sometimes being converted to garbage if "string" was not a defined environment variable. (This affected any string that was being passed through the environment variable filter, which includes control click strings, filespecs, and command line arguments. ============================================================================ A-Shell Development Notes Version 5.0.997.9 (21 Nov 2007) ============================================================================ 1. --- XTREE bug fix: In many cases it was failing to exit for cell validation (with exitcode -48) if you clicked out of the cell (rather than used a keyboard navigation operation). 2. --- RENAME.SBR enhancement: Under Windows, XCALL RENAME errors will now be logged to the ashlog.log file. In addition, if the SYSERR TRACE is active, they will be displayed on the screen. (This is helpful in recognizing and tracking down mysterious Windows rename errors.) ============================================================================ A-Shell Development Notes Version 5.0.997.8 (16 Nov 2007) ============================================================================ 1. --- AUI bug fix: When resizing images displayed inside of controls (using AUI_CONTROL rather than AUI_IMAGE), the MBF_NODISTORT flag was being ignored. 2. --- AUI bug fix: The image scaling logic for MBF_STATIC+MBF_BITMAP+MBF_NODISTORT was falsely assuming that the images were square, usually resulting in smaller than optimum (or "correct") display size. COMPATIBILITY WARNING: if your application was inadvertantly counting on the incorrect display size, the fix could actually require a corresponding fix in your application. 3. --- AUI bug fix: The scaled display size of images using MBF_STATIC+MBF_BITMAP were being scaled to the previous multiple of 16 pixels, which resulted in them being anywhere from 0 to 15 pixels smaller than they should have been. (The effect was similar to the bug described previously, and the same compatibility warning applies.) 4. --- XPUTARG bug fix: Outputting a B value from within a Function/procedure or SBX to an I variable was not working properly. 5. --- IMAGE.SBR bug fix: Opcode 5 (to get information about an image file) was leaking resources when the image file was specifed (rather than using an image handle). 6. --- AUI imaging enhancement: you can now control the alignment of images within static controls by adding one or more of the following flags to MBF_STATIC+MBF_BITMAP+MBF_NODISTORT: MBF_HCENTER (&h000000C0) - horizontal centering (at top) MBF_VCENTER (&h00000020) - vertical centering (at left) MBF_CENTER (&h000000E0) - centering along both axes Note that these results in changes to the actual stored coordinates of the static control. (This probably has no consequence for your application, but might be confusing if you look in the control dump.) Another way to center static images within the control, without changing the dimensions of the control (and thus much more efficiently) is to add the new SS_CENTERIMAGE (&h00000200) flag to the WINSTYLE parameter (and omit the centering flags described above). A new SOSLIB sample program, STIMGT.BP[908,32] illustrates these options. The above symbols have been added to the ashinc:ashell.def as well. 7. --- New symbols added to ASHELL.DEF: WS_THICKFRAME (&h040000) may be added to the WINSTYLE parameter when creating static controls to give them a raised panel effect. (This is the visual reverse of WS_EX_CLIENTEDGE.) It isn't clear whether any other control types can benefit from this option, but it probably won't hurt to try. MBF_CENTER, MBF_HCENTER, MBF_VCENTER - As described above, these can be used to adjust the alignment of an image within a static control. They can also be used to change the default (center, top) alignment of static text controls. See the new SOSLIB program ALIGN.BP[908,24] for an example. BS_TOP (&h00000400), BS_BOTTOM (&H00000800), BS_VCENTER (&h00000C00) can be added to the WINSTYLE parameter for buttons to adjust the vertical alignment of the text within the button. The horizontal alignment can be adjusted by the traditional MBF_RTJUST and MBF_LFJUST flags. (Note: default alignment for buttons is centered in both directions.) SS_CENTERIMAGE (&h00000200) can be added to the WINSTYLE parameter for static images (scaled with MBF_NODISTORT and without any other MBF_xxx alignment options) to center them within the static control, without changing the size of the control. See the STIMGT.BP[908,32] sample program. ============================================================================ A-Shell Development Notes Version 5.0.997.7 (14 Nov 2007) ============================================================================ 1. --- ATE bug fix: eliminate a spurious 4 second delay when starting up a new PolyShell job. 2. --- ATE refinement: Selecting "WYSE50" emulation now requests the terminal type "wyse50" on the server, instead of "wyse5g" as before. (Both wyse50 and wyse5g act the same from the ATE perspective, but obviously one is much more common and thus more compatible on the server side.) 3. --- ATE server side enhancement: Clients with terminal type wyse50, am65, and am75 are now probed at startup to see if they are really ATE, in which case they can be automatically licensed without requiring the LICENS/ATESRV command. ============================================================================ A-Shell Development Notes Version 5.0.997.6 (13 Nov 2007) ============================================================================ 1. --- ATE emulation bug fix: Emulator was displaying spurious "+" characters when in alternate-character-set mode. 2. --- INFLD bug fix: Problems with a spurious space appearing in the input buffer and other erratic behavior in combo boxes has been resolved. 3. --- INFLD enhancement: New TYPE code |. (vertical bar, period) forces INFLD to use periods rather than underlines for the field marker in text mode. (Previously you had to use prehistoric compatibility mode, or allow decimal points, to achieve this.) 4. --- XTREE bug fix: Correct an issue with unwanted vertical scrolling on re-entry into a tree with the XTF_NOREDRAW flag set, which was introduced in 997.5. ============================================================================ A-Shell Development Notes Version 5.0.997.5 (07 Nov 2007) ============================================================================ 1. --- XTREE bug fixes: A further case of XTR'TARGETROW not being returned properly for higher numbered rows in a scrolled, multi-level tree has been fixed. 2. --- XTREE refinement: The black border which displays around the currently focused, editable checkbox cell, was 2 pixels out of alignment with the colored background of the cell. 3. --- XTREE refinement: XTR'TOPINDEX is no longer returned relative to an inactive XTREE when the inactive tree is clicked while another tree has the focus. (This was conflicting with the new-and-improved logic for handling clicks on inactive trees.) As stated below, the optimum way to respond to a click event on an inactive XTREE is to set XTR'TOPINDEX, XTR'TARGETROW, and XTR'TARGETCOL all to 0 before entering the clicked-on tree (using XTROP_RESELECT). 4. --- XTREE refinement: XTR'TOPINDEX may now be set to -1 on input in order to tell XTREE to return the new topindex on exit, but not to attempt to set it on entrance. Applies only when re-entering an existing tree with XTROP_RESELECT or XTROP_REPLACE with XTF_NOREDRAW set, and with XTR'TARGETROW=0. 5. --- EVENTWAIT fix: EVW_EXCDINOUT was not always working in the following case: - XTREE or XTEXT has the focus, - User clicks on another control, causing XTREE/XTEXT to exit - Application then calls EVENTWAIT, with EVW_EXCDINOUT flag - Instead of EVENTWAIT exiting immediately with the exitcode of the clicked control, it was waiting for another click. ============================================================================ A-Shell Development Notes Version 5.0.997.4 (05 Nov 2007) ============================================================================ 1. --- XTREE bug fixes and refinements: - Clicking on a checkbox in an inactive tree should now lead to the cell being both selected and toggled provided you re-enter the tree using XTROP_RESELECT and/or XTF_NOREDRAW and set XTR'TARGETROW=0. - The bold rectangle identifying the checkbox cell with the focus was not being displayed in many cases. - The vertical scroll position was sometimes being adjusted unnecessarily on re-entering a tree. This is mainly an issue when the event causing you to re-enter the tree is a click on a cell within the inactive tree; in that case you should set XTR'TOPINDEX=0 and XTR'TARGETROW/COL=0 to avoid overriding the target information otherwise set by the inactive click. - Re-entering a tree with XTROP_RESELECT and XTF_NOREDRAW was sometimes causing the last column(s) to disappear, unless they had explicit widths defined (using Dspwid or Dspmin). - When using dual XTREE controls, and one has the focus, and you click on the other, it how returns the XTR'TOPINDEX information relative to the clicked-on tree. (You can set this back to 0 to retain the current vertical scroll position in most cases though, due to above refinements.) (Removed in 997.5) - In some cases, the XTR'TARGETROW returned was not working for the last two rows in a tree. (For N rows, it was returning N-2 instead of N-1 or N.) ============================================================================ A-Shell Development Notes Version 5.0.997.3 (01 Nov 2007) ============================================================================ 1. --- ATE enhancement: Misc section of connection properties dialog now has a checkbox for tracing to the clipboard instead of to a file. 2. --- XTREE refinement: When entering a non-editable multi-select tree, the XTR'TARGETROW now establishes which row gets the focus. Note that the focused row will be identified by a dotted line around it, and is not necessarily selected nor even visible, but when you use the down-arrow, the focus and selection will move to the next row below the one that had the focus. XTR'TOPINDEX now works in multi-select mode also, to set the vertical scrolling position. (Previously, the first selected row over-rode the XTR'TOPINDEX.) 3. --- ATE enhancement: When spooling via the AUXLOC: device, the {NO}FF, {NO}LANDSCAPE, {NO}PASSTHRU and AUTOFF switches are now forwarded to ATE where they will override the options set either in the specified printer init file, or in the printer configuration dialog. This is mainly a convenience to allow forcing an option such as landscape without having to create a separate printer init file on the ATE client for it. NOTE: for this to work, the server side must also be at 997.3 or higher. ============================================================================ A-Shell Development Notes Version 5.0.997.1 (30 Oct 2007) ============================================================================ 1. --- ATE enhancements: - Parameter option in ZTERM ESC sequence to open/print a file (shell execute) now supported. - ESC * now recognized as a clear screen command (in both Wyse and AM* emulations). - WYSE5x function key emulations cleaned up. Note: PgUp/PgDn now send the same raw ESC sequences as a Wyse50 terminal (rather than ^T/^R) which improves operation with some UNIX utilities, but may require that your WYSE5G.IFX/WYSE5G.VUX files be updated to convert them to the expected ^T/^R values. (New versions of the WYSE5?.??X files are included in the release packages, but in the case of ATE, you need to update those modules on the server as well.) - Trace filespec now supports up to 160 chars and you can use the file open dialog (or just type the filespec). 2. --- INFLD GUI-mask rollback - reverse "fix" in 996.6 due to backwards compatibility complaints. 3. --- Fix intermittent problem distinguishing F keys with CONTROL and SHIFTed versions of them. ============================================================================ A-Shell Development Notes Version 5.0.997.0 (26 Oct 2007) ============================================================================ 1. --- ATE enhancement - WYSE50 (and WYSE5G) now supported. ============================================================================ A-Shell Development Notes Version 5.0.996.6 (25 Oct 2007) ============================================================================ 1. --- EVENTWAIT bug fix: when a popup dialog was launched from an EVENTWAIT- controlled field, and then a click event was used to close the popup dialog and return to the original field, the original field was not getting the focus set on it. 2. --- INFLD GUI bug fix: Mask chars (TYPE f) were not displaying unless preceded immediately by (non-empty) field data. 3. --- ATE enhancement: if the FTP login dialog is needed (because the saved login credentials were not valid at the time of an FTP operation), the information entered is now saved in the profile. (Previously it was only saved for the duration of the session.) 4. --- XTREE refinement (continuation of 996.4) - when editing a colored cell, we now attempt to make the color used in the edit control slightly lighter or darker (but otherwise the same general hue) than the static cell, to assist in making it stand out. (This works better with some colors than others, but along with the thicker border, most users should be able to "find the active cell".) ============================================================================ A-Shell Development Notes Version 5.0.996.5 (19 Oct 2007) ============================================================================ 1. --- ATE enhancement: -fp switch (to ATE.EXE) will cause it to auto-accept the server fingerprint (if using SSH mode). 2. --- ATE enhancement: If the hostaddress, login name, or login password field is "[init]", a dialog will prompt for it and then save the updated parameters in the registry. (This provides a way to distribute a default configuration file, while simplifying the end-user's task of modifying the parts that can't be shared.) If SSH mode, the standard tunnel dialog will be displayed, where you can enter the values that need to be initialized. For TELNET, a separate dialog will pop up. In 3. --- ATEtunnel.exe update: 1.1.102 supports the auto-fingerprint option and also will save the login name/password/address if any of the three were set to "[init]" and a successful connection is made. ============================================================================ A-Shell Development Notes Version 5.0.996.4 (18 Oct 2007) ============================================================================ 1. --- XTREE refinement: When editing a cell, draw a thicker border around the cell to make it stand out more (particularly when colored). Also, if cell has a background color, lighten or darken it slightly, for same reason. ============================================================================ A-Shell Development Notes Version 5.0.996.3 (15 Oct 2007) ============================================================================ 1. --- TCPX.SBR enhancements related to TCPOP_CONNECT: - The TIMER parameter now works to set a limit on the amount of time waiting in the TCPOP_CONNECT operation. (Although in theory, the TCPOP_CONNECT operation should succeed or fail without delay, in practice, DNS delays and some firewalls can cause the operation to hang for several seconds, particularly on failed attempts.) Previously, the TIMER parameter had no effect on that. Now, if the connection cannot be established within the specified time limit, the attempt is aborted. - Asynchronous connections: You can now do other work while waiting for a connection to succeed or fail by specifying the TCPXFLG_ASYNC flag with the TCPOP_CONNECT operation. In that case, if the connection cannot be established within the time limit specified by TIMER (or immediately, if TIMER=0), then the subroutine returns with STATUS=0 and SOCKPORT (>0) set to the socket whose connection attempt is still in progress. (You can consider this socket "half opened", meaning it is open on your end, but the other end still hasn't responded.) You must then use TCPOP_CHECK (continuing to specify the TCPXFLG_ASYNC flag and the half-opened socket in SOCKPORT) to check whether the connection attempt is complete. STATUS=1 indicates success, STATUS<0 indicates an error, STATUS=0 indicates that the connection attempt is still pending. WARNINGS AND OTHER NOTES: - If you get tired of waiting for an asynchronous connection to complete, you can cancel the connection attempt by using TCPOP_CLOSE, just like you would for an established connection. - The interpretation of the STATUS value returned from TCPOP_CONNECT depends on whether it is a normal or async (TCPXFLG_ASYNC) connection request. In the normal case, STATUS>=0 indicates success. In the async case, STATUS=0 means the connection is still pending, while STATUS=1 means success. If still pending, you need to use TCPOP_CHECK to determine the outcome. (It will return STATUS=0 for still pending, STATUS=1 for success, or STATUS<0 for connection failed.) - If TCPOP_CONNECT (with the TCPXFLG_ASYNC flag) returns with STATUS=1 and SOCKPORT > 0, then then socket SOCKPORT is open (or "half open"), even though the connection is still pending. So you wouuld be responsible for closing it if you don't follow through with the TCPOP_CHECK procedure to check for the result. On the other hand, if you get STATUS<0 on the TCPOP_CHECK (with TCPXFLG_ASYNC) operation, the socket will be automatically closed. - If an asynchronous connection attempt returns the pending status, the socket will be in non-blocking mode, regardless of whether you initially specified the TCPXFLG_BLOCK flag. To get it back into blocking mode once the connection is established, you need to specify TCPXFLG_BLOCK along with TCXPFLG_ASYNC on the TCPOP_CHECK call(s). ============================================================================ A-Shell Development Notes Version 5.0.996.2 (10 Oct 2007) ============================================================================ 1. --- INFLD new TYPE codes: |3 and |5 are equivalent to the existing TYPEs 3 and 5 (enable exitcode 3 for up arrow and 5 for down arrow) except that if used with a combobox, they also cause the up/down arrows to exit immediately (with the corresponding exitcode), rather than scroll among the choices in the combobox, PROVIDED THAT the combobox is not already in the dropdown position. (This is directly analogous to the XTREE coldef option ScrollMode=Tree.) An additional side-effect of |3 and |5 (vs 3 and 5) is that SHIFT+UP and SHIFT+DOWN will now act as they do in text mode (i.e. get translated via the function key translation system), even if |K (Windows keyboard mode) is in effect. 2. --- INFLD refinement: The self-service combo mechanism (SETDEF="...") can now be used in conjunction with a GUI, non-date-picker date (D|G|g) to get a field that acts like a date (with date formatting and validity checking, but which also exits with EXITCODE=-29 if you activate the drop-down (i.e. calendar) display. 3. --- TAB(-10,20) bug fix: The abbreviated mode, TAB(-10,20);text,format;chr(127); was also treating the format code as an alphanumeric control ID, causing a build-up of controls at the same location, which could result in some strange video effects (like overlapping or double-printing). 4. --- XTREE fix: Hitting ESC to exit an array-mode tree was causing the first byte of the ARRAY parameter to be nulled out. 5. --- VUE enhancement: INI.VUE now supports WIDE = ### to establish initial terminal width (provided emulator supports it). (Use TALL = ### to set terminal height). 6. --- SET.LIT 1.2(151) now supports SET TERMINAL WIDTH # for values other than 80 and 132 (provided you have a "G" driver). 7. --- Calendar control refinement: The calendar control, when positioned on top of another control in the same window, allows the control underneath to "bleed" through (both visually and when processing mouse clicks). (This is just a Windows quirk of that control.) The normal way to avoid such problems with it is to not position on top of another control (seems reasonable), or, if you insist, then first enclose it in a separate dialog. However, if neither of those options is desirable, yet another possibility is to remove the child flag from the control, so that it acts like a top-level popup or overlapped window. To do so, add the WS_VISIBLE flag, and optionally, the WS_POPUP flags in the dwStyle parameter. (e.g. DWSTYLE = WS_CAPTION + WS_SYSMENU + WS_VISIBLE). This essentially turns the calendar control into its own dialog, which has its own downsides (affecting the positioning and also making it difficult to use in conjunction with another control to receive the date clicked on), but for cases where you just want to have a floating calendar handy, this may be an easier technique than manually creating your own modeless dialog to house the calendar control. Note: the reason why adding WS_VISIBLE remotes the child flag (WS_CHILD) is that if neither WS_VISIBLE nor WS_CHILD are specified, both are turned on by default. Turning on the visible flag explicitly removes the default. 8. --- INFLD GUI enhancement: When |K (Windows keyboard mode) is NOT used, the SHIFT+ARROW keys now work like they would in text mode, i.e. as function keys to be translated via the translation tables. (The standard exitcodes for the shifted arrows are: -36, -37, -38 and -39.) ============================================================================ A-Shell Development Notes Version 5.0.996.1 (03 Oct 2007) ============================================================================ 1. --- XTREE fix: column ordering with the XTR'COLORDER() array wasn't working properly when columns > 31 appeared in the array. Note: the feature only allows you to control or override the ordering of the first 31 visible columns, but it should not impose any restriction on the number of columns total. Any column which does not appear explicitly in the XTR'COLORDER() array will appear in its otherwise numeric order after all the columns that are explicitly code in the XTR'COLORDER() array. 2. --- XTREE fix: Combobox keyboard item selection (i.e., the ability to select items in combobox cells by typing the first character(s) of the desired item) was not working. 3. --- MESAG.SBR fix(?): Disable a weird and ancient bug (feature?) in MESAG.SBR (text mode) in which a message displayed via opcode 4 would be saved and later redisplayed on exit from a subsequent opcode 2. ============================================================================ A-Shell Development Notes Version 5.0.996.0 (01 Oct 2007) ============================================================================ 1. --- XTREE bug fix: The optimization logic involved in sending back just the parts of the ANSWER array that had changed had a bug which caused it to, in some circumstances, null out the first byte of the answer array. (Which, depending on the application logic, could lead to the entire answer array being cleared, which would, in effect, set it back to the original values in the data array.) 2. --- ERASE.LIT 3.1(118) enhancement (new switches): ERASE /MINDAYS:# ERASE /MINSECS:# ERASE /? The first two erase only those files that have not been modified in at least the number of days or seconds, respectively. The last switch just displays the syntax options. 3. --- DIR.LIT 3.0(143) enhancement (new switch): DIR /MINDAYS:# (Same as with ERASE/MINDAYS:#) Skips files that have been modified with the specified # days. 4. --- Changing most MX_WINSETTINGS values no longer causes XTREE to get resized. ============================================================================ A-Shell Development Notes Version 5.0.995.9 (26 Sep 2007) ============================================================================ 1. --- XTREE bug fix: There was an unnecessary internal obstacle preventing visible columns from being relocated to the other side of a hidden column. (This is a rare situation, since hidden columns are usually defined first, but it is legal and possible to place a hidden column between two visible ones.) ============================================================================ A-Shell Development Notes Version 5.0.995.8 (23 Sep 2007) ============================================================================ 1. --- UNIX command line processing bug fix: Tokens on A-Shell command lines of the form %xxx% (where xxx was any string of characters) were getting converted to upper case if XXX was not a defined environment variable. This was mainly a problem in exotic cases were you were trying to pass a case sensitive command line from A-Shell to UNIX via HOST. 2. --- XTREE bug fix: In file mode, blank lines were being ignored. This was generally only apparent when using XTREE as a kind of viewer of text files (as in XTRMSG.SBX). 3. --- CGIUTL.SBR enhancement: Previous limit of 1024 on the size of an individual line after variable expansion has been increased to 16K. This is mainly a factor when individual data fields (substitution values) are quite large, since otherwise you could avoid the limit by keeping the input template lines short. ============================================================================ A-Shell Development Notes Version 5.0.995.7 (18 Sep 2007) ============================================================================ 1. --- XTREE bug fix: TotalLines=### was not preventing the initial sort from moving the totals lines. 2. --- XTREE enhancement: new column cformat code "h" indicates a column with times in it. This acts like a string column except for sorting purposes, where any time format supported by IDTIM will be recognized and sorted accordingly. 3. --- XTREE enhancement: new advanced coldef option "SelChgExit=###" causes XTREE to exit with exitcode -### whenever the selection changes (i.e. by moving it with the up/down arrows or by clicking on a new row). This feature can be handy in certain kinds of trees where you want to update some display items as soon as the user moves the selection bar, but beware of conflicts with the following modes and options: - edit mode (moving from cell to cell might trigger the "selection changed" event, interfering with the normal cell validation logic.) - XTF_FAST mode (it isn't clear which would take precedence in the case of a single click). - Context menus (if the user right clicks on a row other than the one currently selected, the change of selection event may or may not preempt the context menu.) (If it does preempt it, you might be able to re-enter immediately and continue though.) - ClickExit (again, it isn't clear which event will occur first.) 4. --- GUI control refinement: Previously, when a new control was created that had the same upper left corner as an existing control, the existing control was deleted and replaced by the new control. This is still true, except when both controls have alphanumeric IDs that are not the same. In such a case, the new control will be created without deleting the old. This is mainly for the benefit of complex programs such as LEO, and will probably not have any effect on existing programs (unless you were counting on the auto-delete feature and were using alphanumeric IDs). Note that the auto-delete feature is mainly used with AUTOTPRINT, where alphanumeric IDs are not used. 5. --- UNIX printing bug fix: Messages output by the system spooler routine which were supposed to be captured by the OPR:SPOOL.LOG file were instead going to the screen. (Problem introduced in 995.3) 6. --- UNIX print logging enhancement: SPOOL.LOG entries now contain the additional fields: Q= C= S=. ============================================================================ A-Shell Development Notes Version 5.0.995.6 (09 Sep 2007) ============================================================================ 1. --- Bug fix: When passing parameters to functions/procedures/sbxs in programs using SCALE, the conversion between F and non-F types was resulting in the value received by the function being shifted by the scale factor. For example, when passing an F6 value to a function expecting a B4, the B4 value received was 100 times too big (assuming SCALE 2). When passing a B, I, or S parameter to a function expecting an F, the received value was 100 times too small. In the case of SBXs the problem was further compounded by the possibility that the SCALE setting with the SBX was not the same as within the calling program. ============================================================================ A-Shell Development Notes Version 5.0.995.5 (06 Sep 2007) ============================================================================ 1. --- AUI_CONTROL / ATE refinement: Previously, ATE would not return any status information (as a bandwidth optimization strategy) if the CSTATUS parameter was specified as a string (typically "" or NUL_CSTATUS$). This rule has been tightened to allow strings of 2 or more bytes to be treated as valid return variables. This fixes an issue with in SBXINP.SBR involving the disabling of INFLD controls, and perhaps will avoid problems in other applications that mistakenly used a mapped string return variable for the CSTATUS parameter. Note that if you are counting on the non-return optimization, make sure you use "" or NUL_CSTATUS$, or a string mapped as S,1, rather than just any old string variable. Also note: fix is on the server side; does not require updating ASHW32.EXE (except when using ATS in which case you need to update the ASHW32.EXE on the server side). ============================================================================ A-Shell Development Notes Version 5.0.995.4 (05 Sep 2007) ============================================================================ 1. --- ISMROK.SBR bug fix: was reporting incorrect value for allocated IDX blocks under two conditions: a. When the IDX size was > 64K blocks, the value reported was about 10% too low. b. When the IDX had been auto-expanded, the value reported was often negative. This didn't affect normal ISAM operation, but may have caused applications to conclude that something was wrong with the file. 2. --- ISAM 1.0 Auto-Expand fix: The IDX auto-expand feature was not updating a field in the rock that was used by ISMROK.SBR to report the number of allocated IDX blocks. This field was not otherwise used by ISAM, but was responsible for the second problem mentioned above. 3. --- New ISAM 1.0 feature: The auto-expand feature can now be turned off for individual files by creating a .NOX file in the same directory where the .IDX and .IDA files reside. (If they are in different directories, create a .NOX file in each location.) Note: if you have multiple IDX files, you'll need a .NOX for each (unless you only want to disable the auto-expansion for a specifix IDX). Note: the .NOX file does not have to have any size. You can create it with the MAKE command (to create a 0 byte file), or with VUE or whatever. It is just the presence of the file in the directory that matters. Note: All auto-expansion operations, including those disabled due to the NOX file, will be recorded in the ashlog.log file. 4. --- XTREE bug fix: Setting the XTF_TOTALS flag (to protect the last line from being sorted) was not always working, unless the COLDEF option TotalLines= was also specified. When TotalLines= is not specified, XTF_TOTALS now sets the default value to 1 (i.e. only the last line is considered a total). ============================================================================ A-Shell Development Notes Version 5.0.995.3 (04 Sep 2007) ============================================================================ 1. --- GDI Printing Refinement: //IMAGE, //XTEXT, and //METAFILE will now locate the specified file in the same directory as the printfile if it fails to find it in the directory specified in the //GDI directive or in the local cache. This is mainly a convenience when printing from another directory. For example, if a printfile BAS:TEST.PRT contains //IMAGE,TEST.JPG,... and you tried to print it from another directory using PRINT BAS:TEST.PRT, previously it would have failed to find the image TEST.JPG in the BAS: directory, because you weren't logged there. It also comes in handy when moving printfiles and their associated images to another location (such as with ASHLPD), since now you can combine all the associated files in an arbitrary directory. 2. --- ATE/ATS/XTEXT Fix: XTEXT now supports an alternate method of returning updated text to the server, which does not require FTP. This new method works via the keyboard channel and currently only works when the destination is a string buffer (i.e. TXFF_FILE flag is NOT set in the txc'docfmt'dst field). The primary motivation for this non-FTP mechanism is to deal with servers that do not have FTP support configured, or have it configured in a mode that prevents access to the directories where A-Shell lives on the server. (This is quite common with Windows servers.) It is also somewhat more efficient when editing small files (which would be consistent with the use of string buffer mode rather than file mode.) Note that this requires an update of ASHW32 on both sides. This mode is now automatic with Windows servers (ATS), but you can also force it for UNIX servers by setting the new flag TXFF_RAWBUF (&h0400) in the txc'docfmt'dst field. 3. --- UNIX Printing Enhancement: Messages are now output to OPR:SPOOL.LOG for AUXLOC: printing. Previously only non-AUX port printing commands were logged. (Since AUX printing is an increasinly prevalent way to print from UNIX, it makes sense to record them in the log file just like direct printing and ASHLPD printing.) 4. --- ATE bug fixes: A curious loophole was allowing occasional garbage characters to be appear on the screen during certain ATE GUI operations. Note: this fix is actually on the server side. Also, legitimate startup error messages were sometimes garbled due to sharing of the message buffer space. 5. --- AM75{G} emulation enhancement: New miame.ini switch OPTIONS=NOSPACEATTR eliminates the automatic space associated with the on/off field attributes (TCRT commands 21,22,30-35,100-105). Currently this only applies to the AM75{G} UNIX emulation, and was implemented to provide compatibility with applications developed with a very old AMOS terminal driver standard (in which mode emulation drivers did not automatically add the space which otherwise was added by field terminals directly.) Note that if OPTIONS=NOSPACEATTR on the server side, the option will be automatically forewarded to ATE. 6. --- XTREE refinement: When an XTREE cell is clicked while the focus is on another control, XTREE now remembers both the row and the column, so that when the application re-enters XTREE, it can put the focus on the correct cell. 7. --- New TAB(-10,68) command: allows changing the underline attribute to an arbitrary fg/bg color combination. (Useful for slight aesthetic improvement to legacy text-mode programs which use underline, since underline has a rather old-fashioned look.) Command syntax: TAB(-10,AG_ATTRSUB);"1,2,";FG'R;",";FG'G;",";FG'B;","; & BG'R;",";BG'G;",";BG'B;chr(127); where: FG'R, FG'G, FG'B are the RGB values (0-255) for the foreground color BG'R, BG'G, BG'B are the RGB values (0-255) for the background color 8. --- Fix a bug which was causing certain error Message boxes, particularly those used for startup error conditions, to display a corrupted message. (A common one was "TE Startup".) 9. --- Fix crash problem if TRACE=DEBUG (or -trace command line switch used) and any miame.ini lines contained %env% variables. 10. --- INMEMO bug fixes: MMO'IPG (intelligent paging) mode was not living up to its name. (Was, in fact, acting more like read-only edit mode.) Also, in field emulations, when a reverse video message was displayed on the bottom prompt, in some cases, it would turn the rest of the screen to reverse video on exit. ============================================================================ A-Shell Development Notes Version 5.0.995.2 (31 Aug 2007) ============================================================================ 1. --- MAJOR ISAM-PLUS BUG FIX!!!! - Some debugging code introduced in 995.0 was causing A-Shell to crash with a Windows protection error (or UNIX segmentation fault) when accessing IsamPlus files. ============================================================================ A-Shell Development Notes Version 5.0.995.1 (30 Aug 2007) ============================================================================ 1. --- XTREE bug fix: Resolve various conflicts with re-entry into editable image cells. The new scheme for editable image cells is as follows: Answer array cells will be used to update the image cells. The format of the answer array cells can be one of the following: - clear text in cell, leave image alone imgspec - replace existing image, clear text imgspec, - same as above text - leave image alone, replace text ,text - delete existing image from cell, replace text imgspec,text - replace image, replace text Note that XTREE distinguishes between the "imgspec" and "text" cases by whether the field contains a valid image extension. On return from XTREE, the answer array cells will contain just the text that displays in the cell along with the image, unless you edit the cell, in which case it will contain exactly what was entered. 2. --- GUI bug fix: eliminate another case in which a TAB(-1,0) could crash ASHW32 if the font table had been corrupted. TAB(-1,0) now explicitly resets the font table. 3. --- ATE bug fix: the LOGDIR option in the MIAME.INI wasn't being obeyed. 4. --- Minor COMPIL refinement: compiler now responds more quickly to a ^C abort when in the middle of outputting many errors. (Previously, it was sometimes necessary to wait until several hundred error messages were reported before it would respond to the abort command.) Note: this applies only to the internal compiler, not the one used by the Editor. ============================================================================ A-Shell Development Notes Version 5.0.995.0 (30 Aug 2007) ============================================================================ 1. --- Windows/ATE color enhancement: Add an option to the Colors dialog box to have the reduced foreground color palette apply for reduced (i.e. dim) background text. This allows A-Shell/Windows and ATE to simulate an effect that some terminal emulators have used to associate different colors with selected non-color attributes (such as dim, reverse, etc.) 2. --- XTREE bug fix: when editable images cells contain text (in addition to the image filespec), in some cases part of the image filename was appearing in the cell (in addition to the image and the text). 3. --- XTREE enhancement: two new advanced COLDEF options: RGBfgSel=r,g,b RGBbgSel=r,g,b These determine the foreground and background color used to display the selected row(s) in the specified column. (The default selection color is white for the foreground and blue for the background.) Change the default color is sometimes useful, either to make selected items stand out against highly colored cell patterns, or conversely, to make selected items blend into the background. (The latter is sometimes useful in conjunction with editing, where you might otherwise get an annoying "flash" as the tree switches between cell editing and selection modes.) 4. --- ATE bug fix: PC based licensing (via LICENS.LIT with MAC address) was corrupting memory. 5. --- LICENS.LIT 2.4(122) refinement: For PC-based ATE licensing, the MAC address is now automatically added to the company name if not done manually. (This was confusing previously.) 6. --- XTREE refinement: check that Mask= length of field if editable /jdm 7. --- INPUT CSV refinement: fields with embedded line breaks are now supported. (The total extended input line length is still limited to 4K though.) 8. --- XTREE fix: Exiting from a (right click) context menu was not always returning the correct cell coordinates. 9. --- GUI bug fix: close a window of opportunity in which an ASHW32 crash could occur during a TAB(-1,0). 10. --- INFLD bug fix: In non-GUI horizontal scrolling fields, the right arrow was not generating exitcode 12 from the last physical position of the field, even if TYPE L specified. (It was working from every other position.) Also, the "fast mode" (TYPE F) was not working in that case. 11. --- XTREE enhancement: Images in editable image cells can now be updated via the answer array using XTROP_RESELECT. Previously, only the text associated with the image could be updated this way, unless you used XTROP_REPLACE. ============================================================================ A-Shell Development Notes Version 5.0.994.5 (13 Aug 2007) ============================================================================ 1. --- GDI printing enhancement: //RECTANGLE directive now supports option for rounded corners: //RECTANGLE,left,top,right,bottom{,fill{,crwidth{,crheight}}} where crwidth and crheight refer to the "corner radius" width and height, in the current mapmode units. For normal (symmetrical) rounded corners, crheight is not needed, and crwidth should be set to the radius of the circle used to draw the arc of the rounded corner. When crheight is specified, the corners are made from the arc of an ellipse whose total height (bounding rectangle) is 2*crheight and whose total width is 2*crwidth. 2. --- XTEXT combo control refinement: a vertical scroll bar is now displayed if all of the possible items do not fit within the area allocated to the drop-down box. 3. --- EVENTWAIT fix: There was a problem with EVW_EXCDINOUT+EVW_EXCDFOCUS not always working on the initial call for a new dialog. 4. --- XTREE Image fix: When an XTREE image cell was both editable and had a cell background color, the first character of the cell text was being clipped in some cases. Note that this is a pretty exotic combination. Image cells can display additional text, and that text is editable, but the image filename itself is not directly editable (you have to reload the array to change the image). 5. --- XTREE Editable cell fix: Using navigation keys was sometimes resulting in a non-editable cell being selected for editing (typically this was related to there not being any editable cells visible, for example, in a multi-level tree where the editable cells were collapsed). 6. --- XTREE Editable cell fix: When using unconditional validation, exiting from an editable cell operation via a click on a menu or other control was returning EXITCODE -48 (validation) rather than the EXITCODE for the control or menu clicked on. ============================================================================ A-Shell Development Notes Version 5.0.994.4 (07 Aug 2007) ============================================================================ 1. --- Fix XTREE cell-editing bug in which certain navigation operations were resulting in a non-editable cell becoming editable. ============================================================================ A-Shell Development Notes Version 5.0.994.3 (04 Aug 2007) ============================================================================ 1. --- Fix bug causing a GPF if you passed the PDFX driver to MX_GDICALC. ============================================================================ A-Shell Development Notes Version 5.0.994.2 (03 Aug 2007) ============================================================================ 1. --- Fix bug in INSTR() function: If the starting position was beyond the end of the source string, and the search key was one character long, the results were unpredictable (instead of returning 0). The bug was introduced in 5.0.989 when the single-character INSTR was "optimized". ============================================================================ A-Shell Development Notes Version 5.0.994.1 (02 Aug 2007) ============================================================================ 1. --- XTEXT control update (TER14.DLL 14.0.5.8): fixes a problem with //XTEXT printing when the OFFSET parameter is non-zero. (The problem was that the first logical line of the output would retain the font characteristics that would have applied if the OFFSET were 0.) 2. --- XTREE bug fix: accelerator characters (ALT+) were not working when in an editable cell. (They still don't work properly in combo boxes.) 3. --- XTREE enhancement: If you set the top bit (&h80) of XTR'SELECTAREA for an editable tree, it will keep the first column selection indicator (blue bar) on during editing. Depending on the tree layout and other factors, you may find this more aesthetically pleasing. (In particular, it reduces the "flash" when cell-to-cell movement requires exit/re-entry.) 4. --- XTREE/ATE (server side) fix: When the answer array was being passed via the top level unformatted variable (e.g. XANSARY), rather than the first element of the array (e.g. ANSARY(1)), the space-filling enhancement in 993.6 was, in some cases, leading to transmission of a lot of unnecessary spaces, which, depending on how many, could have had a serious impact on the speed of loading and re-entering the tree. 5. --- ATE bug fix: The logic which looks for files in the ATECACHEDIR, if not found in the originally specified directory, was not working when the original filespec referenced an ersatz that was not known to the ATE workstation. 6. --- MX_GDICALC enhancement: It now returns status -8 if you specify a rectangle that has zero or negative space. Previously, it was displaying a cryptic "Printing Area Too Small" message. ============================================================================ A-Shell Development Notes Version 5.0.994.0 (01 Aug 2007) ============================================================================ 1. --- XTREE bug fix: Clicking on TX or RX cells was returning XTR'TARGETCOL=0. 2. --- XTREE new feature: Support list substitution style (aka INFLD ||L) combo lists via the new ListX= and CellListX= and clauses: ListX=,,,,... CellListX=,,,,,... e.g. ListX=1,UPS Ground,2,UPS BLUE,3,Fed Ex,4,Mail" CellListX=c,AL,Alabama,CA,California,LA,Lower Alabama~~" ListX and CellListX are just like List and CellList, respectively, except that the list of items consists of , pairs, where the is what you store in your application (and in the data and answer arrays) while the is what displays in XTREE. The concept and implementation is essentially the same as the INFLD ||L "list substitution" field type. The XTRA5 and XTRA5C sample programs in the SOSLIB have been updated to illustrate these. ============================================================================ A-Shell Development Notes Version 5.0.993.9 (31 Jul 2007) ============================================================================ 1. --- MX_GDICALC enhancement: Opcode 1 (MXGDI_OPENPTR) now optionally returns the page dimensions (in the specified units): xcall MIAMEX, MX_GDICALC, MXGDI_OPENPTR, handle, status, & printer, mapmode {,length, width} 2. --- MX_GDICALC enhancement: Opcode 6 (MXGDI_CALCRECTX) now works in ATE. Note: as with XTEXT.SBR, file resident on server will be transferred to ATECACHEDIR on PC. (Since the use of MXGDI_CALCRECTX implies that this will happen multiple times per file printed, you might want to optimize the operation, if you are doing it on a lot of files, by pre-transferring the files to the ATECACHEDIR and then referencing the filespec as "%ATECACHEDIR%\xxxxxx.yyy"). 3. --- XTREE enhancement: Editable checkbox/radiobutton cells (cformat T/R) can now be disabled dynamically during validation re-entry by adding 4 to the cell value. (e.g. '0' is unchecked, '4' is unchecked/disabled, etc.) The XTRA6 sample program, version 1.0(103), has been updated to illustrate this. Select the validation option in the initial prompts. When you activate a Yes cell, the corresponding N/A cell will be disabled. When activate the No cell, the corresponding N/A cell will be re-enabled. 4. --- XTREE fix: Editable cells with validation were not exiting with exitcode -48 unless the XTF_FKEY flag was set. 5. --- Icon fix: The #WINPTR icon stopped working in 990.0 when the developer icons were reorganize. ============================================================================ A-Shell Development Notes Version 5.0.993.8 (29 Jul 2007) ============================================================================ 1. --- XTREE enhancement: The center (|) and right justify (>) cformat codes now apply during editing, as well as for display. (Previously, cell editing was always left-justified.) 2. --- XTREE fix: The combination of image cells (I) with cell background color (B) was not working. 3. --- XTREE fix: Read-only editable (u) was still allowing numeric keypad keys to modify the field. 4. --- XTREE refinement: The feature which automatically displays negative numeric values in red now works in conjunction with cell editing, provided that the cell had not been given a non-standard foreground color to begin with. 5. --- XTREE refinement: The mechanism of hiding text by preceding it with a backslash now works with the answer array as well with the data array. 6. --- XCALL interface refinement: The function that is used by XCALLs to return string values will now translate to B, I, or F as needed. This addresses a rare situation where an application accidentally supplies a numeric parameter type where the XCALL is expecting to return a string, and the return string actually has a non-zero "value". 7. --- XTREE / ATE bug fix: The last byte of the answer array was not getting updated in certain cases. (Affected ASHW32.EXE in ATE mode only.) 8. --- MX_GDICALC bug: For opcode 3 (MXGDI_CALCRECT), if the text did not fit entirely within the box, it was supposed to return the height of the box; instead it was returning the height needed for the entire output (given the width of the box but ignoring its height). 9. --- Debug window bug fix: selecting option to dump the font cache before any GUI objects have been created was causing a GPF. ============================================================================ A-Shell Development Notes Version 5.0.993.7 (27 Jul 2007) ============================================================================ 1. --- AUI_CONTROL fix: When an alphanumeric control id is passed by the app in a CTLOP_ADD operation, the numeric ID of the created control is supposed to be returned in the CSTATUS parameter. This was working, except in the case where the control ID was 1. (In that case alone, it was returning 0; now fixed.) 2. --- XTREE enhancement: When a column is defined with s (selected or shared lists), the list id character can now include the following special characters (in addition to "|", which makes the cell display-only): # : Normal editable cell (numbers only) * : Normal editable cell (any) ============================================================================ A-Shell Development Notes Version 5.0.993.6 (26 Jul 2007) ============================================================================ 1. --- XTREE refinement: embedded nulls in the answer array are now automatically converted to spaces, eliminating a nagging source of bugs in editable trees. (I should have thought of this a long time ago!) ============================================================================ A-Shell Development Notes Version 5.0.993.5 (26 Jul 2007) ============================================================================ 1. --- XTREE debugging enhancements: Embedded nulls in the answer array are now detected and reported via a message box. (These would otherwise lead to mis-interpretation of the answer array data.) Also setting the XTREE and XDEBUG traces now output the first 200 bytes of the answer array to the log, making it easier to verify correct structure (without having to add custom traces to the application). 2. --- XTREE fix: An internal buffer was being overloaded when an individual cell exceeded 260 characters. The new limit is 2K. 3. --- INFLD fix: When using a coded list that returns both the code and the description (type ||l), if the list had a wildcard entry, and the user typed a value that was not in the list (but was accepted because of the wildcard), it was returning "*,*" for the "code,description" in ENTRY. But that wasn't very helpful, since the application had no way to find out what the user typed. It now returns "*,text" where 'text' is what the user had typed. ============================================================================ A-Shell Development Notes Version 5.0.993.4 (25 Jul 2007) ============================================================================ 1. --- XTREE refinement: The hidden column flag (H) now overrides the Dspmin and Dwpwid options. Previously, those were overriding the hidden flag, causing at least one developer to wonder why the H flag appeared not to be working. ============================================================================ A-Shell Development Notes Version 5.0.993.3 (25 Jul 2007) ============================================================================ 1. --- XTREE enhancement: the total space available for all the Mask= definitions has been increased from 512 to 1024 characters. 2. --- XTREE/ATE bug fix (server side): the combination of opcode 4 with file mode was leading to an "Invalid Advanced Coldef" error, due to a glitch in the optimization logic introduced in 993.0 ============================================================================ A-Shell Development Notes Version 5.0.993.2 (24 Jul 2007) ============================================================================ 1. --- ATE enhancement: The ATE command buffer is now automatically expanded as needed, eliminating the need for manually sending a TAB(-10,42) command when executing GUI XCALLS such as INFLD or XTREE which might require a buffer larger than the default of 3K. (If the data exceeded the command buffer, it was truncated, leading to problems that were not always easy to debug. A common scenario was to add a few clauses to an XTREE COLDEF definition, causing it to approach the 3K mark.) Manual TAB(-10,42) commands will now be ignored unless they actually specify a size larger than the current size. 2. --- XTREE parameter name change: The "SharedList" coldef option has been renamed to "CellList", which better captures the distinction with the standard "List" (since the standard "List" can now be shared, but it is still column-specific whereas "CellList" is cell-specific.) 3. --- XTREE enhancement: Combo lists defined with the List= clause can now be associated with column 0, allowing a single list to be shared between multiple columns. (Any column using cformat code l which does not have its own List= definition will use the column 0 list.) Note that although this capability overlaps somewhat with the CellList= feature, because List= is still column-specific, it doesn't require the use of the use of a special byte in each cell to identify the list. 4. --- XTREE enhancement: Individual cells within combobox columns (using cformat l) may now be marked as display-only by inserting a "|" character at the start of the cell. The character does not appear in the display, but it prevents the cell from gaining the focus. 5. --- Compiler fix (1.1.364): The determination of whether the keyword LOOKUP is a statement or a function has been refined. In the last update, it was simplified to consider it a function if the next non-blank was a "(", but this caused problems with statements of the form: LOOKUP (A$ + B$),X The determination of whether LOOKUP is a statement or a function now takes into account the full context in which it appears. 6. --- XTREE enhancement: The 4K limit on the length of an individual combo list (defined with List= or CellList=) has been eliminated. 7. --- XTREE bug fix: Close a window of opportunity to crash A-Shell by trying to trace a column definition string that is excessively long. ============================================================================ A-Shell Development Notes Version 5.0.993.1 (24 Jul 2007) ============================================================================ 1. --- XTREE enhancement: You can now pre-load text into a self-serve combo cell, even if it is not editable. Previously this was impossible because when a combo is not editable, it can only display values that are defined in the list, and for a self-serve combo, the List=... The workaround is for XTREE to automatically add the item you want to display to the defined list, but still preserve the automatic exit with EXITCODE 29 when you click the down arrow. 2. --- XTREE fix: Using the | character at the start of an editable cell (combo or normal edit) to make that cell non-editable was only partially working. (The | was being lost in updating, causing the cell to revert to editable status after a re-entry, if you didn't reset it within the application.) 3. --- XTREE fix: The ScrollMode=Tree option wasn't working with self-serve combos. ============================================================================ A-Shell Development Notes Version 5.0.993.0 (23 Jul 2007) ============================================================================ 1. --- XTEXT / GDI new feature: A new GDI printing directive permits printing a text or RTF file via XTEXT into a specified rectangle: //XTEXT, left, top, right, bottom, fspec {, offset} Left, top, right, and bottom define the printing boundaries, using the current map mode. fspec is the file to print (which must be a plain text or RTF file). offset (default 0) is the starting character offset within the file where printing will begin. This is mainly of use if you have to split the output into multiple //XTEXT rectangles. The output will be wrapped, if necessary, to fit within the left and right boundaries of the rectangular area, and will be clipped if it goes beyond the bottom limit. See MX_GDICALC for a method of determining in advance how much of the file will fit within the area. WARNING: //XTEXT currently works only in portrait mode! 2. --- MX_GDICALC new opcode for calculating size of XTEXT output: OP 6 (MXGDI_CALCRECTX) Calculate rectangular XTEXT metrics XCALL MIAMEX,MX_GDICALC,MXGDI_CALCRECTX,HANDLE,STATUS, & LFT,TOP,RGHT,BTM,FILE$,HEIGHT,OFFSET This is essentially the same as the existing OP 3 (MXGDI_CALCRECT) except: - The MEMO$ argument in OP 3 is replaced here by FILE$, which specifies the filespec of the text file to analyze. - The OVERFLOW$ argument in OP 3 is replaced here by OFFSET, which indicates the offset within the file. On input, it is the starting offset (default 0). On output, it will be 0 if the entire file fit within the specified rectangle. Otherwise, it will be the offset to the first character that did not fit (which can then be passed to a subsequent MX_GDICALC call). - Note that unlike OP 3, where the font and other spacing factors must be set in advance (via MX_GDICALC OP 2), with XTEXT printing, the font and other layout parameters are set within the text file (particularly in the case of RTF files). The MMOGDI sample program in [908,37] of the SOSLIB illustrates the use of //XTEXT and MX_GDICALC, MXGDI_CALCRECTX 3. --- Compiler fix: (1.1.363) - Using a funtion to specify the filename in an OPEN statement was compiling without error, but was not working at runtime. Also, use of the LOOKUP() function within a PRINT statement was causing a spurious syntax error to be reported. 4. --- XTREE/ATE enhancement: For editable trees with cell validation, the amount of data being passed back and forth can become significant enough to cause noticeable delays. When both the server and client side are running 993 or later, an optimization filter is now being applied to reduce the amount of data transfer signficantly. (Even if this does not noticeably improve cell-to-cell time, it should reduce the load on the network and on the server CPU.) You can disable the optimization by defining the environment variable XTREERAW=1 (on either the server or client side). 5. --- INFLD GUI fix: A spurious "!" was appearing in the keyboard buffer after certain message boxes (such as "invalid entry", or "not processed"). 6. --- XTREE new feature: shared lists (combo boxes) that can be associated with individual cells rather than just entire columns. To implement, first define one or more lists (associated with column 0) using the new SharedList= advanced column option: SharedList=id,item1,item2,...itemN The format of SharedList= is identical to List= except that it must begin with a single lower case letter, a-z, which serves as an identifier for the list (allowing up to 26 lists to be defined). To associate one of the predefined lists with a cell, use the new cformat code "s" to define the column as being capable of referencing the lists. Cformat "s" is similar in concept to B (background cell color) in that it reserves the first character of each cell in the column for the index letters that associate the cell with one of the predefined lists. NOTE: if the column also uses cformat B, then the first character of the column is for the cell color code, and the second character will be for the SharedList ID. Note that in additional to allowing different lists for different cells within the same column, as well as the same list to be referenced from multiple columns, you may also define individual cells has having no list (by leaving the ID character blank), or even off-limits to editing (by setting the ID character to "|"). As with cell background colors, the byte reserved for the SharedList ID must also be accounted for in the answer array. The sample program XTRA5C illustrates some of these variations. ============================================================================ A-Shell Development Notes Version 5.0.992.9 (19 Jul 2007) ============================================================================ 1. --- XTEXT: Fix total failure to create control (due to some test code inserted in 992.8). 2. --- XTREE: Further fix to xtr'targetcol issue. It was returning col = 0 when clicking on a cell that had a ClickExit defined, if an editing operation was in effect at that time. ============================================================================ A-Shell Development Notes Version 5.0.992.8 (19 Jul 2007) ============================================================================ 1. --- XTREE Combo box Enhancement: New COLDEF clause ScrollMode=Tree may be used in conjunction with combo boxes (List=) to cause ordinary up/down arrows to move the focus to the previous/next row, rather than to the previous/next item in the list. (In other words, it causes ordinary up/down arrow keys to act the same as Control+up/down.) It also affects ordinary left/right arrows in selection-only combo boxes (where they normally act just like up/down). The intent of this obscure (and somewhat non-standard) 'feature' is mainly to minimize the possibility that users might accidentally change cell values when they were intending to just "arrow around" the grid. (This is much more likely within XTREE, where ordinary cells may turn into combo boxes when they get the focus, than with "normal" combo boxes that may appear in dialogs. Note that in all cases, when the drop-down list is displayed (via ALT+DOWN or clicking on the drop-down button), the arrow keys will operate within the list (so it doesn't interfere with the ability to perform all the necessary combo box functions without using the mouse). The Mouse Wheel operation is similarly affected by the ScrollMode=Tree clause. 2. --- XTREE Combo box enhancement: The DELETE key may now be used in a selection-only combo box to clear the selection, provided that the List definition contains an explicit entry consisting of a blank space, e.g. "List=red,green,blue, ~~". The SPACEBAR will also accomplish the same thing. Note, however, that the XTF_DEL flag overrides this and will cause the XTREE to exit with exitcode -47. 3. --- XTREE Combo box cleanup: In some cases, Control+Left/Right arrow was not advancing out of the current cell. 4. --- Dueling XTREE fix: When one XTREE has the focus, and you click on a cell in another XTREE, the XTR'TARGETROW/COL was failing to identify the cell clicked on if the original XTREE was not in cell editing mode at the time. (This would occur if there was an intermediate click on something else, that terminated the original cell editing operation without causing the first XTREE to exit.) Note that in such a situation, the only way to identify which XTREE was clicked is by the EXITCODE. If you terminate the one XTREE session by clicking on an inactive XTREE, the returned EXITCODE will be the overall exitcode for the inactive XTREE (as set by it's XTR'KBSTR value). The sample program XTRA10 - 1.0(2) has been updated to better illustrate the ability to click between two editable XTREEs. 5. --- XTREE XTR'TARGETCOL fix: The XTR'TARGETCOL was being incorrectly set to 0 when the prior cell-editing operation was exited by some extraneous click prior to the click on the target cell that actually caused the exit. 6. --- DIR.LIT 3.0(142) fixes a problem where output messages (especially "blocks") which should go to the output file were going to the screen instead. Problem was introduced in 3.0(140). ============================================================================ A-Shell Development Notes Version 5.0.992.7 (17 Jul 2007) ============================================================================ 1. --- INFLD GUI fix: Horizontal scrolling wasn't working in editable combo boxes when the fixed pitch edit option was set in the Misc. Dialog. 2. --- XTREE refinement: ClickExit= was taking precedence over checkbox toggling, effectively disabling checkboxes for columns which ClickExit enabled. ============================================================================ A-Shell Development Notes Version 5.0.992.6 (16 Jul 2007) ============================================================================ 1. --- COMPILER (1.1.361) fix: specifying a user-defined function as the control argument to a SWITCH statement was being properly compiled. (Sometimes it worked anyway, but sometimes it would lead to nasty runtime errors, like illegal function value, and often the error was reported on the previous source line.) RECOMMENDATION: Recompile all programs if you think you use this technique! 2. --- XTREE fix: Fold=Upper / Lower option now works with editable combo boxes. ============================================================================ A-Shell Development Notes Version 5.0.992.5 (16 Jul 2007) ============================================================================ 1. --- XTREE Combo fix for W2000: combo boxes within XTREEs were dropping down to a list only 1 pixel high under W2000. ============================================================================ A-Shell Development Notes Version 5.0.992.4 (16 Jul 2007) ============================================================================ 1. --- XTREE fix: combo box definitions lists (from List= COLDEF clause) were not being cleared and redefined by XTROP_REPLACE or XTROP_CREATE. 2. --- XTREE enhancement: New advanced COLDEF clause: TotalLines=# where # is the number of lines at the bottom of the list which represent totals and thus should not participate in sorting. TotalLines=1 is equivalent to setting flag XTF_TOTALS. 3. --- Compiler fix (1.1.360) - Reinstate ability to define a symbol to equal another, e.g. DEFINE SYM1 = SYM2 (was broken in 1.1.359). 4. --- CGIUTL.SBR fix: mode 2 was not recognizing the optional string argument: xcall CGIUTL, 2, parmname, parmval, status {, string} Now, when you specify the string argument, it is processed in place of the stdin. (In this case, you don't even need to be in CGI mode. But the format of string must be "name1=value1&name2=value2&...nameN=valueN", with optional %xx (xx=2 hex digits) encoding of special characters, and optional use of "+" to indicate a space, exactly like in the stdin which is normal fed to the CGI program in POST mode.) ============================================================================ A-Shell Development Notes Version 5.0.992.3 (12 Jul 2007) ============================================================================ 1. --- Compiler enhancement (1.1.358) - Case insensitive compilation option added COMPIL.LIT 1.0(120) Support /CI for case insensitive option. COMPIL.EXE 1.1.358 Support -ci for case insensitive option. 2. --- Compiler enhancement (1.1.359) - Allow benign duplicate DEFINE statements. (Only complain if the new definition changes the value of the previous definition.) Allows "pure" DEF files to be ++included multiple times. Report conflicting duplicate definition error explicitly (rather than as a "duplicate label"). COMPIL.EXE 1.1.359 ============================================================================ A-Shell Development Notes Version 5.0.992.2 (12 Jul 2007) ============================================================================ 1. --- GDI printing fix: Problem was introduced in 991.2 in which GDI printing environment was not getting reinitialized properly at the start of each printout, leading to a variety of printing format problems that would develop after a successful printout, the only cure for which was to close A-Shell and restart it. ============================================================================ A-Shell Development Notes Version 5.0.992.1 (11 Jul 2007) ============================================================================ 1. --- INFLD fix: Combo boxes were not obeying the TYPE e (non-destructive) and ` (destructive) options. Note that in some cases, the internal working of the combo box will override these anyway, but they should work in most cases for the initial state of the combo (if the combo allows typing rather than mere selection from the existing list). ============================================================================ A-Shell Development Notes Version 5.0.992.0 (10 Jul 2007) ============================================================================ 1. --- ATE.EXE 3.0.185 printer config fix: LPP setting was reverting to 66 whenever the printer configuration dialog was displayed. (Note: the fix is in ATE.EXE, not ASHW32.EXE). 2. --- AUI_CONTROL enhancement: new parameter ctype2 added to the end of the XCALL parameter list, to allow for additional control type flags. xcall AUI, AUI_CONTROL, opcode, ctlid, ctext, cstate, ctype, & cmd, func, cstatus, srow, scol, erow, ecol, fgc, bgc, & fontattr, fontscale, fontface, tooltip, parentid, & winclass, winstyle, winstylex, ctype2 3. --- AUI_CONTROL enhancement: new ctype2 flag MBF2_DLGICON (&h00000010) may be used with MBF_DIALOG to cause the dialog to display the application icon on its title bar. This is equivalent to MBF_DLGNOPARENT except without the other aspects of MBF_DLGNOPARENT (i.e. retains the parent child relationship). 4. TAB(-10,AG_CONTROL) enhancement: new ctype2 parameter added to the end (following the stylex parameter as in AUI_CONTROL). ============================================================================ A-Shell Development Notes Version 5.0.991.5 (9 Jul 2007) ============================================================================ 1. --- MIAMEX,MX_FILEPOS fix: it was returning zero in the position parameter for opcode 1 (set position), rather then returning the same position. (This was leading to bugs in programs that built indexes into a file and repositioned to the same location more than once, like in IMGDSX.) 2. --- IMGDSX.LIT 1.2(109). Workaround problem described above (in case running under earlier version of A-Shell). Also, /D:#### auto-advance delay for slide shows now goes up to 65535 seconds (previously 255 seconds). Note: use this technique to display a multi-image set without auto-advance. ============================================================================ A-Shell Development Notes Version 5.0.991.4 (7 Jul 2007) ============================================================================ 1. --- XTREE enhancement: ClickExit= COLDEF clause can now be used with column 0 to set the default for all columns. 2. --- XTREE fix: The Control+Up and Control+Down (implemented in 991.3) were not working correctly when positioned on a top level item. 3. --- XTREE fix: ClickExit was not overriding the PopupMenu when the right-click occurred inside the cell currently being edited. 4. --- XTREE fix: Display-only checkboxes were allowing a click on a checked box to change it to unchecked. ============================================================================ A-Shell Development Notes Version 5.0.991.3 (6 Jul 2007) ============================================================================ 1. --- XTREE fix: further relaxation of the error checking rules added in 991.0. Now, it is permissible for a column definition to contain only a starting position and width (title will default to null and type to string). Apparently some clever (lazy?) developers were taking advantage of this feature(?) to shorten their COLDEF strings, and instead of being thankful for the fact that A-Shell was reporting what it thought was a coding error, they were upset that programs which used to work no longer work. In this case, we decided to abide by the principle of stare decisis. 2. --- XTREE enhancement: The + and - keys o the main keyboard now work like those on the numeric pad as a means of expanding or collapsing the current item (in a multi-level tree). 3. --- XTREE enhancement: Control "+" and Control "-" now work as shortcuts in a multi-level tree to expand all or collapse all. 4. --- XTREE enhancement: Control+UpArrow and Control+DownArrow in a multi-level tree moves the selection bar up/down to the previous item which is at the same level as the current item, but which has a different parent. If necessary, this will cause the target item to be made visible by expanding its parent(s). This might be useful as a quick way to jump between sections of a multilevel tree. 5. --- XTREE modification: If a right-click exitcode is defined for a particular column (via ClickExit=,), in addition to a PopupMenu, the right-click exitcode will take precedence. (That is, right-click will cause XTREE to exit with the specified code, rather than display the PopupMenu.) This is mainly of use in conjunction with the feature below. 6. --- XTREE enhancement: You can now force a popup menu to appear immediately on entrance into XTREE, by setting XTR'XNAVMASK = 64. In this case, the PopupMenu corresponding to the current column will be displayed immediately, even if there is also a ClickExit defined for it. This allows the application to effectively update the popup menu, based on conditions which may have changed since the XTREE was first entered, before the popup menu is displayed. 7. --- INFLD fix: Self-combos where sometimes leaving a space in the keyboard buffer, which would show up in the subsequent field. ============================================================================ A-Shell Development Notes Version 5.0.991.2 (3 Jul 2007) ============================================================================ 1. --- XTREE fix: the error checking improvements in 991.0 were causing some XTREEs (probably just those with embedded nulls in the input array) to not fully load, leaving many empty cells. The rules have now been partially relaxed to allow such trees to load as they did pre-991.0. 2. --- INFLD enhancement: The internal (returned) format of dates is now dependent on maxchars rather than xmax when in GUI mode. (In text mode, xmax is increased to match maxchars, so the two are always the same.) This permits the width of the field to be shortened in cases where screen real-estate is at a premium, without affecting the size or format of the data. 3. --- Design mode improvement: Reduce the amount of flicker related to highlighting target controls, and also allow an alternate method (in which the cursor changes to a hand instead on an arror). (This probably only affects LEO.) 4. --- LP Tracing enhancement: all the messages now go to the log file and/or the debug window, rather than the main window. A couple of additional LP trace messages added. 5. --- GDI printing fix: close one loophole by which an apparent margin would get established and then carry over to subsequent printouts. ============================================================================ A-Shell Development Notes Version 5.0.991.1 (28 Jun 2007) ============================================================================ 1. --- XTREE fix: right-clicking on one cell to display a context menu, while editing another, was not returning xtr'targetcol set to the column where the right-click occurred. ============================================================================ A-Shell Development Notes Version 5.0.991.0 (27 Jun 2007) ============================================================================ 1. --- XTREE error checking improvements: it now tests for, and reports some common errors relating to bad COLDEF strings, such as specifying the XTF_COLDEF flag when COLDEF is not in the advanced format, or incompletely defined columns. Also, better tests are used to prevent out-of-range column position or width values from causing XTREE to crash. 2. --- ATE FTP improvement: Forward slashes in the PC spec are now converted to backslashes. (Previously, this common error caused the entire PC spec to be treated as a single directory spec, generally creating a new directory in the process.) 3. --- INFLD now recognizes LATIN 1 accented characters as being alphabetic for the purposes of capitalization and alpha-only character acceptance. ============================================================================ A-Shell Development Notes Version 5.0.990.9 (26 Jun 2007) ============================================================================ 1. --- //TEXTCENTER no long requires quoting of the text argument if it contains commas. (Quoting is still allowed, even recommended, but it's easy to overlook.) ============================================================================ A-Shell Development Notes Version 5.0.990.8 (26 Jun 2007) ============================================================================ 1. --- INFLD enhancement: TYPE |\ disables the display of the INFLD "about" box (normally triggered by Control-\). This is mainly a workaround for a problem where the about box is being triggered unexpectedly. Also: don't show the SBR=INFDEF: codes in the INFLD about box when those codes are not active in the current call. (This would be the case at the dot prompt or anywhere TYPE "m" is active.) ============================================================================ A-Shell Development Notes Version 5.0.990.7 (25 Jun 2007) ============================================================================ 1. --- AUI_IMAGE / IMAGE.SBR: fix failure to take into account the ALTPOS dialog grid scale factors (most noticeable when maximizing). 2. --- Minor tracing improvement: XCALL/XDEBUG traces now show the RUN module memory address. 3. --- Memory management cleanup fix: certain modules were sometimes being deleted twice from memory (probably harmless, definitely sloppy). Also, add more safety checking to memory deletion requests and better tracing of anomalies. 4. --- MIAMEX, MX_USRIO enhancement: new IO modes 4 and 5 allow searching within a memory module for a string: xcall MIAMEX, MX_USRIO, STATUS, MODULE, MODE, VAR, OFFSET MODE 4 is case insensitive, MODE 5 is case sensitive. VAR in these modes must be set to the string to search for. OFFSET is the starting offset from the base of the module (as with other MX_USRIO modes). STATUS returns the offset to where the the string was found (or -1 for not found). Note that like other MX_USRIO offsets (but unlike the INSTR() function), the offsets here are zero-relative (i.e. zero is the first position). 5. --- INIX.SBX new version 5.0(600) replaces the 4.x version. New version requires 990.7 or higher, but performs better. ============================================================================ A-Shell Development Notes Version 5.0.990.6 (19 Jun 2007) ============================================================================ 1. --- UNIX troubleshooting aid: if a segmentation fault occurs, the ashlog.log entry will now show the location counter. (This can be used with the listing generated by the COMPIL /L switch to locate the last instruction.) ============================================================================ A-Shell Development Notes Version 5.0.990.5 (17 Jun 2007) ============================================================================ 1. --- Fix margin problem with maximizing main A-Shell/Windows window on secondary monitor. (If primary monitor was wider than secondary monitor, it was adding too much left margin, causing the last N columns to be cut off the right edge.) ============================================================================ A-Shell Development Notes Version 5.0.990.4 (14 Jun 2007) ============================================================================ 1. --- AUI_EVENTWAIT bug fix: EVW_RAW was not returning the proper ctlid value. 2. --- COMPILER fix (Does not require updating COMPIL.LIT/OCMPIL.LIT/COMPLP.LIT, but does require updating COMPIL.EXE for The Editor to 1.1.357) : With /X:1 or higher, the compiler was not allowing a LOOKUP statement to immediately follow an IF condition unless there was a preceding THEN. (It was reporting a syntax error.) For example: IF A=B LOOKUP F$,X ! (caused syntax error) IF A=B THEN LOOKUP F$,X ! (ok) The problem had to do with the dual nature of LOOKUP (with /X:1 or higher, it can be a statement or a function), and the fact that prior to "THEN", the IF condition could possibly be made up of additional non-statement tokens such as logical operators, functions, etc. As of 990.4 (or COMPIL.EXE 1.1.357), it looks ahead to see if the next non-space is a "(" to decide whether it is really the LOOKUP statement or the LOOKUP function, thus eliminating the confusion. 3. --- UNIX/ATE server side fix: If a screen area save or restore was immediately followed by local (text mode) input operation, the keyboard may have been locked. ============================================================================ A-Shell Development Notes Version 5.0.990.3 (12 Jun 2007) ============================================================================ 1. --- Fix bug in the mechanism of storing/retrieving the last ashw32.exe command line. The only reported symptom was that A-Shell would report "?/ashw32.cl?" on the command line after being relaunched by the Update Center. 2. --- GDI printing fix: //TEXTRIGHT was not working properly in landscape mode. 3. --- Function/Procedure error handling fix: attempting to call a function or procedure from within an error trap was generating an error during error trap. ============================================================================ A-Shell Development Notes Version 5.0.990.2 (11 Jun 2007) ============================================================================ 1. --- DIR.LIT 3.0(141) no longer treats /W as both /WIDE and /WARN. 2. --- Compiler enhancement: COMPIL.LIT 1.0(119) supports a new switch: /LF (List File) which creates a consolidated list file showing all of the source (with all of the ++include files merged in). Each line of the source is marked with the internal location counter, which is how Basic errors report their location when a program is compiled without line numbers. (This can be quite handy in tracking runtime errors, eliminating the need for inserting line numbers and other kinds of traces.) The list file will be named .LSX (LiSt with indeX) Note: you can shorten /LF to /L 3. --- Editor compiler enhancement: COMPIL.EXE 1.1.356 implements the -lf switch (equivalent to /LF described above). To add this to your compiler switches inside The Editor, you must add it in the "Custom Arguments" box at the bottom of the Compiler Settings dialog. Note that unlike with COMPIL.LIT, -lf cannot be abbreviated (and is case sensitive). 4. --- Error reporting enhancement: Now that we have a means of cross-referencing "location counters" with source statements, the location counter of the last error has been added to various error messages, including the TRACE=BASERR log message and XCALL ERRMSG (DERR). Also, a new err(8) function has been implemented to retrieve the location counter corresponding to the last error. Note that by convention, location counter values are displayed in hex, but the Basic PRINT statement has no way to know this, so if you are going to PRINT the value of err(8) you should use MIAMEX,MX_OCVT, or the Fn'Dec2Hex$() function in the SOSLIB to output it as hex. ============================================================================ A-Shell Development Notes Version 5.0.990.1 (11 Jun 2007) ============================================================================ 1. --- XTREE enhancement: Add column definition clause HdrClickExit=###. When specified, clicking on that column header causes an exit with the specified exitcode. It returns the XTR'COLUMNSORT() and XTR'SORTORDER() fields as if a sort had taken place, but it doesn't actually sort. The intent is to allow applications to implement their own sort logic. Note that when HdrClickExit=### is defined for a column, that column will not be sorted on entry even if the column appears in the initial XTR'COLUMNSORT() array. If you want subsequent clicks on the column header to toggle between ascending and descending, you must leave the XTR'COLUMNSORT() set to the specified column on re-entry. (Otherwise the initial sort for any unsorted column will always be ascending.) 2. --- XTREE fix: When sorting was disabled, clicking on a column header in order to make that the active column (for the purposes of auto-search based on keyboard input) wasn't always working. 3. --- COMPIL enhancement: The switch combination /B/T will now output the trace (i.e. the source listing) to the file .LST. This is useful for creating consolidated listings (with the ++includes all combined) but note that it probably isn't useful for locating errors (because /B outputs the error messages to the same file). So it should probably only be used after you have fixed all the compil errors. Also, don't try to use /T with The Editor, or it will think that every line of your program is an error. ============================================================================ A-Shell Development Notes Version 5.0.990.0 (10 Jun 2007) ============================================================================ 1. --- Reorganize the internal embedded custom developer icons to correct the problem introduced very recently in which desktop shortcuts referencing one of the custom icons were having their icons changed after updating ASHW32.EXE. The new scheme should be immune to this problem as icons are added in the future. 2. --- Fix a problem with the mechanism of saving the last command line. It wasn't working if the %USERPROFILE%\A-Shell directory didn't exist. (The effect was limited, but would have been noticeable when using the update center, which uses the feature to relaunch the session using the previous command line.) 3. --- $ATE expansion in the TAB(-10,AG_WINEXEC) command was clobbering the first two characters following "$ATE". 4. --- Fix intermittent problem of not being able to launch FTP after an update due to the need to re-register the FTPDLXcall.DLL. It now gets re-registered automatically on first use. 5. --- ATE no longer uses the local PC copy of ASTART.CMD[2,2]. This avoids a confusing conflict when ATE and A-Shell/Windows share a directory tree. Now, ATE looks for ATE looks for ATESTART.CMD[2,2] on the PC side before launching the TELNET session. ATESTART.CMD[2,2] would only be of interest if you wanted to customize the ATE environment by running one or more programs (perhaps, to customize the menus) before starting the TELNET session. The more common way to customize the ATE environment would be from the server side after you've connected. 6. --- DIR.LIT 3.0(140) no longer reports (by default) the "Warning: skipping incompatible filespec" message. (This was mostly an annoyance.) You can force the message to appear by using the new switch /WARN. When it does appear, it displays the full path (making it easier to find the offending file.) 7. --- DIR.LIT 3.0(140) also supports a new switch, /NA{TIVE}{:len} which displays files in the native format of the host operating system. The len subparameter (default 24) determines the maximum display width for the filespecs. If the filename exceeds that, it is terminated with ">" just as when /NATIVE is not used. /NA{TIVE} causes the following other effects: - "Incompatible files" are treated like any other files (i.e. displayed instead of skipped). - File sizes are shown in bytes instead of blocks - File names are shown in upper and lower case as they really are. - When combined with /D, displays entire path for each file. Otherwise, displays just the filename + extension(s) (but for each new directory, displays the directory in native format instead of the DEV:[p,pn] format.) - /W will default to /W:2 ============================================================================ A-Shell Development Notes Version 5.0.989.3 (04 Jun 2007) ============================================================================ 1. --- Fix problem the drop-down portion of certain combo boxes being only 1 pixel tall. (Problem mainly occurred under W2000, and only when the Misc. Settings option to make the edit box height match the combo box height was selected.) 2. --- Self combo fix: close a timing loophole that was causing the effect of closing the self-combo display as fast as it was opened. 3. --- ATE: fix annoyance where the window would be cleared on return from displaying the ATE connection properies. This should only happen when the emulation is changed. ============================================================================ A-Shell Development Notes Version 5.0.989.2 (01 Jun 2007) ============================================================================ 1. --- XTEXT fix: left click on inactive tree wasn't always sending the click string (or was mixing the left click string with the right click string). 2. --- XTEXT fix: initial caret position was sometimes out of sync with actual cursor. This was purely an aesthetic issue, since any editing action would have re-aligned it, but it was still annoying. 3. --- XTREE enhancement: XTR'NEXTROW field (previously unused) has been renamed to XTR'TOPINDEX and may now be used to force the initial display vertical scroll position. To activate the feature, set XTR'TOPINDEX to the desired first visible row (1=first). Once set, it will be updated on exit, so that a subsequent re-entry will enter in the same position. To disable the feature, set it to 0. Note that this will override the default logic which normally tries to position the vertical scroll so that the initially selected row is visible. 4. --- AutoMouse refinements: When using default translations (i.e. double click on a screen token to send it to the keyboard), automatic trailing CR was being disabled by scrolling INFLD fields. Now CR should be automatic except when INFLD is processing a Fast field. Also, slash is no longer considered a token delimiter. Finally, activating AutoMouse turns the mouse cursor to an arrow. ============================================================================ A-Shell Development Notes Version 5.0.989.1 (31 May 2007) ============================================================================ 1. --- SEND.LIT 2.2A(121) under UNIX now supports a /W switch to send a "Window" message if the terminal is a ZTERM or ATE workstation. Otherwise it acts just like SEND without a switch. The Window version of the message launches an external application, ASMSG.EXE which must be in the path on the workstation. The best place to put it is in the directory where ATE or ZTERM is launched from (e.g. typically c:\program files\microsabio\ate\bin or c:\program files\cool.stf\zterm for windows, although it could also be the Windows directory. The idea of using an external program to display the message is to allow sites or resellers to customize the message utility. We provide a very simple example in the SYS: directory of the UNIX releases now. If you want to create your own, the requirement is that it support the following command line format: asmsg.exe /T:title /M:message To distribute the utility, you may want to add logic to your application startup to use the ATSYNC mechanism, or a standard ZTERM file transfer, to copy it from the server to the workstation. The utility is small enough that this will take nearly no time at all. We would have done this automatically within the message handler, but since file transfers can sometimes require user intervention, it seems questionable to get into that during a signal receiving routine. Note that the existing AWMSG.EXE which is distributed with A-Shell/Windows and used by default with SEND.LIT will work fine with the UNIX version (just copy it to ASMSG.EXE). The only difference between it and the standard release ASMSG.EXE is that ASMSG.EXE displays a much bigger window. 2. --- (UNIX): Fix a bug in the SEND message handler when the client is ATE. It was trying to launch AWMSG with an invalid filespec. 3. --- XTEXT fix: It was not returning TXC'CTLID as suggested by the documentation. 4. --- XTEXT enhancement: Two new bits have been defined in the TXC'FLAGS8 field to force ESC to be interpreted as either save-and-exit or abort-and-exit without popping up the dialog to prompt. &h80000000 - Force ESC to save any changes and then exit. &h40000000 - Force ESC to exit without saving any changes. 5. --- EVENTWAIT fix: Close an obscure loophole in which EVENTWAIT could confuse a new dialog with a previously deleted dialog, if the new dialog had the same ID. This would affect the way EVW_EXCDINOUT is handled. (On the first call for a new dialog, the EVW_EXCDINOUT flag is normally ignored.) 6. --- EVENTWAIT enhancement: Buttons with exitcode values -1 thru -32 may now be used with EVW_EXCDINOUT. Previously, only buttons with exitcodes beyond -100 would be eligible. The new behavior allows buttons that emulate the standard function keys to be used with EVW_EXCDINOUT. ============================================================================ A-Shell Development Notes Version 5.0.989.0 (28 May 2007) ============================================================================ 1. --- Fix 64K limit issue in size of an individual PRINT statement. (Attempting to exceed that was causing an infinite loop as an internal counter was rolling over to 0 after 64K.) Problem went back to "Day 1". Apparently it has taken this long before someone tried to PRINT a variable or expression longer than 64K. 2. --- Fix 64K limit issue in various string expressions (such as concatenate). 3. --- Optimize INSTR() function in case where the key string is only 1 char. (Improvement is only noticeable when using INSTR on huge source strings.) 4. --- MX_COPYFILE: Under UNIX, the copy operation is now handled internally (rather than shelling out to cp). This resolves some nagging issues with detection of errors and also ownership of the created file. 5. --- XTREE: Arrow keys were not working for navigation when in checkbox and radiobutton cells. 6. --- AUI_CONTROL: CTLOP_CHG with MBST_STYLE was not actually saving the updated control type flags in the control table. ============================================================================ A-Shell Development Notes Version 5.0.988.9 (22 May 2007) ============================================================================ 1. --- SYSTAT.LIT 3.0(157) supports an /ATE switch which identifies ATE connections (in place of the pid), either "ATE/SRV" to indicate that the license was issued by the server, or else "ATE/PC" for any other ATE connections. 2. --- XTREE fix: Shift key was not working properly in some editable cells. ============================================================================ A-Shell Development Notes Version 5.0.988.8 (21 May 2007) ============================================================================ 1. --- A-Shell/Windows/ATE internal dialogs now display on top, eliminating the possibility of being able to cover them with an A-Shell floating dialog and get fooled into thinking the session was stuck. ============================================================================ A-Shell Development Notes Version 5.0.988.7 (19 May 2007) ============================================================================ 1. --- COPY.LIT 3.1(128) fixes a problem whereby it would fail to detect certain copy failures (particularly, privilege error). 2. --- MX_COPYFILE: Under UNIX, when an error occurs, we now capture the detailed message (as cp or mv would have output it). This allows COPY.LIT 3.1(128) to display a more accurate error message (although it will still report the failure to copy, even without this update to the A-Shell executable.) If you use MX_COPYFILE in your own programs, and receive a non-zero STATUS, you can examine the contents of .tmp for the message. 3. --- Fix an internal window for memory corruption during the A-Shell/Windows startup if it needs to reverse-translate an 8.3 mangled spec (for the miame.ini) into a properly long filename. 4. --- MX_SETENV enhancement: If changing the definition of the TERM variable, it now re-initializes the terminal to reflect the new emulation setting. ============================================================================ A-Shell Development Notes Version 5.0.988.6 (16 May 2007) ============================================================================ 1. --- EVENTWAIT enhancement: If there is a control present that sends exitcode -35, then don't treat is as a "prev-control". (This resolves some of the conflict with the use of "reserved" exitcodes in legacy programs that don't start their field-click-exitcodes at 100. Note that this only works if you don't use the EVW_EXCDFOCUS.) As a general rule, you should avoid using exitcodes between -100 and +100 for controls. 2. --- INFLD GUI fix: SHIFT-TAB was returning EXITCODE 9 instead of -35 when neither |2 nor 3 TYPE codes used. The issue was rare, since normally one of those would be used to treat SHIFT-TAB like up arrow (3) or left arrow (2). ============================================================================ A-Shell Development Notes Version 5.0.988.5 (15 May 2007) ============================================================================ 1. --- SET.LIT 1.2(149) fixes a bug in which the DEBUG status was always showing NODEBUG. 2. --- EVENTWAIT fix: EVW_EXCDFOCUS was not working with non-INFLD checkboxes and radiobuttons. (Was not allowing the focus to be placed on those controls.) ============================================================================ A-Shell Development Notes Version 5.0.988.4 (10 May 2007) ============================================================================ 1. --- USRCNT: New optional parameter returns the count of A-Shell instances, including the current one, which are running on the current machine. Added primarily for the benefit of ASHUPD (to make sure there are no other instances of A-Shell running that would interfere with an update), it might also be useful to applications attempting to monitor usage for the same reasons they are already using USRCNT.SBR. Syntax: XCALL USRCNT, PCOUNT {,LCOUNT {,MCOUNT {,IXCOUNT}}} Where IXCOUNT (F or I) returns the executable instance count, including the current instance. -1 indicates some kind of error (like an inability to execute the ps command under UNIX.) 0 would indicate a different kind of error (i.e. that the current instance is detecting neither itself, nor any other error while scanning the process or window list.) For Windows, this is a count of windows sharing the A-Shell main window class (MIAMEWClass). Note this would include A-Shell/Windows and ATE, which could involve more than one actual ASHW32.EXE executable. Note that in a peer-to-peer environment, one peer running this function would not see the other peers that may be sharing the same copy of ASHW32.EXE. (In this case, you should probably use SYSTAT as well to check for the possibility of other instances of A-Shell which share the ASHW32.EXE disk copy, but which are in different memory spaces or different workstations.) For UNIX, it uses "ps" to check for processes whose launch command references the current executable (which isn't necessarily named "ashell"). In either case if the IXCOUNT value is greater than the LCOUNT (logical instance) value, that implies that there are instances of A-Shell running that aren't sharing the same JOBTBL.SYS. 2. --- Windows About box: Add button to go to website. 3. --- ASHUPD.LIT 1.1(105) enhancements: - It checks for an existing update in progress (or possibly a hung prior instance) and attempts to delete UPDATECENTER.TEMP.EXE if needed. If it can't delete it, it reports the problem (better than leaving you wondering.) - It checks for multiple instances of ASHW32 running, refusing to update if in /FAST mode, or giving you abort/retry/ignore options if in interactive mode. - Increase initial timer from 5 to 10 seconds before reporting that the check for updates failed. ============================================================================ A-Shell Development Notes Version 5.0.988.3 (9 May 2007) ============================================================================ 1. --- INFLD: Fix problem with symbolic control names specified in the V parameter (e.g. V = ">ctlname") being lost in ATE. (Fix requires the server side to be updated - not necessarily the client side.) ============================================================================ A-Shell Development Notes Version 5.0.988.2 (8 May 2007) ============================================================================ 1. --- XTEXT: Add TXC'MAXBYTES fields to TXTCTL structure to allow a maximum number of bytes to be specified for the text memo. End of TXTCTL structure (in XTEXT.MAP) now looks like this: ... map2 TXC'TIMEOUT ,B,4 ! 186 timeout (ms) map2 TXC'IDNAME ,S,40 ! 190 ctlname or parentname>ctlname map2 TXC'MAXBYTES ,B,2 ! 230 max bytes allowed (0=unlimited) map2 TXC'UNUSED ,X,24 ! 232 (256 total) Notes: The mechanism for determining when the limit is reached is not perfect, and only operates during the processing of normal keystrokes. It does not operate during the paste operation, nor during the memo load, nor during replacement operations. (These loopholes may be closed in a later release.) Also, field only supports a limit of up to 64K, on the theory that the space in the TXTCTL structure is more valuable than the likelihood of somebody wanting to set a limit of more than 64K. (However, if anyone sees a problem with that before we assign the next byte in the TXC'UNUSED field, we can just expand it to B,3 without affecting existing programs.) 2. --- MIAMEX MX_OSVER: now supports returning information about the ATE client. New syntax: xcall MIAMEX, MX_OSVER, OSNAME {,OSVER, {,OSREL {,ASPLATFORM & {,ATE'OSNAME {,ATE'OSVER {,ATE'OSREL {,ATE'PLATFORM}}}}}}} The parameters ATE'OSNAME, ATE'OSVER, ATE'OSREL, and ATE'PLATFORM are equivalent to the OSNAME, OSVER, OSREL and ASPLATFORM parameters, except they return the information about the ATE client, if applicable. Otherwise they return null strings. Note: this requires updating both the ATE and server sides to 988.2+. The MIAMEX.BP sample program in [908,30] of the SOSLIB has been updated to test/illustrate the new fields. ============================================================================ A-Shell Development Notes Version 5.0.988.1 (7 May 2007) ============================================================================ 1. --- XTREE: Fix annoying jiggle in vertical scroll bar when using XTROP_REPLACE. (Problem surfaced in 987.3). 2. --- Dialog positioning with multiple monitors: Extend the logic introduced in 987.1 for determining which monitor to put a dialog on, to work with parent-less normal dialogs. (Previously it only worked with centered and maximized dialogs). 3. --- XTEXT: Reinstate operation of F5 (search) and F6 (replace), which were replaced in edit 977 by the more standard ^F and ^H commands when the TER14.DLL replaced TER13.DLL. Now either command can be used. F3 performs a search-next and Shift-F3 does search-prev. You can also use the ^F and ^H commands to initiate search and replace, but note that ^F still acts internally like F5, meaning that you have to use the txc'fmapctl and txc'fmapapp fields to send it to either the XTEXT control or the application. ============================================================================ A-Shell Development Notes Version 5.0.988.0 (5 May 2007) ============================================================================ 1. --- XCALL MIAMEX,MX_CLIPBOARD: Now works with ATE as it does with A-Shell/ Windows. However, in order to avoid breaking compatibility with an undocumented A-Shell/UNIX feature in which it used MEM0:.CLP[1,1] as a pseudo-clipboard buffer, if you want to force it to use the new behaviour in ATE environments, you must add +2 to the opcode. 2. --- SUBMIT.LIT 3.1(148) fixes a problem which the "/L logfile" switch being confused with /LIST. (The problem only occurred if you used a space between the /L and the logfile.) 3. --- ASHICO1.DLL 1.0.0.5 now includes a set of "media" icons: media_beginning media_end media_fast_forward media_pause media_play media_play_green media_rewind media_step_back media_step_forward media_stop media_stop_red music Sample program ICODLG in the SOSLIB updated to display the new icons. 4. --- AUI_WINDOW fix: Using flg=-1 and cid=-1 or cid=-2 now always returns information about the primary monitor only. Previously, it was ambiguous since if there were two monitors, it would return information about the combined area if the second monitor was to the right, but only about the primary monitor if the second monitor was to the left. 5. --- AUI_WINDOW enhancement: Add new flg -2, which acts similarly to -1 except is designed specifically to retrieve information about multiple monitors, both together and individually, depending on the value of cid: cid = -1 ! return rectangle coordinates for primary monitor cid = -2 ! return rectangle coordinates for primary work area ! (monitor less task bar) cid = -3 ! return rectangle coordinates for second monitor cid = -4 ! return rectangle coordinates for second work area ! (monitor less task bar) cid = -5 ! return rectangle coordinates for third monitor cid = -6 ! return rectangle coordinates for third work area ! (monitor less task bar) cid = -99 ! return rectangle coordinates for total virtual screen flg -2 also supports an optional additional argument, monitors, which returns the number of monitors: xcall AUI,AUI_WINDOW,flg,lft,top,rgt,btm,rows,cols,tsts,bsts, & cid,vwidth,vheight,monitors The coordinates in all cases are returned in the lft,top,rgt,btn parameters in pixels. Note that the coordinates of secondary monitors may be negative. The primary monitor always starts at 0,0. The rows,cols,tsts,bsts parameters are not used in this mode. The parameters vwidth and vheight return the overall virtual desktop height and width. The sample program AUIWIN in the SOSLIB[908,28] has been updated to demonstrate the new features. 6. --- TER14.DLL (XTEXT control) updated to version 14.0.4.3 (misc internal bug fixes). 7. --- ASHUPD.LIT 1.0(103) Now displays the list of modules to be updated, rather than just indicating the total number of files and bytes. Also, a new switch, /F{AST} has been added to stifle all user interaction requiring a user response. (That is, it checks for updates and either performs them or reports there are none, without waiting for user confirmation). This could be useful in CMD file where you always want to update if possible, without bothering the user to make decisions. (The updated source code is in [901,2] of the SOSLIB.) 8. --- INMEMO.SBR: Delete operation no longer reports memo links to the screen. All link errors continue to be reported to the ashlog.log file in any case, but it was decided that this particular error was not worth bother the user about. ============================================================================ A-Shell Development Notes Version 5.0.987.7 (27 Apr 2007) ============================================================================ 1. --- Dialog positioning with multiple monitors: When a dialog is created using either the MBST_CENTER or MBST_MAXIMIZE state flags, it will now be positioned on the same monitor as the main window was last positioned on (or originally launched from). ============================================================================ A-Shell Development Notes Version 5.0.987.6 (26 Apr 2007) ============================================================================ 1. --- MIAMEX,MX_EXITSBXX (82) in a main program was not terminating the chain sequence. If there was nothing left in the chain sequence, it was just causing the current program to be run again. ============================================================================ A-Shell Development Notes Version 5.0.987.5 (26 Apr 2007) ============================================================================ 1. --- XTREE: Fix memory leak related to column-specific popup menus. If used enough, you could eventually run out of memory handles. ============================================================================ A-Shell Development Notes Version 5.0.987.4 (25 Apr 2007) ============================================================================ 1. --- XTEXT: Setting xtx'protrow = -1 to protect all text in the memo was causing new text to appear with the protected background color if the memo was empty to start with. 2. --- MSGBOX: Back out item #11 under 984.2 in which MSGBOX was reverting to text mode if PolyShell was active. Although this made sense for text mode displays, it does not make sense for GUI displays, which may be unlikely or even questionable with PolyShell, but at least now you can see the message box. And, you can still control whether the MSGBOX is GUI or text yourself, by adjusting the MX_WINSETTINGS. (This adjustment only affects the UNIX side, which is where the decision to use a GUI or text mode MSGBOX is made.) ============================================================================ A-Shell Development Notes Version 5.0.987.3 (24 Apr 2007) ============================================================================ 1. --- XTREE image fixes: - If the first item image wasn't found, none would load. - The image-not-found error was forcing open the debug dialog. It now logs the error but doesn't force open the dialog window. - Trees with fixed height images were display the images one item too high (out of sync with the rest of the image data)! - XTROP_REPLACE was not preserving the image display. ============================================================================ A-Shell Development Notes Version 5.0.987.2 (23 Apr 2007) ============================================================================ 1. --- XTREE: Fix problem with read-only cells not setting the targetcol and xvalidate fields properly on pre-exit. ============================================================================ A-Shell Development Notes Version 5.0.987.1 (23 Apr 2007) ============================================================================ 1. --- Fix data alignment problem that was intermittently causing certain ATE transfer operations to fail. One symptom was apparent failure to remember FTP login. 2. --- Fix problems related to adding menus to dialogs. In some cases, the new menu was not being drawn until some other event or a dialog refresh was forced. Also, the rule of increasing the height of the dialog by the height of the menu only for ALTPOS dialogs was not always being followed. 3. --- Increase maximum line length in printer init files from 100 to 256 (to accommodate particularly long DEVICE= and COMMAND= lines). ============================================================================ A-Shell Development Notes Version 5.0.987.0 (22 Apr 2007) ============================================================================ 1. --- MX_SHELLEX: Fix bug in which the ACTION$ parameter, if not specified, would not get initialized and would result in an "invalid parm" error. 2. --- The virtual environment variables ATE, CurrentDirectory, SystemDirectory, and WindowsDirectory were not being recognized by TAB(-10,AG_GETENV). All but ATE were not being recognized either by AG_GETENV or the general filespec evaluator. 3. --- MSGBOX: Fix problem with certain flags (particularly MBICON_ICON and MBMISC_TOPMOST) causing a sign-extension problem when used with ATE, with the result being that the message box appears without the correct buttons, and often with an "invalid parameter" message inside the box. 4. --- XTREE control (SftTree_IX86_A_50.dll) updated from 5.0.5 to 5.0.6. Fixes a problem in which the last word in a variable height cell with word wrap was getting vertically clipped. Minor internal improvements for improved Vista compatibility also. 5. --- Fix problem with trace.print causing a memory fault when very long strings output. (Messages are now truncated at about 256 characters.) 6. --- Convert the MIAME directory from the mangled 8.3 format to long format before defining the MIAME and ATE environment variables. 7. --- Expand filename buffers in various places to 260 characters (from 100 to 160, depending on the situation), fixing problems with truncation of very long filenames in certain operations. 8. --- Fix problem with all controls within a dialog getting set to design mode when modifying the dialog attributes. 9. --- It is now possible to use AUI_CONTROL CTLOP_CHG with MBST_CHGALL on a dialog. (Previously this would have caused all the controls on the dialog to disappear, as well as the dialog caption, to disappear. 10. --- Fix a problem with using the AG_SPOOLCFG technique for transferring files with long names to the ATE client. Note that if destination file name has no directory separators and is longer than 10.3, you should precede it with ".\" to force it to be recognized as a native filespec (and not be truncated to 10.3). 11. --- ASHUPD.LIT 1.0(102) included with A-Shell/Windows release; may be used to retrieve incremental updates via the Update Center. ============================================================================ A-Shell Development Notes Version 5.0.986.9 (19 Apr 2007) ============================================================================ 1. --- INFLD: Setting PARENTID to ">fname" (i.e. without a parent name or number prior to the ">") was causing it to double the row. 2. --- XTREE: The limit on the number of RGBfg and RGBbg color definitions has been increased from 16 to 26 (from A-P to A-Z). 3. --- XTREE: Masks were not being applied to data loaded from the ANSARY. (This was only an issue when the application pre-loads the ANSARY data, rather than just clearing it to spaces and letting XTREE load it, but that's not uncommon.) 4. --- Compiler fix: Use of the CHAIN statement within a Function or Procedure was reporting the wrong error message. It was saying "Illegal IF construct" but it should have said "Illegal operation inside function" 5. --- XTREE: Fix cell editing problem in which certain editing characters (e.g. backspace, delete) would stop working after passing through a read-only editable cell. ============================================================================ A-Shell Development Notes Version 5.0.986.8 (18 Apr 2007) ============================================================================ 1. --- XTREE: Editable cells with conditional validation were always acting as if they had been changed if there was a mask defined. ============================================================================ A-Shell Development Notes Version 5.0.986.7 (17 Apr 2007) ============================================================================ 1. --- XTREE: When exiting an editable tree from selection mode (as opposed to editing mode) the returned XTR'ROW and XTR'TARGETROW are now set to the row # (just as ANSWER would have been for a non-editable tree) and XTR'XCOL / XTR'TARGETCOL are set to 0. On re-entry, this combination will select the row but not start out in editing mode. Previously this was somewhat inconsistent, making it difficult for an application that cared to either detect, or control, whether the XTREE enters/exits in selection mode rather than editing mode. ============================================================================ A-Shell Development Notes Version 5.0.986.6 (16 Apr 2007) ============================================================================ 1. --- XTREE: Fix various bugs with XTF_DRAGDROP when used in conjunction with editable cells or without XTF_MSEL. ============================================================================ A-Shell Development Notes Version 5.0.986.5 (16 Apr 2007) ============================================================================ 1. --- XTREE: On entering an editable tree with targetrow/targetcol=1,1 (or xrow/xcol=1,1), if the real column 1 was hidden, the edit was starting in the last column of the row, instead of the first. (This wasn't exactly a bug, since you are supposed to specify the real column number (based on the order of the column definitions) not the display column number. In the case where this is a re-entry and the previous exit was caused by a navigational key, then the initial cell would be determined by moving in the same direction until we hit an editable cell. On an initial load, there is no navigational history to guide us the app tries to put the edit focus on an invisible column, but defaulting to the first visible column seems to make more sense. ============================================================================ A-Shell Development Notes Version 5.0.986.4 (15 Apr 2007) ============================================================================ 1. --- EVENTWAIT fix: It wasn't treating checkboxes created by INFLD as INFLD controls, and thus wasn't exiting when the focus was put on one (assuming EVW_EDIT flag set). ============================================================================ A-Shell Development Notes Version 5.0.986.3 (13 Apr 2007) ============================================================================ 1. --- GDI Printing Fix: Increase maximum paragraph length supported by the //TEXTRECTANGLE command from 1K to 16K. This is considerably longer than can fit on a page, which is the effective limit for what a single //TEXTRECTANGLE can handle anyway. Larger paragraphs can still be analyzed by MX_GDICALC, it would inevitably break them up into rectangles (or entire pages) that were individually less than 16K (unless perhaps you used 2 point type in an effort to cram 16K of unreadable text on a page). An error message box will be displayed if any single line of the printfile exceeds the 16K limit. Note that neither MX_GDICALC nor //TEXTRECTANGLE support the line continuation character (\) so unless you want to insert your own line breaks, the entire paragraph has to be output as a single line (with the only CRLF being at the end). 2. --- HOST.LIT 2.0(102): Now supports the ability to plug in your own exit subroutine to be called when A-Shell exits via the HOST.LIT command. HOST.LIT now looks for OPR:HOST.SBX, and if it is found, it loads it and xcalls it before exiting. (Since the OPR: account is not in the normal SBX search path, this feature should not conflict with any existing HOST.SBX routines that may exist.) If the OPR:HOST.SBX is not found, HOST just exits in the normal way. 3. --- SHLEXC.LIT 1.0(102): Now works under all platforms. Under UNIX, requires ATE or at least ZTERM. (ZTERM doesn't support the wait flag though.) Help message updated to be more specific to the platform. 4. --- Mouse click fix: Clean up yet another issue related the 985.3 and subsequent fixes to prevent click actions on logically suspended dialogs. This one was causing click events on the active modal dialog itself to be ignored (noticed in LEO and perhaps when using context menus on a dialog). ============================================================================ A-Shell Development Notes Version 5.0.986.1 (12 Apr 2007) ============================================================================ 1. --- FTP wildcard transfer fix: The test for an empty directory was not counting files with the hidden, read-only, system, or archive bits set (leading it to sometimes think the entire directory was empty even when it was full of files.) ============================================================================ A-Shell Development Notes Version 5.0.986.0 (11 Apr 2007) ============================================================================ 1. --- Mouse click fix: Clean up problems with being able to click on controls that are not in the active modal dialog (that were introduced in 985.3). The way it is now, if there is a modal dialog, you should only be able to click on controls that are either in that modal dialog, or in any modeless dialog, or on the main window menu. Prior to 985.3 there were basically no limitations on this, and between 985.3 and 985.5, there were too many restrictions. 2. --- AUI_MENU enhancement: When deleting a top level menu, the submenu items beneath it are now automatically deleted. This isn't really a bug fix because the documentation always said that you needed to delete the submenu items manually, but failing that, programs would exhibit a bug where running the program a second time would result in a top level menu that didn't work. 3. --- Tab Control grid bug fix: In some cases, controls within a Tab control within an ALTPOS dialog were being spaced using the main window grid rather than the ALTPOS grid. 4. --- AUI_IMAGE bug fix: Images within ALTPOS dialogs were not being sized using the ALTPOS grid. 5. --- Fix problem with dialog scaling getting messed up after returning from nested maximized dialogs. 6. --- FTP bug fix: Attempting to transfer all files (using * wildcard) from a PC directory which contained no files was causing A-Shell to hang. This remains a bug in the underlying wodFTPDLX.DLL module, but ASHW32 and ATE now avoid it by pre-testing for an empty source directory and just skipping the entire operation if there is nothing to transfer. 7. --- FTP bug fix: Wildcard transfers from the PC to the host now fold the filenames to lower case. It is debatable whether this is a bug fix, feature, or mere change, but since files stored with upper case names are difficult to access from A-Shell/UNIX, folding them to lower case seems like a nice thing to do. (Note that the problem would normally only have occurred when transferring files not created under A-Shell/Windows, since it creates files in lower case.) 8. --- FTP enhancement: FTP transfers now support more flexible wildcards. Previously, the only wildcard option was "*" to transfer all files in the source directory. Now you can separately wildcard the file name and extension, and you can include partial literals in both parts of the name. Examples: /vm/miame/dsk0/007006/*.dat /vm/miame/dsk0/007006/ab* c:\vm\miame\dsk0\007006\xyz*.d* Notes: - The only wildcard character remains "*" (? is not supported) - PC filespecs are not case sensitive, but HOST filespecs are. - The actual code change is in the module FTPDLXcall.DLL 1.2.0.117, which is normally found in the same directory as ASHW32.EXE. It gets loaded on demand when transferring a file via TAB(-10,AG_FTP) or XCALL FTPDLX or the ZTERM file transfer ESCAPE sequence. 9. --- ZTXFER.LIT 1.1(103) now supports wildcards if the client is ATE. Examples: Copy all files from current directory to PC: .ZTXFER *.* C:\VM\MIAME\DSK0\111222 Copy all RUN files from PC to current directory .ZTXFER = C:\VM\MIAME\DSK0\111222\*.RUN Copy A*.B* from PC to BAS: ZTXFER BAS: = C:\VM\MIAME\DSK0\111222\A*.B* 10. --- FTP component update: wodFTPDLX.DLL (included, like FTPDLXcall.DLL, in the BIN directory with ASHW32.EXE) has been updated to 2.7.0.303 from 2.5.5.205. This wasn't actually necessary for the above fixes, but as long as we were making changes, we might as well bring it up to date. (We had delayed doing this before because an earlier change seemed to have introduced a lockup problem when transferring lots of small files, but that seems to have been resolved now.) The change notes for the component are: - Host name now resolved in the background so as to not lock the PC for a couple of seconds trying to resolve an invalid host name. - Fix problem with hanging when certain errors encountered during wildcard operations. - Fix in VanDyke Vshell directory parser. - Fix problem with SFTP transfers getting aborted after 1 GB. - Fix problem uploading wrong file after a failed connection. - Data connection now always uses port 20 for PASV connections to prevent local sockets being exhausted under XP. - Switched to OpenSSL 0.9.7 which is FIPS140-2 certificated. 11. --- TWAIN scanning support module (VICTW32.DLL) now included in the standard release package. 12. --- ATE.EXE: Connection Properties dialog now forces itself on top of everything (hopefully eliminating the problem of it getting hidden beneath other windows and giving the appearance that the main ATE window was hung.) 13. --- MX_GDICALC: Fix a problem in which the vertical spacing for the advance calculations was more affected by the default font of the printer than by the font specified in the MX_GDICALC call, resulting in the box either being too big or too small for the specified text. ============================================================================ A-Shell Development Notes Version 5.0.985.3 (9 Apr 2007) ============================================================================ 1. --- A-Shell/Windows directory scanning fix: devices defined using IP addresses (e.g. DEVICE=SMB0 //192.168.1.100/SHARE/VM/MIAME/DSK0) can now be scanned by PPN.LIT and wildcard commands such as DIR.LIT. Previously, files could be accessed, but directory scanning commands would report no files on the device due to parsing confusion with the dots in the spec. 2. --- Dialog/Menu bug fix: When adding a menu bar to a dialog, the dialog height is supposed to increase slightly to make up for the space taken by the menu bar. This was broken in 984.3. This fix restores the old behavior, with the slight improvement that the height increase is now calculated to be exactly the height of the menu bar, rather than one logical grid row height. 3. --- Dialog sizing bug fix: The height of dialogs was being rounded down to the nearest integer row (cancelling the benefit of millirow measurements). 4. --- Mouse-click fix: Clicking on a control in a dialog that was not the active modal dialog was causing the control's click string to fire, even though the dialog itself was effectively suspended. Now, such attempts should just cause the focus to be returned to the active modal dialog. ============================================================================ A-Shell Development Notes Version 5.0.985.2 (8 Apr 2007) ============================================================================ 1. --- AUI_EVENTWAIT fix: Fix a problem with the EVW_EXCDINOUT switch causing an unwanted button click exit when returning from a secondary dialog that was launched via a button on the primary dialog. Also, fix a bug in which the EVW_EDIT flag was essentially being treated as set even if it wasn't. 2. --- Button/image scaling fix: adjustment to button/image scaling made in 984.6 was causing the icons within some buttons to be clipped. 3. --- Scanning fix: Attempt to scan in TIF format with the compression option set to 0 (none) was failing with error -9. Also, TIF compression option 7 (JPEG) now supported. (This returns a TIF image file with JPEG compression, not to be confused with the JPG file format.) ============================================================================ A-Shell Development Notes Version 5.0.985.1 (4 Apr 2007) ============================================================================ 1. --- ATE enhancement: ATE now recognizes the environment variable ATE as an alias for MIAME, i.e. as the base directory where ATE is installed. This is primarily a convenience host command lines (such as ATSYNC and ZTXFER) which may want to reference an ATE subdirectory (e.g. %ATE%\dsk0\001007) with the danger of the command line interpreter on the host side resolving the environment variable relative to the host. For example, if you wanted to sync the directory DSK0:[1,17] directory on the server to the DSK0:[1,7] directory o the ATE client, you might previously have tried this: .LOG DSK0:1,17 .ATSYNC ,%MIAME%\dsk0\001007 The problem with the above is that the %MIAME% environment variable would be resolved (automatically by the command line processor) relative to the host, perhaps "/vm/miame", rather than relative to the ATE client as you intended. Although there were previous ways around this obstacle (such as using TAB(-10,AG_GETENV) to first retrieve the environment variable definition from the ATE client), the %ATE% environment variable is more convenient, especially for such command lines, e.g.: .ATSYNC ,%ATE%\dsk0\001007 ============================================================================ A-Shell Development Notes Version 5.0.985.0 (3 Apr 2007) ============================================================================ 1. --- DATEPK.SBR (ERS): fix bug involving garbage characters at the end of the output date when converting from MMDDYY to MM/DD/CCYY format. 2. --- AM75/AM65 emulations now recognize possibility of extended ATE and ZTERM functionality. (For example, SET TITLE works, and if the client is actually ATE, LICENS/ATESRV will work.) This is mainly a convenience for people using ATE in non-GUI mode. 3. --- LICENS.LIT 2.3(120) supports server-based licensing of ATE clients in AM75 and AM65 emulation. You have to execute the LICENS/ATESRV command explicitly (the server will not automatically do it for you, as it would for the emulations with "G" on the end, but you can do it manually via LICENS/ATESRV). 4. --- ASTAT.LIT 3.0(133) fixes sort problem. 5. --- UNIX installation script will now install am* TERMINFO and TERMCAP entries if am75g is not currently defined. ============================================================================ A-Shell Development Notes Version 5.0.984.9 (2 Apr 2007) ============================================================================ 1. --- Close a loophole which allowed A-Shell to crash while executing certain subroutines that access CONAME.DAT (such as PRINT.SBR and PGMID.SBR) when the fully qualified path to CONAME.DAT was longer than 50 characters. (This goes back to version 1.0 of A-Shell, and was apparently just now noticed as people are getting more adventurous with defined A-Shell devices using long paths. 2. --- INMEMO search function (MMO'SCH) no longer waits for memos that are locked by other users for editing. Instead, it returns with POS=0 (pattern not found), but EXTERR=2. Since the memo search operates on only one memo at a time, this prevents programs from getting hung, while still allowing the program to detect the situation and retry if desired. But in most cases, treating a locked memo as not matching is reasonable, since if it is being edited, there is no way to know what it will be like after the updated memo is re-saved. 3. --- A-Shell/Windows and ATE no longer allow more than one modal child process to be launched at a time. This was mainly to eliminate the case under ATE where the Connection Properties dialog could be launched, then covered by another window, then launched again. But it could also apply to custom menus that launched programs that A-Shell was forced to wait for. The main danger with such scenarios is that the user could easily get the impression that A-Shell was hung, when in fact it was merely suspended waiting for multiple processes. 4. --- ATE trace/log function was in some cases capturing files with CR CR LF rather than the normal CR LF line terminators. This was not a problem for VUE, but would have left the appearance of a garbage character in most PC-based editors like Notepad. 5. --- XTREE: Ending column coordinate is no longer limited to the maximum number of columns in the main window when the XTREE is in a dialog. This limitation makes no sense in a dialog (especially when the dialog doesn't even use the main window coordinate system). 6. --- Close a loophole in the LOKSER-style locking routine under A-Shell/UNIX that was allowing a segmentation fault to occur with certain unexpected locking errors (like trying to lock a non-existent file). ============================================================================ A-Shell Development Notes Version 5.0.984.8 (27 Mar 2007) ============================================================================ 1. --- (UNIX) Drivers am62c, am75 and wyz50 now support TAB(-10,x) commands. One consequence is that you can now use ATE server-based licensing with these emulations to experience non-GUI operation of your application. (Many routines that work in both text and GUI modes, such as PCKLST and MSGBOX, will use text mode if the terminal emulation does not end with G. See note #8 for 984.3 below for another angle on this same issue.) ============================================================================ A-Shell Development Notes Version 5.0.984.7 (24 Mar 2007) ============================================================================ 1. --- (UNIX spooling): Setting SBR=SUBMIT2 in the miame.ini now affects the spool operation in the same way as XCALL SUBMIT. The net effect is that A-Shell will not wait for the spool command to complete before continuing. Generally, this doesn't matter since the spool submission command (e.g. lpr) returns very quickly. But the effect can be substantial when using the COMMAND= option in the printer init file to execute a length script or other executable in place of the standard spooler submission command. For example, if you have a script to archive the report, which involves a lot of database activities, web connections, etc., it might take several seconds to complete. Previously, XCALL SPOOL would not return until that operation was complete. With SBR=SUBMIT2, it would return immediately. 2. --- XTREE fix: Operations associated with XTR'COLUMNACTIVE were not working properly. It now works as originally intended, i.e. on entrance, it determines which column has the keyboard focus (and does not have to be one of the sort columns). On return it indicates the column that had the keyboard focus on exit. The keyboard focus can be changed by the user by clicking on any cell in a column. Previously, only the column header would work, and that also sorts the column. Now, you can change the column focus without changing the sort. Note that the column focus (or active column) has only two purposes: - On entrance, if the XTR'SKEY field is non-blank, XTR'COLUMNACTIVE will determine which column is searched. - While XTREE has the focus, non-navigational keyboard characters will cause a search of the current column for the first match, moving the selection bar to the matched item. ============================================================================ A-Shell Development Notes Version 5.0.984.6 (23 Mar 2007) ============================================================================ 1. --- Fix "dancing icons" when window is resized. 2. --- AIX fix: Fix high-byte low-byte problem with VXCALL and XFUNC() under big-endian machines such as AIX and HPUX. Was causing VXCALL and XFUNC() to report subroutine not found (with the halves of the name reversed). 3. --- Fix problem with scaling of controls containing images (static and button controls with icon or bitmap images). They would display initially at the desired size, but then get distorted when the window was resized. 4. --- Fix bug in computing the AltPos grid width. Bug was introduced in 984.3 and was probably only noticeable in programs that retrieved the grid size using AUI_WINDOW and then made calculations from it, and was further limited to desktops where the aspect ratio of the font width to height was more than about 43%. 5. --- MBF_AUTOGROW no longer sets the control size 4 pixels smaller than necessary. (This was causing strings to sometimes not fit in the control, even when the MBF_AUTOGROW bit was set.) ============================================================================ A-Shell Development Notes Version 5.0.984.5 (20 Mar 2007) ============================================================================ 1. --- Force maximized dialogs (created with MBST_MAXIMIZE) to have a maximize/ unmaximize button, even if MBF_MAXBUTTON not specified. Without this, the dialog will cover the task bar, which is generally disconcerting. 2. --- MX_WINSETTINGS now returns allows setting/querying the fixed and GUI fonts. The associated id values are AWS_FONTFACE (16) and AWS_GUI_FONTFACE (17). 3. --- JSTAT.LIT 3.1(106) Fixes problem with PPN display (octal/decimal confusion) and adds recognition of several new opcodes. 4. --- MIAMEX, MX_GETOFD fix/refinement: Previously, if there was a problem with the filespec or some other parameter, the dialog would simply not appear, without any error message or indication of what went wrong. To avoid this, A-Shell will now pop up the debug message window (if not already open) and report the error number. Unfortunately, there is no easy way to get the description of the error, so we will be adding a reference list to the documentation. The most common error seemed to "invalid filename", which could have been as simple as no filename at all. For example, if you set path="c:\" or even c:\temp" it would have failed with this error. The routine now tries to head off those issues by appending a "\*" as needed to the end of the specified path to make the dialog happy. ============================================================================ A-Shell Development Notes Version 5.0.984.4 (18 Mar 2007) ============================================================================ 1. --- Maximizing an altpos dialog now adjusts the overall dialog font scale factor (rather than just the grid spacing). So in other words, if maximizing a dialog causes it to double in size, then the fonts will most likely be approximately doubled in size as well. 2. --- Fix a problem with the dialog resizing logic in which displaying a non-maximized dialog while there was a maximized one visible was causing the maximized dialog to get temporarily unmaximized. 3. --- XTREE fix: Resizing an XTREE (indirectly by resizing the window containing it) no longer affects the default XTREE item font. Previously, in some cases, the item font was getting resized, but this was creating havoc with the column spacing. Leaving the XTREE fonts alone during resizing eliminates that problem. Note that consequently, unless a column had a Dspmin= or Dspwid= specification, the font width will not change, and thus it will be mainly the last column that changes width. (Columns with Dspmin or Dspwid specifications will be resized to match the resized grid.) 4. --- Fix: debug message window positioning logic for multi-monitor systems wasn't quite right. The message will now appear on the monitor that the A-Shell window is primarily on. 5. --- XTREE debugging aid: When the XTREE and XDEBUG traces are activated, the debug message window will now show the column definitions. (Useful in debugging code that involves conditional assembly of the COLDEF parameter.) ============================================================================ A-Shell Development Notes Version 5.0.984.3 (17 Mar 2007) ============================================================================ 1. --- OPTIONS=NUMPAD_COMMA wasn't working in INFLD (GUI mode), XTREE or XTEXT. 2. --- Compiler bug fixes [353]: - Previous fix [352] was causing COMPIL.EXE to fail to report missing ENDIF errors in the Editor. - LOOP without DO and ENDIF without IF are now reported - Unterminated control blocks (IF, DO, etc) with functions and procedures are now recognized and reported at the end of the procedure. Previously these would not be reported until the end of the compil, after all kinds of errors. - Missing LOOP statement error now reports location of last unterminated DO statement even when it occurred several BSIs earlier. 3. --- Dialog Grid % Adjustments (in the Dialog Sizing dialog) of less than about 5% were often not having any effect, due to rounding. The scaling logic now delays rounding until later in the calculation, permitting adjustments of as small as 1% now. Note that the dialog font scale factor is still applied to the grid unit and rounded down to an integer pixel size, so font scale changes of less than about 5% may not have an effect. (Or it may affect the height but not the width.) For example, if the grid cell is 13 wide by 27 high, and you increase the dialog font scale factor by 5%, the new grid cell will be 13 wide by 28 high. (The 5% is not enough to increase the width by an entire pixel.) 4. --- MX_WINSETTINGS: Calling it with opcode 1 to set values was causing the "dancing icon" effect, even if the new values were no different than the old ones. It now ignores changes that aren't really changes. 5. --- AUI_CONTROL: Maximized dialogs may be created by specifying the MBST_MAXIMIZE flag (&h040) in the cstate parameter when creating the dialog. You may also enable the maximize button on a dialog with MBF_ALTPOS and MBF_SYSMENU set, by adding the flag MBF_MAXBUTTON to the ctype field. (MBF_MAXBUTTON is defined in ashell.def as &h00000400.) While on this subject, let's review a few aspects of dialog sizing: - Only dialogs which have the MBF_SYSMENU will have minimize and maximize buttons (along with the "X" button). However, whether the buttons are enabled or disabled depends on the factors below. - Maximization is only an option with MBF_ALTPOS dialogs. (Otherwise, since the dialog grid would be based on the main window, changing the dialog size really requires changing the main window size.) - The minimize button is only enabled for modeless dialogs. (The theory here is that it makes no sense to minimize a modal dialog, since that would make the application appear to be hung.) - The maximize button is never automatically enabled, but you can enable it yourself by adding the MBF_MAXBUTTON flag. - Maximizing a dialog does rescale the controls, but it does not change the font sizes. (This was subsequently changed in 984.4.) In the case of XTREE, any column which was defined with a Dspmin= or Dspwid= clause will be adjusted accordingly (since resizing the dialog changes the effective width of the grid units). However, for the rest of the columns, they probably won't change size, since the column width is normally determined by XTREE itself based on the data. So you'll most likely end up with all of the extra space appearing the final column. 6. --- AUI Altpos Grid: Impose a reasonableness standard on the GUI Altpos (font-based) unit (mainly to deal with Windows ME and possibly others, which report font metrics that are too skinny.) Background: this was inspired by the recognition that the standard desktop font under Windows ME, which appears to be identical to the one used in Windows XP, nonetheless reports its size as being exactly half as wide. This was causing dialogs based on the font size to appear half as wide as normal when running under ME. The fix should eliminate that anomaly. 7. --- XTREE: Roll back/modify item 4 under 984.2 below. Now, in order to force the standard row height to match the cell editing height (about halfway between single and double spacing), you need to set XTR'ITEMLINES = -1 rather than 0. (Apparently several people were relaying on the fact that XTR'ITEMLINES=0 was acting like XTR'ITEMLINES=1 and didn't appreciate their row heights increasing.) 8. --- XCALL MESAG now bases the decision to use a GUI or text display on the AGF_GUIEXT flag bit (from AUI_ENVIRONMENT), rather than on the mere fact that the terminal driver supports the "GUI" feature bit (which is true for PCTDVG, AM62CG and AM75G). This should be no different than before, except that it gives you the ability to disable GUI mode using AUI_ENVIRONMENT. This also applies to certain INFLD auxiliary logic. 9. --- Fix problems with Up-Down (spinner) controls and calendars not being positioned properly after resizing a window. ============================================================================ A-Shell Development Notes Version 5.0.984.2 (12 Mar 2007) ============================================================================ 1. --- Debug Message Dialog was not displaying in the upper right corner of the screen when the A-Shell window was running from a secondary monitor. It now displays in the upper right corner of the monitor that it was launched from. 2. --- XTREE fix: The feature displaying negative numbers in red was not working properly for values between 0 and -1 in locales that switch the decimal point and comma. 3. --- ATS fix: In some timing circumstances, input characters were appearing twice in the input buffer. The only situation where this was actually reported was in the case of reading the screen using TAB(-1,20), but theoretically it could have happened in other cases. (Note: the fix is in ASHW32.EXE but only affects ATS connections.) 4. --- XTREE fix/enhancement: In a tree with editable cells and fixed height rows, the row height is (and has been) set to the height needed to display an edit or combo box control. In other cases (variable height rows or no editable cells), the row height is typically less. This has caused unhappiness from various parties, for two reasons: a) In the case of editable cells with variable height rows (XTF_VARY + XTF_EDITABLE), the rows start out short but then change height when a cell is edited on that row. (I've argued that this is a "feature" not a bug, but with decidedly poor results.) b) In the case of non-editable trees with fixed height rows, the row height doesn't match the equivalent tree with editable cells. (This is hard to label a "feature", but it is debatable whether it is a bug.) To "fix" these "problems" without breaking existing properly-written programs, XTREE now allows you to set XTR'ITEMLINES to 0, producing the same effect as 1 except that the row height in both of the above cases will be set to match the edit/combo control height (in other words, to match the height of editable trees with fixed height rows). Warning: there is a slight compatibility concern here. Even though the effect of setting XTR'ITEMLINES=0 was not previously defined, in practice, it acted like XTR'ITEMLINES=1. The XTREE row height in such programs may be increased when installing this patch. (Although we try to avoid this kind of situation, especially in the "stable" release, in this case, the change is subtle enough, and purely aesthetic, and only affecting programs that were not coded according to the documentation, that it seemed harmless.) 5. --- AUI_CONTROL bug fix: RGB values passed in the FGC and BGC parameters were getting truncated to 16 bit (causing weird colors results in ATE). 6. --- Parameter passing bug fix: When a string value was passed to an XCALL or PROCEDURE/FUNCTION that was expecting a floating point argument, the value was getting truncated to an integer. For example: print Fn'Test("1.23") end Function Fn'Test(value as f6) Fn'Test = value End Function The above was incorrectly returning 1 rather than 1.23 due to the truncation during the conversion from string to floating point. 7. --- Compiler bug fix [352]: "Missing ENDIF" error was not reporting the correct IF statement location when it occurred in a ++include other than the last one. 8. --- AUI_CONTROL fix: Using CTLOP_CHG to change a control from MBST_HIDE to MBST_DISABLE+MBST_SHOW was showing but not disabling the control. 9. --- TAB(-10,AG_SHLEXEC) and XCALL MIAMEX,MX_SHELLEX with the wait option 2 (don't wait, get focus back) was setting the focus on the main A-Shell window rather than the current dialog. 10. --- TAB(-10,AG_AUTOPARENT) wasn't working properly if there was a leading space in the parent control number (which was easy to get unless you used a STR() function to convert the control ID value to a string before passing it to the PRINT TAB statement). 11. --- PolyShell fix: Internal message box routine (used by MSGBOX.SBR and also by many internal messages) now reverts to text mode for jobs running as PolyShell children. (This allows them to use the PolyShell hot key when waiting in a message box.) 12. --- MIAMEX: MX_WINSETTINGS changes weren't always taking effect immediately. ============================================================================ A-Shell Development Notes Version 5.0.984.1 (07 Mar 2007) ============================================================================ 1. --- (Windows) Close a loophole in which A-Shell was failing to respond to Windows events (like mouseclicks) for an excessive time while in a CPU bound state. 2. --- (UNIX) Log unexpected events in lock routine (mainly to identify cases where a wait on a lock was interrupted by a kill signal). 3. --- (Windows) Minor refinement/cleanup of GETMAC.SBR. ============================================================================ A-Shell Development Notes Version 5.0.984.0 (03 Mar 2007) ============================================================================ 1. --- ATSD: Update to version 5.0.105; now supports -z switch (in the CommandLine= in the atsdsrv.ini) to run from system tray. Also supports installation in directories with spaces in them. 2. --- Install package: launching A-Shell directly from the option at the end of the installation/update now works if the install directory has spaces in it. (Note that there are some problems with running A-Shell from the \Program Files directory under Vista though.) 3. --- XTREE: Using "|" in the answer array to make an otherwise editable cell be non-editable wasn't completely working. (Navigation skipped the cell but a direct click on it would activate it.) 4. --- AIX: Fix segfault when using TRACE=LOG 5. --- ATSD now supports a -z switch to make it run from the system tray (same concept as A-Shell's -zi switch.) 6. --- ATSD and ATSRSRV now support running from directories with spaces in them. They are also now both code signed (so Windows security doesn't report them as being from an Unknown Publisher). ============================================================================ A-Shell Development Notes Version 5.0.983.5 (28 Feb 2007) ============================================================================ 1. --- INFLD: Remove a bogus warning about improperly terminated SETDEF when creating checkboxes and radiobuttons via INFLD over ATE. 2. --- Calendar Control: Close a loophole related to setting the date under application control, after which clicking on a button that returned the calendar to the previously displayed month was not triggering the date-changed click string. 3. --- Close a couple of loopholes in which tracing options were causing A-Shell/Windows to crash with a memory fault for certain verbose traces. ============================================================================ A-Shell Development Notes Version 5.0.983.4 (26 Feb 2007) ============================================================================ 1. --- Compiler (1.1.351): Fix bug in compiler causing a memory fault in certain variations of the illegal/incompatible/undefined overlay syntax error. 2. --- GETMAC.SBR: Minor cleanup/refinement relating to retrieving a list of all the defined adapters. 3. --- MIAMEX, MX_FINDWINDOW refinement: now returns the window handle of the current A-Shell dialog or main window if all the parameters are set to 0 or "", as was always intended. ============================================================================ A-Shell Development Notes Version 5.0.983.3 (22 Feb 2007) ============================================================================ 1. --- SEND.SBR bug fix: Windows version was leaving parts of JOBTBL.SYS locked after sending a message to "ALL". ============================================================================ A-Shell Development Notes Version 5.0.983.2 (21 Feb 2007) ============================================================================ 1. --- XTREE: When using XTF_NOSEL and XTF_MODELESS to display a tree, the inactive selection style is changed from the gray bar to a dotted outline, making the selected item(s) less visually obtrusive. (In most cases, in this mode you don't care about selection, yet there is no simple way to eliminate at least one item from being selected as the current item.) 2. --- INFLD/EVENTWAIT: Controls created by INFLD are now given the MBF_TABSTOP property so that EVENTWAIT will allow you to TAB to them (assuming the other conditions are met). This is mainly an issue for checkboxes and radio buttons, which don't otherwise fall under the EVW_EDIT flag. Note that for checkboxes created via AUI_CONTROL, you could always have set the MBF_TABSTOP flag manually, but for those created by INFLD, this was not possible. ============================================================================ A-Shell Development Notes Version 5.0.983.1 (20 Feb 2007) ============================================================================ 1. --- XTREE: The automatic use of red to display negative numbers was not working in cells with individual background colors (using COLDEF code B). 2. --- Close up some loopholes for memory corruption when more than 23 argument tokens passed on the A-Shell startup command line, or when the command line > 300 characters. 3. --- CGI mode under A-Shell/Windows no longer requires OPTIONS=NTTS. 4. --- SUBMIT.LIT 3.1(147) fixes a problem with /NEXT and /AFTER not being recognized if any preceding switches used space delimiters between the switch and the switch's value (e.g. /J MYJOB instead of /J:MYJOB). ============================================================================ A-Shell Development Notes Version 5.0.983.0 (16 Feb 2007) ============================================================================ 1. --- Fix problem with token parsing introduced in 982.9 (one symptom was that TAB(-10,x) commands didn't work very well if any of the individual arguments, other than the first one, were quoted with embedded commas. ============================================================================ A-Shell Development Notes Version 5.0.982.9 (15 Feb 2007) ============================================================================ 1. --- Adjust token parsing routine to not treat " or ~ as special delimiters unless they appear in the first position of the token. (Was causing problems mainly with 8.3 mangled filespecs.) 2. --- XCALL MIAMEX functions < 33 and TINKEY.SBR can now be traced by setting both the XCALL and XDEBUG traces. (Previously these were ignored by the trace logic to reduce the verbosity.) ============================================================================ A-Shell Development Notes Version 5.0.982.8 (14 Feb 2007) ============================================================================ 1. --- XTREE: Increase maximum allowance for column masks (Mask=) from 100 to 512 per tree. 2. --- The waitflag parameter in MIAMEX,MX_SHELLEX and TAB(-10,AG_SHLEXEC) has been expanded to contain the following options: 0 : No wait. Focus will most likely remain on launched app. 1 : Wait until launched app exits before returning. 2 : Don't wait, but try to get the focus back. Note that waiting (1) doesn't necessarily wait until the launched app exits. It only waits until the app "signals", which can mean different things for different applications. (It will wait for A-Shell). Option 2 will now get the focus and keep getting it (if necessary) over a period of 4 seconds, in order to deal with difficult apps (like image viewers) that may take a couple of seconds to display the image and then grabs the focus for itself. 3. --- MIAMEX,MX_SHELLEX and TAB(-10,AG_SHLEXEC) now recognize "$ASHELL" in the spec parameter, in order to launch another session of A-Shell using the same executable and ini file as the current session. (This was added mainly to mimic the similar capability in HOSTEX.SBR and TAB(-10,AG_WINEXEC) since the Shell Execute method has some advantages under Vista. ============================================================================ A-Shell Development Notes Version 5.0.982.6 (08 Feb 2007) ============================================================================ 1. --- ATE: Passing a SETDEF string longer than the current buffer size (around 1800 bytes) was causing a GPF. ATE/INFLD now warns when the buffer size appears to be exceeded (or when SETDEF is improperly terminated) and avoids the GPF in either case. (See below to increase ATE buffer size.) 2. --- ATE: Fix a bug in TAB(-10,42);size;chr(127); which increases the ATE command buffer from its default of 3072 bytes. (The buffer was being resized, but some logic was not recognizing the old size and was truncating certain commands anyway.) 3. --- ATE: Close a timing loophole in which smart box commands involving widths or columns > 95 were not always working. ============================================================================ A-Shell Development Notes Version 5.0.982.5 (07 Feb 2007) ============================================================================ 1. --- GDI Printing: //TEXTRIGHT no longer requires that the text argument be quoted if it includes commas. (It is now consistent with //TEXTOUT.) 2. --- Calendar Control: Clicking on the year in the calendar header and then on one of the up/down buttons (which appear after the first click) was not triggering the click string event, and was leaving the day states in a random pattern. 3. --- XTREE: PopupMenu= definitions are now re-processed on opcodes 0 and 1, allowing to change the popup menus on the reload operation. ============================================================================ A-Shell Development Notes Version 5.0.982.4 (02 Feb 2007) ============================================================================ 1. --- GDI Printing: As an alternative to using the DUPLEX command in the printer init file, there is now a //DUPLEX,option command that can be embedded in the printfile itself (provided it is in one of the top 4 lines of the file). The options are same as for the printer init command DUPLEX=option, i.e. V{ert}, H{orz}, L{ong}, S{hort}, F{alse}, N{one}, 0. (0 = zero = None = False = Simplex). The most common DUPLEX option is to prepare for binding along the left vertical (long) edge, i.e. //DUPLEX,VERT or //DUPLEX,LONG. Note that this simply has the same effect as if the equilalent DUPLEX command had been in the printer init file (and overrides any DUPLEX command that was in the printer init file). Any //DUPLEX commands farther into the file will be ignored (since we are not yet capable of, and may never be, changing the duplex options in the middle of a document. ============================================================================ A-Shell Development Notes Version 5.0.982.3 (01 Feb 2007) ============================================================================ 1. --- ATE printing: fix problem with various combinations of line terminators and CRLF switches causing ATE copy of printfile to accumulate CR line terminators, which in turn caused some weird problems with PDFX (and possibly other) output. Also, if the ATE printer debug switch is turned on, the temporary local copy of the printfile will not be deleted (making it easier to debug such problems.) ============================================================================ A-Shell Development Notes Version 5.0.982.2 (31 Jan 2007) ============================================================================ 1. --- TAB(-10,AG_SHLEXEC) upgraded to support all of the features of MIAMEX,MX_SHELLEX. The main motivation for this is to allow it to be used in place of TAB(-10,AG_WINEXEC) under Vista when the command being launched requires "elevation" to administrator privileges. (AG_WINEXEC will just abort with a "requires elevation" dialog in such a case, whereas AG_SHELLEX will prompt the user for permission.) New syntax: ?tab(-10,AG_SHLEXEC);spec$;",";action$;",";parms$;",";dir$;","; & showflags;",";waitflag;chr(127); All arguments are optional except spec$. parms$, dir$, showflags and waitflag are new, and correspond to the arguments of the same names in xcall MIAMEX,MX_SHELLEX. (Except waitflag, which is totally new; if non-zero, it causes A-Shell (or ATE) to wait for the launched program to exit before returning to the application. (This is needed in order to emulate the default behavior for HOSTEX.SBR and AG_WINEXEC). Note that although AG_SHLEXEC was traditionally used with a spec$ indicating some kind of object other than an executable (e.g. a URL, or a DOC file), it may also contain an ordinary executable spec. In comparison to AG_WINEXEC, which puts the entire command line in a single argument, AG_SHLEXEC puts just the executable spec in the spec$ parameter, and the remainder of the command line, if any, in the parms$ argument. 2. --- Xcall MIAMEX,MX_SHELLEX now works under ATE (is now a wrapper for AG_SHLEXEC) and supports the additional waitflag argument: xcall MIAMEX,MX_SHELLEX,status,spec$,action$,parms$,dir$, & showflags,waitflag As with AG_SHLEXEC, all parameters after spec$ are optional. 3. --- ATE: The auto-update feature is now compatible with Vista. (Previously it aborted with a "requires elevation" error dialog.) Note that the fix is actually on the server side (so update it first, then put the updated ATE installation package in the atesetup directory, and then use the auto update procedure to update the clients. Note that the setup file is now transferred to the local %TEMP% directory (which must be defined). 4. --- Windows printer init file enhancement for duplex printing DUPLEX = option option may be H{orizontal} or S{hort} for short edge binding, or V{ertical} or L{ong} for long edge binding. Anything else disables duplex printing. 5. --- New TAB(-10,AG_DATETIME);chr(127); command returns the system date and time according to the ATE client. (AG_DATETIME=64). The returned information is in the form of date,time,status where date is the decimal value of the separated date format (see IDTIM.SBR for details), time is the number of seconds since midnight, and status will be 0 if the operation was succesful, else a Windows error code. For example: map1 today,b,4 map1 now,b,4 map1 status,f ? tab(-10,AG_DATETIME);chr(127); input "",today,now,status You might then compare this information against the values returned by the DATE and TIME system functions on the server to decide whether the client is reasonably in sync, and if not, you might prompt the client to update the clock on either the server or the client. ============================================================================ A-Shell Development Notes Version 5.0.982.1 (30 Jan 2007) ============================================================================ 1. --- EVENTWAIT bug fix: previously, if you set parentid=0 and ctlid=0 and flags=EVW_NEXT+EVW_DESCEND, thinking to just put the focus on whatever the first appropriate object is, it would have returned exitcode 99 (possible infinite loop) if the only appropriate objects were within dialogs. Now parentid=0 is equivalent to the current dialog, if applicable. 2. --- Implement means of executing an SBX under ATE control (mainly with the aim of enabling customizable ATE update routines). Syntax: ? TAB(-10,AG_XFUNC);SBXNAME$;",arg1,arg2,....argn";chr(127); input "",R SBXNAME$ must be the name of an SBX (just the name, no device or extension), stored on the ATE client in the [7,6] directory. The SBX must be implemented as a function and is actually executed by ATE the same as would Basic execute the statement XFUNC(SBXNAME$,"arg1","arg2",...,"argn"). The SBX must return a numeric value, other than -1, which indicates that the SBX could not be called (not found). The return value from the XFUNC call is plugged into the keyboard buffer, where it can be picked up as shown above, by an input statement or equivalent. Note that the SBX may not perform any standard text mode input operations, as these would interfere with the telnet input. Instead, if input is needed, use AUI functions. (For example, MSGBOX, EVENTWAIT, etc.) 3. --- GDI Printing: Implement a new GDI command: //SETVMI,# Where # is the desired number of units (must be an integer) in the current map mode to set the "Vertical Motion Increment" to (in other words the vertical line spacing). This can be useful when filling in pre-designed forms that require a certain uniform line spacing that isn't quite what you would otherwise get from setting the LPP value in the printer init file or by setting a particular font and then using //ResetLPP. Note that if you want 6 lines per inch, to be precise, you may need to first switch to a the TWIPS mapmode, since it's units per inch can be evenly divided by 6. For example: //SETMAPMODE,TWIPS //; set 6 lines per inch (1440/240 = 6) //SETVMI,240 You can then switch back to another map mode, but that defeats the purpose, since the units will be converted and rounded down. So converting to LOENGLISH, for example, would give you the equivalent of //SETVMI,16. (In that case, you might have done better by just setting //SETVMI,17). 4. --- Fix a license over-counting problem (where ABOUT would indicate more nodes that it should have). Mostly this was related to PolyShell sites, but may have occurred in other cases where there were several jobs with the same IP address (including 0.0.0.0 and 127.0.0.1). ============================================================================ A-Shell Development Notes Version 5.0.982.0 (28 Jan 2007) ============================================================================ 1. --- ATE: ATE now reports the local PC user name and machine name to the server when the connection is established. This information can then be retrieved via the extensions to GETUSN.SBR (see below). In the case of ATSD (A-Shell Telnet Server under Windows), the user name from the local PC will be used to override the default service user name for the job. (This is much more useful than the generic system service user name that would otherwise be reported in SYSTAT, the ashlog.log, or any other place where the user login name is displayed.) (Note that this capability doesn't become effective until both the server side of A-Shell and the ATE client are updated to at least edit 982.) 2. --- GETUSN.SBR supports two new optional arguments: xcall GETUSN, USRNAM$ {MACHINE$ {,ATE'USRNAM$ {,ATE'MACHINE$}}} PC'USRNAM$ (S,20) will return the login name of the ATE client, if applicable. PC'MACHINE$ (S,20) will return the machine name of the ATE client, if applicable. Note that if the user name has been overridden (via MIAMEX,MX_SETUSRNAM or automatically by an ATSD server when accepting an ATE connection), then USRNAM$ will return the over-ridden name. To force it to return the original name (either the server login name or effective user name), set USRNAM$ to "!" before calling GETUSN.SBR. 3. --- New MIAMEX.SBR function to override the user name: xcall MIAMEX,MX_SETUSRNAM,USRNAM$ ! (MX_SETUSRNAM=169) Normally the user name is retrieved from the operating system when needed. In most cases, that is best. However, there are two cases where it might not be: - If, for some unfathomable reason you allow all users to login to the operating system with a common user login name, then displaying or retrieving that name in utilities such as SYSTAT (or the ashlog.log) isn't very useful. Usually, the excuse for allowing users to share an operating system login name is that you have a separate login process for the application. If this is the case, then you can now use MIAMEX,MX_SETUSRNAM so that the application user name replaces the original operating system login name in SYSTAT and other A-Shell purposes. - In the case of ATSD, you don't have any control over the operating system login name on the server, although as of this edit, that is now being over-ridden automatically by the username used to initiate the ATE client. Note 1: Over-riding the user name does not fool the operating system. It only affects A-Shell routines that would otherwise retrieve or use the login name. Note 2: To reset the user name (back to the original), you can xcall MIAMEX,MX_SETUSRNAM with USRNAM$ argument of "". 4. --- ATSD improvements in telnet disconnect detection. Previously, if the telnet disconnection was broken in the middle (as opposed to be explicitly closed by either end), ATSD was recognizing it within a minute or so, and was terminating the job, but the job was not being given the chance to trap the error #250. Now, such disconnects will result in the job getting an error #250, which give is the opportunity to perform some kind of orderly shutdown. As with A-Shell/UNIX, the job will be forcefully terminated if it then goes into a keyboard wait. 5. --- The ASHLOG.LOG entry (when TRACE=INOUT) is now more complete, with the addition of the ATE machine and ATE user name, as seen below: 28-Jan-07 13:23:11 A-Shell 5.0.982.0 launched on SYSTEM-87F7:1 by SYSTEM 28-Jan-07 13:23:11 Get IP: 63.199.106.102 [1863 us] 28-Jan-07 13:23:12 (ATE client 5.0.982.0, machine=JACKT42:03, user=joaquin) 6. --- ATE: The additional startup text now supports embedded control characters using the syntax "^x" (i.e. "go^m" would send the characters "g", "o", and control+M). Although it was always possible to just hit ENTER in the multiline edit box that accepted the additional startup text, two advantages of the ^M approach are: a) it's visible, whereas a trailing CR is difficult to see; and b) it works with the Regedit import/export facility (which doesn't seem to support embedded CRLF characters). ============================================================================ A-Shell Development Notes Version 5.0.981.5 (26 Jan 2007) ============================================================================ 1. --- XTREE: Fix a problem in which an invalid XTR'TARGETROW value was returned when editing multi-level, partially expanded trees. 2. --- Fix a problem in which statements of the form: DPRINT TAB(X,Y);VAR1$;VAR2$;VAR3$ would result in only VAR3$ being visible. In an interesting reversal of the usual pattern, the problem only appeared in A-Shell/Windows, not ATE. 3. --- Eliminate yet another cause of "dancing icons" related to TAB(-1,0); ============================================================================ A-Shell Development Notes Version 5.0.981.4 (24 Jan 2007) ============================================================================ 1. --- (UNIX) Attempts to create an already-existing directory are no longer written to the log file (unless TRACE=FOPENS, in which case all directory creation operations are written). 2. --- No longer log "PCKLST/XTREE warning: fatal error code 1" (this just means the tree was exited via ESCAPE). 3. --- Adjust the automatic nested dialog "creep" factor (previously made larger in item 5.0.981.3-5) back down to a much smaller value, equal to 2 times the thickness of the dialog border. 4. --- COMPIL/X:2 no longer complains about a syntax error when NEXT is followed by a subscripted variable. ============================================================================ A-Shell Development Notes Version 5.0.981.3 (23 Jan 2007) ============================================================================ 1. --- ISAM-A: Minor fixes/enhancements to the ISAM-A tracing. 2. --- ISAM-A: Fix problem in which ISAM'PUSH wasn't working properly if the file record variable had been reset (either by MIAMEX,MX_FLSET or by returning from an SBX which had reset it) since the last ISAM operation. Typically, the ISAM'PUSH was using 0 as the last record number, so the next GET'NEXT would have started at the beginning of the file. 3. --- XTREE: Stop the "dancing icons" (i.e. full desktop refresh) when a new XTREE was being loaded in certain circumstances. 4. --- ATE aux printing: Eliminate attempt to look for a pre-existing printer init file for printers with names in compatible with init files (e.g. ".pqi", "\\machine\sharename.pqi", "PROMPT:INI", etc.) These attempts were probably harmless but may have caused an unexpected warning or error message when running on a Windows server with security restrictions. 5. --- AUI: Setting the "Windows desktop font size" option in the Dialog Sizing dialog no longer causes nested dialogs to be positioned relative to the main window (as in the case when MBF_ALTPOS is explicitly specified). Clarification on MBF_DLGNOCREEP: when used with MBF_ALTPOS or with the "Windows desktop font size" option in Dialog Sizing, has no effect at all. For other nested dialogs, it causes them to be positioned relative to the main window instead of relative to the parent dialog. 6. --- XTREE: Add trace message to show incoming answer value for single-select non-editable trees. Fix problem where incoming answer value was not being picked up for file-based trees when using XTROP_RESELECT. ============================================================================= A-Shell Development Notes Version 5.0.981.2 (22 Jan 2007) ============================================================================ 1. --- Bug fix: Eliminate one cause of "dancing icons" (caused by rapid updates to a minimized A-Shell window). 2. --- XTREE sort bug fix: the selection bar was disappearing after a sort if it was originally on the first row. 3. --- Bug fix: Nested dialogs were showing no parent ID if not set explicitly by the caller. 4. SUBMIT.LIT 3.1(146) now supports two convenience date alternatives when using the /AFTER switch under UNIX: "today" and "tomorrow". For example: .SUBMIT TEST.CTL/AFTER:TOMORROW,02:15 This would queue the task to start tomorrow at 02:15 AM. This provides an easy way to resubmit a task to run at a specific time tomorrow without having to calculate the date. (The other method, /NEXT:0-1-0 suffers from the problem of time creep, since it schedules the task to run 24 hours from now, rather than at a specific time.) ============================================================================ A-Shell Development Notes Version 5.0.981.1 (21 Jan 2007) ============================================================================ 1. --- COMPILER fix: was failing to complain about invalid lines of the form "++anything:xyz" (like might occur if you omitted the "include" in a ++include statement). 2. --- Runtime fix: Close a minor loophole possibly allowing an invalid memory access if you used XPUTARG N,VAR and N was larger than the number of arguments available. ============================================================================ A-Shell Development Notes Version 5.0.981.0 (20 Jan 2007) ============================================================================ 1. --- XTREE fix: doubleclicking on a read-only cell was causing XTR'TARGETCOL and XTR'XCOL to be returned as 0. 2. --- W98 workaround: A recently added internal function, SHCreateDirectoryEx(), was not present in SHELL32.DLL prior to W2000, thus preventing A-Shell from being launched. ============================================================================ A-Shell Development Notes Version 5.0.980.6 (18 Jan 2007) ============================================================================ 1. --- XTREE refinement: Reduce the amount of flash when reloading an existing tree, particularly when there are background colors. The XTF_NOREDRAW flag is now ignored when used with XTROP_REPLACE (as it doesn't seem to have any effect any more). 2. --- XTREE refinement: If XTR'LEFTPANEWIDTH is set to a negative value (other than -1), it acts the same as if it had been set to a positive value, except that the left pane horizontal scroll bar will based on the specified width (so that it will initially be grayed out). 3. --- XTREE refinement: The XTR'LEFTPANEWIDTH units were not obeying the MBF_ALTPOS or font-based Dialog Sizing settings. 4. --- MONTH Calendar fix: calendar was disappearing when the window was resized. ============================================================================ A-Shell Development Notes Version 5.0.980.5 (17 Jan 2007) ============================================================================ 1. --- AUI_CONTROL fix: CTLOP_CHG with MBST_CHGALL was destroying XTREE and XTEXT controls. 2. --- AUI_CONTROL fix: Controls on main windows, without explicit parents, were not being auto-deleted when a new control was put in the same place. (This was causing accumulation of controls, without obvious effect other than in the control dump.) 3. --- INFLD refinement: Using CMDFLG=4 with checkboxes (to read the default value from the existing control) was causing an unnecessary creation/deletion of the control during a display operation if the control didn't already exist. 4. --- XTREE fix: XTROP_REPLACE with XTF_NOREDRAW in a multi-level tree was ignoring XTR'EXPANDLEVEL option and causing all items to be expanded. Note that the only way to preserve an existing arbitrary state of expanded and collapsed rows when re-entering is with XTROP_RESELECT and XTF_NOREDRAW. ============================================================================ A-Shell Development Notes Version 5.0.980.4 (17 Jan 2007) ============================================================================ 1. --- Multiple copy printing with DEVICE=AUXLOC: wasn't working under ATSD. 2. --- Fix a problem introduced in 980.3 which caused the main window to appear when it wasn't supposed to (like when it had been hidden, with a dialog visible, and the application was de-activate/re-activated with ALT-TAB.) ============================================================================ A-Shell Development Notes Version 5.0.980.3 (16 Jan 2007) ============================================================================ 1. --- AUI_CONTROL: When MBST_MINIMIZE flag is specified (to create a minimized dialog), the normal position for the minimized dialog will be at the bottom left of the parent window. Now, you can force the minimized dialog to appear at the same position as the normal sized dialog by also setting the MBST_POS flag and putting the desired coordinates of the upper left corner of the minimized dialog into the upper 16 bits of the SROW and SCOL parameters. For example, if the normal position of the dialog is 8500,15 to 16500,60, but you want to initially display it minimized at 2500,62, then set your coordinates as follows: SROW = (2500*65536) + 8500 SCOL = (62*65536) + 15 EROW = 16500 ECOL = 60 CTYPE = MBF_DIALOG + MBF_MODELESS + MBF_SYSMENU CSTATE = MBST_MINIMIZE + MBST_POS Note that this technique is mainly relevant for modeless dialogs with the sysmenu option (for minimize/normalize/exit buttons). 2. --- XTREE fix: Clean up/refine two issues related to the protection of individual cells in an otherwise editable column. (The technique for this, which hasn't changed, is to put a "|" in the first column of the cell's entry in the answer array.) One problem now fixed is that XTREE was sometimes ignoring the "|" indicator on the initial data load if the first 500 bytes of the answer array were all blank. A second issue, more of a limitation than a problem, was that the mechanism didn't allow any data to be displayed in such cells. Now, the remainder of the cell's entry in the data array (following the "|" in the first byte) will be used to load and update the cell. Note that if the column also allows a color byte, the color byte comes before the "|". 3. --- XTREE fix: Close a loophole in which hitting the down arrow rapidly in a situation where that caused an exit and re-entry would sometimes cause an unexpected result in the exitcode and targetrow/targetcol fields. 4. --- AUI_CONTROL fix: Close a loophole whereby you could cause havoc by specifying an invalid parent control ID # when creating a control. Particularly nasty was the case where you specified the control as its own parent, or one of its children as its parent. Such attempts will now either be detected when you try to create the control (in which case AUI_CONTROL will return status -13 for invalid parent), or when controls are being scanned for various purposes (in which case a warning will be sent to the debug window). 5. --- XTREE fix: Close one loophole where entering a tree with editable cells using targetrow/targetcol = 0 would cause it to start on the last row rather than the first. (Technically the first row should be row 1.) 6. --- XTREE fix: popup menus were not working when the XTREE was embedded inside a TAB control, and/or when it was a split XTREE. ============================================================================ A-Shell Development Notes Version 5.0.980.2 (12 Jan 2007) ============================================================================ 1. --- Fix: TRACE.PAUSE and DEBUG.PAUSE were hogging the CPU while waiting for the double-click. 2. --- AUI_IMAGE: Now supports opcodes 7 (acquire), 8 (select source), 9 (get TWAIN error), including via ATE. Note that the filespec passed to the acquire operation must be local to the ATE PC. (If you want it back on the server, you can FTP it yourself.) 3. --- W2000: Work around problem with the "match edit height to combobox height" feature under W2000. (W2000 does not scale combo box height to match the font like it does under XP+, so under W2000, the "match height" option will effectively make all edit boxes the same height, regardless of the font scaling. Under XP+, the combo box height changes along with the font scaling.) 4. --- AUI_CONTROL: Eliminate flash when creating controls with the MBST_HIDE flag. 5. --- AUI_WINDOW: wasn't allowing ShowWindow commands to be applied to dialogs unless you also specified non-zero coordinate sizes. (So it wasn't working, for example, to minimize a dialog without changing its size.) 6. --- AUI_CONTROL: Support creating minimized modeless dialogs by adding a new cstate flag MBST_MINIMIZE (= &h0010). You could also accomplish the same thing using AUI_WINDOW, except that it takes an additional step. 7. --- AUI_CONTROL: Support new cstate flag, MBST_CENTER (= &h0020), to center a control on its parent. This is mainly intended for centering dialogs but theoretically works for any control type. Note that the centering logic is based on the outer frame of the parent window, and does not take into account the position and size of the task bar. (Use SOSUPD[901,2] to download the latest ashell.def.) ============================================================================ A-Shell Development Notes Version 5.0.980.1 (11 Jan 2007) ============================================================================ 1. --- MIAMEX, MX_GETVER now supports still more additional optional arguments to return the individual parts of the version of the ATE client (when applicable): xcall MIAMEX, MX_GETVER, VERSTR$ {,VMAJOR,VMINOR,VEDIT,VPATCH, & {ATE'VMAJOR, ATE'VMINOR, ATE'VEDIT, ATE'VPATCH}} See 979.9 below for details on the parameter formats. The ATE'xxx parameters have the same format as the corresponding non-ATE parameters. If ATE is not applicable to the current call, those parameters will be returned as 0. 2. --- TAB(-10,AG_MENU); may now be used to invoke built-in menu commands, using this format: ? TAB(-10,AG_MENU);ID;chr(127); Where ID is the ID value of the menu command, from the following list: IDM_ABOUT (101) : Help..About IDM_LOAD (107) : File..Load Settings IDM_SAVE (108) : File..Save Settings IDM_SAVEAS (109) : File..Save Settings As IDM_DEFAULTS (112) : File..Default Settings IDM_PASTE (116) : Edit..Paste IDM_SCHEDULE (106) : Settings..Scheduling IDM_COLORS (113) : Settings..Colors IDM_BEVELING (122) : Settings..Beveling IDM_FONTSYS (123) : Settings..Font..System IDM_FONTGUI (132) : Settings..Font..GUI IDM_MISC (130) : Settings..Misc Settings IDM_DLGSIZING (134) : Settings..Dialog Sizing IDM_KBDLOCK (117) : Settings..Keyboard Lock 3. --- A new extended TAB command allows you to change the Windows RGB value for certain parts of the Windows user interface. Note that this is offered on an as-is basis, and is not recommended due to: - conflicts between these settings and the current Theme - conflicts with the "approved" way of changing Windows desktop settings (via the Control Panel) - differences in the way it may work under different versions of Windows. - possible problems with the way other applications may responsd to the fact of color changes (since any such change triggers a notification message to be sent to all affected applications). That said, if want to experiment with such changes, the syntax is: ? TAB(-10,63);id{,r,g,b};chr(127); Where the id values are: COLOR_SCROLLBAR 0 COLOR_BACKGROUND 1 COLOR_ACTIVECAPTION 2 COLOR_INACTIVECAPTION 3 COLOR_MENU 4 COLOR_WINDOW 5 COLOR_WINDOWFRAME 6 COLOR_MENUTEXT 7 COLOR_WINDOWTEXT 8 COLOR_CAPTIONTEXT 9 COLOR_ACTIVEBORDER 10 COLOR_INACTIVEBORDER 11 COLOR_APPWORKSPACE 12 COLOR_HIGHLIGHT 13 COLOR_HIGHLIGHTTEXT 14 COLOR_BTNFACE 15 COLOR_BTNSHADOW 16 COLOR_GRAYTEXT 17 COLOR_BTNTEXT 18 COLOR_INACTIVECAPTIONTEXT 19 COLOR_BTNHIGHLIGHT 20 The RGB values r,g,b range from 0 to 255 (0,0,0=black; 255,255,255=white). If you don't specify the r,g,b values, the TAB function will return a string in the keyboard buffer containing the current r,g,b values for the specified interface component. Note that if you are associated A-Shell palette numbers with the standard Windows dialog background, window background, or text, you must do that first before using the TAB(-10,63) command. 4. --- A-Shell/Windows About box changes: remove the virtual memory information (which was not useful or even valid) and add an explicit indication of the server version (for ATE). 5. --- XTREE: Close a loophole where exiting from an XTREE without clicking on anything in the tree was returning xrow/xcol/targetrow/targetcol = 0. ============================================================================ A-Shell Development Notes Version 5.0.980.0 (10 Jan 2007) ============================================================================ 1. --- Vista: Beveling now works under Vista with the standard (very light) background. 2. --- AUI_CONTROL: The ASHMONTHCAL (calendar) control was not displaying the text in the caption bar when the dialog option was set. ============================================================================ A-Shell Development Notes Version 5.0.979.9 (08 Jan 2007) ============================================================================ 1. --- MIAMEX, MX_GETVER now supports additional optional arguments to return the individual parts of the A-Shell version to simplify the process of parsing out the version parts: xcall MIAMEX, MX_GETVER, VERSTR$ {,VMAJOR,VMINOR,VEDIT,VPATCH} Where VMAJOR, VMINOR, VEDIT and VPATCH are numeric values. (B,1 will work for all except VEDIT, which should be at least B,2) Sample return values: VERSTR$ : "A-Shell Version 5.0.979.9" VMAJOR : 5 VMINOR : 0 VEDIT : 979 VPATCH : 9 2. --- Further cleanup of the calendar control messaging problems. 3. --- Further cleanup of the up/down arrow handling in multi-line INFLD controls. 4. --- Cleanup several problems related to scaling of fonts and controls. ============================================================================ A-Shell Development Notes Version 5.0.979.8 (06 Jan 2007) ============================================================================ 1. --- Windows Vista: Themes are now supported by A-Shell/Windows for most control types. Note that the separate manifest file is no longer needed. 2. --- INFLD: New type ||f added as variation of the existing ||F. Both force INFLD to use a fixed pitch font, but while ||F often results in a font slightly smaller than the plain text font (in order to fit within the internal margins of the edit control), ||f forces INFLD to use the exact same font as the standard A-Shell plain text font. (This is probably mainly of use in conjunction with multi-line mode.) Also, both ||F and ||f now apply to display as well as edit mode. 3. --- INFLD: When in multi-line mode (|M or ||M) and up/down exits are enabled (3 and 5), and not using Windows keyboard conventions (i.e. not specifying |K), then the up and down arrows will cause INFLD to exit if used when the cursor is already on the first or last line of the control. Note that the last line is defined as the line line containing text. 4. --- Month Calendar control: Fix a problem in which the control appeared to auto-click itself every two minutes. Also fix a problem in which clicking on the arrow keys would sometimes jump two months instead of one. ============================================================================ A-Shell Development Notes Version 5.0.979.7 (05 Jan 2007) ============================================================================ 1. --- GDI Printing: Implement a command for right-justified output: //TEXTRIGHT, x, y, text The logic is the same as for //TEXTOUT, except that the specified xy position marks the right edge of the output rather than the left edge. Note that the vertical position with respect to the reference point is still determined by the //SETTEXTALIGN options. 2. --- The maximum number of ERSATZ definitions has been increased from 400 to 1000. ============================================================================ A-Shell Development Notes Version 5.0.979.6 (05 Jan 2007) ============================================================================ 1. --- XTEXT: When re-entering an existing tree using XTROP_RESELECT (op 4), if the XTF_NOREDRAW flag is NOT set, then XTREE will now respond to the XTR'EXPANDLEVEL parameter. This goes back to the original behavior; it was inadvertently changed a few versions back. 2. --- XTEXT: Fix a problem in which reloading an existing tree with XTROP_REPLACE (op 1) would sometimes wipe out the popup-menu and combo box definitions associated with the tree. 3. --- XTEXT: When re-entering a non-editable, single-select tree, the selection bar was often reverting back to the first row. ============================================================================ A-Shell Development Notes Version 5.0.979.5 (04 Jan 2007) ============================================================================ 1. --- ATE: Fix problem with unexpected ANSI ESC sequences causing ATE to lock up. Also, fix similar problem, mostly seen under SCO, where a bad IAC (FF) sequence would cause ATE to start spitting out garbage. 2. --- MIAMEX,130 now supports an optional argument to return the name of the A-Shell executable: XCALL MIAMEX,MX_ASHFILE,STARTCMD${,ASHFILE${,ASHEXE$}} Example formats for ASHEXE$: c:\vm\miame\bin\ashw32.exe (WINDOWS) /vm/miame/bin/ashell (UNIX) ashell (ashell launched with no path) 3. --- SUBMIT.LIT 3.1(145) now uses the actual A-Shell executable name rather than defaulting to "ashell" under UNIX. 4. --- ISAM-A: Adjust ISAM'PUSH command so that it uses the current record number according to the record number variable in the open statement, as opposed to the one last saved inside the ISAM library. The problem with the previous method was if the ISAM'PUSH did not immediately follow another operation on the same file, some intervening ISAM operations to other files could disrupt the state information within the ISAM library, causing the ISAM'PUSH to not push the proper location. The ISAM traces have also been slightly improved, to show ISAM'PUSH, ISAM'POP, and to clarify the different kinds of FIND operations. 5. --- AUI_CONTROL: The bottom border of groupboxes has been raised up 2 pixels to give vertically adjacent groupboxes just a little bit more space. (This may be rescinded if the effect isn't appreciated.) ============================================================================ A-Shell Development Notes Version 5.0.979.4 (04 Jan 2007) ============================================================================ 1. --- TAB(-10,AG_WALLPAPER) wasn't working properly, with the usual symptom being that restoring previously saved wallpaper wasn't working. ============================================================================ A-Shell Development Notes Version 5.0.979.3 (04 Jan 2007) ============================================================================ 1. --- AUI_CONTROL: Further fix to AUI_CONTROL fix in 979.2, which was causing large-scale unwanted clearing of controls within dialogs. 2. --- AUI_CONTROL: ATE/UNIX side was inappropriately defaulting the aux data argument to "QQQQQQQQQQ..." which wasn't hurting anything but was causing some confusion in the ATE trace of the debug window. ============================================================================ A-Shell Development Notes Version 5.0.979.2 (03 Jan 2007) ============================================================================ 1. --- INFLD: Rework fix #2 in 979.1 below, as it was causing GUI fields to expand inappropriately on redisplay. 2. --- COMPIL: (1.1.348) Workaround problem compiling FOR/NEXT loops in /X mode that are embedded in the midst of MAP statements. 3. --- XTREE: Close a loophole that would lead to a protection fault if the SftTree DLL control was not found. Note that in this case, as well as several other system errors, XTREE will set EXITCODE to the MMO_SYS value, which happens to be 207 (this goes back to INMEMO and PCKLST). So your app should detect such an error and do something appropriate. 4. --- AUI_CONTROL: The CTLOP_CLR was not taking into account child/parent offsets when clearing a rectangular area based on the coordinates (rather than the more common case where a control ID or name is specified in order to clear all of the children of the control). For example, a clear request with the CTEXT="*" and coordinates of 1,1,5,40 would have (improperly) removed controls that were in that coordinate range but which were children of a control which was not in that range. ============================================================================ A-Shell Development Notes Version 5.0.979.1 (03 Jan 2007) ============================================================================ 1. --- INFLD: Fix problem where the row value would be unexpectedly doubled (related to changes in the V parameter format discussed below). Problem mainly seemed to occur with ATE in conjunction with GUI and use of the original legacy V format (F,6,1). Problem only affected ATE (Windows side only.) 2. --- INFLD: Fix problem with the final display of expanding fields (like date, $, phone), being chopped off at the original XMAX length. Problem affected both UNIX and Windows. ============================================================================ A-Shell Development Notes Version 5.0.979.0 (02 Jan 2007) ============================================================================ 1. --- This version marks the beginning of the cutover from the development version 4.9 to the stable version 5.0. As of today, this should be considered only a "release candidate". After a week or two of field testing and patches, it will become the official stable release and we will begin a new development on 5.1. Those to whom the concept of of a stable release is important should take advantage of this period to test this version thoroughly and report any bugs so that they can be resolved when the stable release is rolled out. 2. --- DIR.LIT 3.0(139) fixes a bug where SET LONGDIR would only work for the first set of files processed. (For example, DIR A,B would display the A files in LONGDIR format and the B files in the old short format.) 3. --- ATSYNC.LIT 1.0(105) fixes a minor annoyance where the command line history buffer would contain garbage after executing ATSYNC (meaning that you'd have to hit Control-R several times to repeat the same ATSYNC command line over again). 4. ABOUT.LIT 1.0(107) updates: - Don't display bogus *EXPIRED* message next to ATE expiration if not running on an ATE terminal. (The ATE maintenance expiration only has meaning relative to the version of each ATE client.) - Add a /R switch to force a rebuild/recount of the JOBTBL.SYS before displaying the information - Add a Usage display (if an invalid switch or /? specified). ============================================================================ A-Shell Development Notes Version 4.9.978 (31 Dec 2006) ============================================================================ 1. --- A-Shell/Windows now remembers the last command line that it was started with (on a user-by-user basis), so that if you launch it without any arguments, it will use that last command line. Also, if no previous command line known, and no command line passed, and no MIAME environment variable defined, it will default to looking for MIAME.INI in the path above the executable. Both of these are mainly intended to be useful in conjunction with auto-update routines, as well as possibly with ShellExecute and HOSTEX. 2. --- Functions/Procedures bugfix: XPUTARG #,VAR was not working properly if VAR was locally of type B, while the remote copy was F,6. 3. --- Compiler fix: (compil.exe 1.1.347 and embedded version) fixes a problem with use of overlays in MAP statements within functions and procedures. Please note that when using overlays within a function or procedure, both variables must be local and have the same longevity (static vs automatic). For example: Procedure test() static map1 vs1,s,10 static map1 vs2,s,10,@vs1 ! ok (both local static vars) map1 v1,s,10 map1 v2,s,10,@v1 ! ok (both local stack vars) map1 v3,s,10,@vs1 ! not ok (mixing static, non-static) 4. --- INFLD: INFLD now allows the V parameter to also contain a name to assign to the INFLD control, in addition to specifying the parent control id or name. To use this feature, you must use the string form of the V parameter, and append ">" + ctlname to it, i.e.: , one of the following formats: V$ = "parentname>infldname" or V$ = str(parentid+1)+">infldname" or V$ = "1>infldname" XCALL INFLD,ROW,COL,XMAX,XMIN,TYPE,ENTRY,INXCTL,V$,OP,... In the first case, the INFLD control will be made a child of the control whose name is "parentname", and will be assigned the name "infldname". The second is the same concept, except that it identifies the parent by its number. (Note that parent ID numbers continue to be offset by one in this case.) The third is just a special case of the second, in which we are not specifying any parent for the control (1 being the default historical value of the V parameter.) Also note that assigning a name to an INFLD control doesn't have much effect unless the control is going to remain on the screen after the XCALL INFLD. 5. --- XTREE: You can assign a name to an XTREE control by adding the COLDEF clause "CtlName=name" to any column (where name is the name you want to assign). 6. --- XTEXT: A new field TXC'IDNAME has been added to the TXTCTL structure (see updated XTEXT.MAP in the SOSLIB) to allow specifying names for the parent and/or XTEXT control. You may use any of the following formats: TXC'IDNAME = "xtextname" TXC'IDNAME = "parentname>xtextname" TXC'IDNAME = ">xtextname" Note that if the parent control name is specified this way, then it overrides anything in the TXC'PARENTID field (and that field will be updated on return with the numeric control ID matching the specified parentname.) Note that despite the similar format used by the INFLD V parameter, in this case a name by itself (with no ">") is interpreted as the name of the control rather than the name of the parent control (as in INFLD). 7. --- ATE FTP: Now creates local directories as needed. Previously, if the local directory didn't exist, the transfer would fail. 8. --- XTREE: You may now have more than one group of radio buttons per row. To accomplish this, add the new Group=# clause to the COLDEF definition for each radio button column. The default group is 0, so by default, all radio buttons are in the same group. If you want to create a second group of radio buttons, specify Group=1 for each of them. ============================================================================ A-Shell Development Notes Version 4.9.977.6 (28 Dec 2006) ============================================================================ 1. --- Fix a problem causing certain startup error messages to appear in an empty dialog. 2. --- Compiler: Fix a problem recently introduced in which a nested ++include would not default to the ersatz directory of the parent ++include under UNIX. 3. --- GUI: AUI_CONTROL CTLOP_CHG with MBST_CHANGEX now updates the control name. ============================================================================ A-Shell Development Notes Version 4.9.977.5 (22 Dec 2006) ============================================================================ 1. --- XCALL AUI: Attempting to change the position of an existing dialog using CTLOP_CHG and MBST_POS was not working for the top and left sides; only for the bottom and right. ============================================================================ A-Shell Development Notes Version 4.9.977.4 (22 Dec 2006) ============================================================================ 1. --- XCALL AUI: The newly created CTLID was not being returned in many cases, causing all kinds of weird problems. (Problem introduced in 976). ============================================================================ A-Shell Development Notes Version 4.9.977.3 (22 Dec 2006) ============================================================================ 1. --- Licensing counting: The license counting logic has been cleaned up with the goal of eliminating some of the situations where it got of of sync with our stated policies, some of which are: a) UNIX background tasks (that do not have a tty) together count as 1. b) Up to three telnet/ssh connections may be allowed to share a license if they have the same IP address and meet certain requirements that make them appear to be initiated by the same PC, as opposed to merely sharing some kind of router/concentrator. c) Any number of windows on the same PC may share an A-Shell/Windows lic. 2. --- INFLD: Fix bug (caused in 976) in which if V=1, the parent ID of the GUI control would sometimes get set to 1 (rather than the default of the main window or current dialog.) ============================================================================ A-Shell Development Notes Version 4.9.977.2 (19 Dec 2006) ============================================================================ 1. --- XTREE bug fix: reentry after exiting from a checkbox or radiobox cell was starting in the wrong cell if the tree had been sorted. ============================================================================ A-Shell Development Notes Version 4.9.977.1 (17 Dec 2006) ============================================================================ 1. --- GUI Bug Fix: Operations involving the identification of controls on the main window within a specified rectangle (such as to save/restore or clear them) wasn't working properly, since 4.9.976. 2. --- Compiler Bug Fix (Build 345): The following was not being compiled correctly: fn'x(array(fn'y(z))) The result was generally a GPF when the statement was executed. Such contructions (a function used as an argument to an array, which is turn an argument to a procedure or function) must be recompiled. ============================================================================ A-Shell Development Notes Version 4.9.977 (17 Dec 2006) ============================================================================ 1. --- XTEXT: Implement XTEXT update (TER14.DLL) and spell checking. Spell checking requires the following modules be in the BIN directory: SPELL32.DLL DICT25.APP (application dictionary) DICT25.D (main dictionary data) DICT25.I (main dictionary index) DICT25.S (small/core dictionary) DICT25.U (user dictionary - optional, created as words added) To activate spell checking, set TXC'FLAGS4 = &h100 before calling XTEXT. Misspelled words will be underlined in red; right-clicking on them will provide a list of similar words and an option to either add the word or ignore it. Added words go into the DICT25.U file, which will be created if it doesn't already exist. Contact Ty for details on licensing the spell checker. 2. --- Basic Language: Compiler now supports the ability to specify explicit types and sizes for parameters in function / procedure definitions, as well as the function return type/size, as in this example: Function fn'x(var1, var2 as s100, var3 as b1) as i4 End Function Each parameter, as well as the function itself, allows an optional "as " clause to override the implicit type and size that would otherwise be assigned per the normal implicit rules. In the example above, var1 will be assigned the default numeric type (F8); var2 will be allocated as a 100 byte string, and var3 as a 1 byte binary. The function itself will return a 4 byte integer value. The allowed types and sizes are the same as for map statements, except that there is no comma between the type code and the size digits. Note that although individual parameters do not have to conform to the implicit rule of using $ to indicate string variables, the function itself does. So in the example above, we can override the default type of F8 for the function fn'x(), but only as long as we stick with numeric types (F,B,I). In order to use a string type, we would still have to name the function with a $ suffix, i.e. fn'x$(). (In this case, the main point is to be able to override the default string size.) ============================================================================ A-Shell Development Notes Version 4.9.976.5 (15 Dec 2006) ============================================================================ 1. --- AUI_IMAGE: Fix bug in which UNIX filespecs would transfer to the ATE client but then fail to display (return STATUS=2, file not found). Note: fix is required on the UNIX side, not the ATE side. 2. --- XTREE: Fix minor bug where a validation exit caused by navigating sideways out of an editable cell on the first row was setting XTR'TARGETROW to 2, causing re-entry on row 2 instead of row 1. 3. --- XTREE: When pressing/releasing the ALT key causes a validation exit from an editable cell, XTR'XNAVCOD will now return 18 (in case your app wants to respond specifically to this event.) 4. --- XTREE: The XTREE trace output has been enhanced slightly to show the XTR'XNAVCOD and XTR'XNAVMASK outputs. ============================================================================ A-Shell Development Notes Version 4.9.976.4 (14 Dec 2006) ============================================================================ 1. --- XTREE: XTR'XVALIDATE was returning 1 instead of 2 when exiting for validation of checkboxes. Note that XTR'XVALIDATE=1 means that the XTR'XROW/XTR'XCOL cell (i.e. the one we just left) needs to be validated; while 2 means that the XTR'TARGETROW/XTR'TARGETCOL cell needs to be validated (the one we just clicked or are navigating to). In the case of checkboxes, they exit for validation only when the checkbox value changes, which occurs immediately when you click, rather than when you move the cell focus (as would be the case with a normal editable cell). So if you are focused on a checkbox at 5,7 and you click another checkbox at 3,9 then XTR'XROW/XTR'XCOL will be returned as 5,7, while XTR'TARGETROW/ XTR'TARGETCOL will be returned as 3,9. But the checkbox that has changed is the one at 3,9 (the one clicked), so it is the one that should be validated. 2. --- Font Scaling: Fix a bug in which setting the Dialog Sizing font scaling option to "Windows Desktop Font Size" was affecting controls on the main window, not just controls in dialogs. ============================================================================ A-Shell Development Notes Version 4.9.976.3 (13 Dec 2006) ============================================================================ 1. --- WINDOWS COPY.LIT enhancement: When copying from a device with the read-only flag set, the read-only bit will now be automatically cleared. (This provides a work-around for a change in the behavior of COPY.LIT, starting in 3.1(121), whereby it started preserving the attributes of the copied file. In general this is desirable, but when copying files from a CD (which typically have the read-only bit set by the CD burning software), it can be a major annoyance. To activate the feature for use with COPY.LIT for copying files from a CDROM drive, you don't have to do anything (other than update ASHW32 to at least this version). A-Shell will automatically detect that the source is a CDROM drive and auto-clear the read-only attribute. To activate the feature for copying from some other kind of device that A-Shell does not automatically recognize, or when using XCALL MIAMEX, MX_COPYFILE,SRC,DST,FLAGS within your own programs with AMOS-style filespecs, you may need to specifically add the ,RO flag to the DEVICE definition for the source device, in the miame.ini, e.g.: DEVICE=CDR0: D:\MYPATH\,RO ; declare CDR0 as a readonly device This will assure that A-Shell recognizes source files from CDR0: as being on a read-only device. Note that appending the ",RO" flag to a DEVICE definition doesn't have any other effect, except to display "read only" next to it in the DEVTBL display. 2. --- XCALL enhancement: Related to the above, two new bits have been defined for use in the FLAGS argument in XCALL MIAMEX,MX_COPYFILE,SRC,DST,FLAGS: CPYF_SETRO = &h0010 ! force readonly bit to be set on output CPYF_CLRRO = &h0020 ! clear readonly bit on output Currently these only have meaning in WINDOWS. If neither is set, then the status of the readonly flag is preserved, unless copying from a device with the ,RO flag, in which case the readonly flag will be cleared (see previous item). ============================================================================ A-Shell Development Notes Version 4.9.976.2 (12 Dec 2006) ============================================================================ 1. --- HOSTEX fix (Windows): HOSTEX (or any operation launching a Windows command line) was launching a DOS window and wasn't working. (Introduced in 976). ============================================================================ A-Shell Development Notes Version 4.9.976.1 (11 Dec 2006) ============================================================================ 1. --- XTREE fix: Close loophole where exiting for cell validation due to a vertical scroll operation was causing it to re-enter at the cell last validated (instead of being shifted to the nearest cell now in view after the scroll.) ============================================================================ A-Shell Development Notes Version 4.9.976 (11 Dec 2006) ============================================================================ 1. --- XTREE enhancement: date column code D (for MM/DD/{CC}YY format or DD/MM/{CC}YY format, depending on language definition) now supports more flexibility in formats, including dates with other delimiters (e.g. 12-31-06), no delimiters (e.g. 12312006), as well as dd-mon-{cc}yy format (e.g. 12-dec-2006). This effectively eliminates the need for the separate COLDEF code d (for dd-mon-yy format), although it remains supported for backwards compatibility. The XTRA3 sample program (in [908,21] of the SOSLIB and also uploaded separately to the http://www.microsabio.net/aftp/dsk0/908021 directory) has been updated to illustrate this with a hodge-podge of date formats. (The main issue here is sorting, so test by sorting the date column.) 2. --- GUI Enhancement: Controls may now be given names, which can then be used instead of the ID numbers to reference them. To assign a name to a control when creating it, specify a string parameter with the desired name in place of the CTLID parameter, i.e.: CTLNAME$ = "Cus-cbTaxExampt" PARENTNAME$ = "dlgCustomer" xcall AUI, AUI_CONTROL, CTLOP_ADD, CTLNAME$, CTEXT$, CSTATE, & CTYPE, CMD$, FUNC$, CSTATUS, SROW, SCOL, EROW, ECOL, FGC, BGC, & FONTATTR, FONTSCALE, FONTFACE, TOOLTIP, PARENTNAME$, WINCLASS, & WINSTYLE, WINSTYLEX, CTYPE2, CAUXDATA In the example above, the string variable CTLNAME$ is being used in place of the normal numeric CTLID parameter (which normally returns the ID of the newly created control). Since we are assigning the name "Cus-cbTaxExempt" to the control, we probably don't need to get back the numeric control ID, but in case you do want to save it, it will be in the CSTATUS parameter. (Previously CSTATUS was set to 0 for success; now, if a string name is used in place of the CTLID parameter, CSTATUS will return the ID #.) Similarly, the PARENTID parameter may be replaced with a string name in order to reference the parent by its name rather than number. Control names should be unique across all controls used within a single program. You may want to adopt a naming standard which includes a prefix for the dialog and perhaps another prefix to identify the control type, as in our example above, where "Cus-cbTaxExempt" is meant to indicate that it is part of the Cus dialog, and it is a checkbox (cb). Names may be up to 23 characters long, plus a trailing null. You can retrieve the control ID # associated with a control name, or vice versa, using the CTLOP_INFO opcode. To get the ID # associated with the name, just use CTLOP_INFO with the name in place of the CTLID parameter; the ID # will be returned in CSTATUS (just as when the control was created). For example: xcall AUI, AUI_CONTROL, CTLOP_INFO, CTLNAME$, CTEXT$, CSTATE, & CTYPE, CMD$, FUNC$, CSTATUS if CSTATUS > 0 then CTLID = CSTATUS To get the name associated with a control ID #, specify a string variable in place of the CTLID parameter, that contains the string representation of the control ID #, e.g.: CTLNAME$ = str(CTLID) ! e.g. "7" xcall AUI, AUI_CONTROL, CTLOP_INFO, CTLNAME$, CTEXT$, CSTATE, & CTYPE, CMD$, FUNC$, CSTATUS In this case, the CTLNAME$ parameter will be updated on return, with the name of the control. A new "Name" column has been inserted into the Control Dump, providing a convenient way for you to verify how your control names and numbers are matching up. Note that although you may specify a name for the PARENTID parameter, the name is converted to the equivalent number at the time the control is added. So the PARENTID name doesn't show in the control dump. But the CTLOP_INFO command will return the PARENT control name if you specify a string variable in place of the PARENTID parameter. Also note that for controls and functions that do not currently support a convenient means of specifying a symbolic name for the control ID or parent ID when creating the control (e.g. XTREE, XTEXT, EVENTWAIT), you have to convert the control names to ID numbers (using CTLOP_INFO if necessary). The symbolic names are currently supported in all forms of AUI_CONTROL, TAB(-10,20), MX_AUTOPARENT, and TAB(-10,87). 3. --- INFLD Enhancement: INFLD now allows the V parameter (mainly used for specifying the parent control ID) to be a string parameter with the parent control name (same concept as the PARENTNAME$ parameter in AUI_CONTROL described above). For example, PARENTNAME$ = "dlgCustomer" XCALL INFLD,ROW,COL,XMAX,XMIN,TYPE,ENTRY,INXCTL,PARENTNAME,OP,... 4. --- VUE Fix/Enhancement: VUE 3.2(284) reverts the locking under Windows back to the way it was prior to 3.2(280), meaning that although it prevents two Windows users from VUEing the same file in update mode, it allows read-only access to a file that is being VUE'd. Starting with 3.2(280), we made the locking more strict to better coordinate locking between cross-platform users, but this had the undesirable side effect of making it impossible to compile a program in one job if it was being VUE'd in another. To activate the stricter locking, you can now add the following to the INI.VUE: LOCKSTRICT = TRUE Otherwise, the more permissive style locking will be in force. Note that the permissive locking is not believed to be reliable in cross-platform environments. (In such cases, or whenever you have mixture of VUE and EDITOR users, you should probably use the LCKFILE=TRUE option.) ============================================================================ A-Shell Development Notes Version 4.9.975 (06 Dec 2006) ============================================================================ 1. --- New XCALL: xcall DSKCOM, OP, MSGNAM, VAR DSKCOM is identical to the existing COMMON.SBR except that it is disk based, allowing sharing of information between different jobs. Also, the package name (MSGNAM) may be up to 12 characters instead of the standard 6. (This allows you plenty of space to prepend the jobname if you want to identify which packets go with which jobs.) The file is OPR:COMMON.SYS, and will be automatically create on first access if it does not exist. (You can erase it to forcefully reset any existing packets.) The number and size of packets is determined in the same way as for COMMON.SBR, i.e. via the SBR=MSGNUM:#,MSGSIZ:# parameters in the miame.ini. The default is 6 packets of 150 bytes. You may ALIAS=COMMON:DSKCOM if you want to convert your existing COMMON to disk based. 2. --- INFLD: Left and right arrow exitcodes (2 with TYPE 2, 12 with TYPE L) are now supported in non-GUI horizontal scrolling mode (i.e. when MAXCHRS > XMAX). 3. --- XTREE: New flag XTF_NOZEROEX (&h40000000) prevents XTREE from exiting with EXITCODE 0. This would mainly be useful in conjunction with XTF_EDITABLE where you wanted to only exit for validations and explicit click operations as opposed to a spurious ENTER key that slips in while the tree is selection mode (between editable cells). 4. --- XTREE: When in an editable cell that requires validation, if you use the mouse on the vertical scroll bar to scroll the row out of view, the returned XTR'TARGETROW value will be set to the top or bottom of the visible range of rows, whichever is closest. This counteracts the "boomerang scroll" effect whereby using the scroll bar when in an editable cell would work only until the mouse was released, after which if XTREE exited for validation, when the app returned, the XTR'TARGETROW would still be pointing to the cell that was being edited, thus snapping the scroll operation back to the original position. 5. --- COMPIL: Remove the "%Warning: DIMX not AMOS compatible" message when using DIMX with the /RC switch. (The warning was valid; DIMX is not AMOS compatible, so technically doesn't belong with /RC, but a certain influential A-Shell developer has offered to compensate anyone damaged by this clandestine "feature". ============================================================================ A-Shell Development Notes Version 4.9.974.4 (05 Dec 2006) ============================================================================ 1. --- XTREE: fix obscure timing problem where a queued up click string would cause XTREE to exit just as it was being entered (with the exitcode normally used for clicking on the inactive XTREE). 2. --- INFLD: fix problem with spurious space character in input buffer after hitting TAB from a combo box. 3. --- INFLD: Support ^\ (to display TYPE codes) in combo boxes. ============================================================================ A-Shell Development Notes Version 4.9.974.3 (04 Dec 2006) ============================================================================ 1. --- XTREE: It is now possible to scroll horizontally using the left and right arrow keys, provided that the XTF_LEFT and XTF_RIGHT flags are not set and that the tree is not in cell editing mode. The scroll increment has been arbitrarily set at 32 pixels (until such time that someone comes up with a really clever formula for scroll just the right amount.) 2. --- XTREE: Fix an obscure problem where context menus would stop working after re-loading an existing XTREE using certain combinations of opcodes and flags. 3. --- XTREE: Refine handling of popupmenus in the context of editing. Now, if you are in an editable cell (with validation) and you right-click on another editable, XTREE displays the context menu immediately and waits to see what user action will take place before deciding whether to exit. If the user aborts the context menu, then, if the previously edited cell needs validation, then it exits with EXITCODE -48. If it didn't need validation, then we just return to editing that cell. If the user selects an item on the popupmenu, then we exit with that EXITCODE, but still set the XTR'XVALIDATE and XTR'XROW/XTR'XCOL fields appropriately if validation of the previous cell is needed. As an example of this, try the updated XTRA5 sample program (edit 131), which can be downloaded from http://www.microsabio.net/aftp/dsk0/908021. Open up the Debug message window and activate the XTREE trace. Hit ENTER to all the questions except say Yes to the validation question. Then select a cell in the description column (going into editable cell mode.) Clear the contents, then right-click on another column (the read-only checkbox column for example). This will display the popupmenu. When you dismiss the popupmenu, either by selecting a choice on the menu or by some action that cancels the menu, you will then get the validation message, indicating that an empty cell is not acceptable. You'll be able to see in the debug messages the exitcode and other relevant values. ============================================================================ A-Shell Development Notes Version 4.9.974.2 (03 Dec 2006) ============================================================================ 1. --- GUI: The dialog font scale factor was getting reset to zero after being saved and re-loaded. ============================================================================ A-Shell Development Notes Version 4.9.974.1 (03 Dec 2006) ============================================================================ 1. --- XTREE: Further refinements to tracking of to/from cell coordinates for exit validation. XTR'CLICKROW / XTR'CLICKCOL fields renamed to XTR'TARGETROW / XTR'TARGETCOL (to emphasize that they don't relate solely to clicking). When exiting for validation due to keyboard navigation, XTR'XROW / XTR'XCOL will identify the "from" cell and XTR'TARGETROW / XTR'TARGETCOL will identify the "to" cell. XTR'XNAVIGATE will be set to 1 to indicate that the XTR'XROW / XTR'XCOL cell should be validated, or 2 to indicate that the XTR'TARGETROW / XTR'TARGETCOL cell should be validated, or 3 to indicate that both should be validated. (The 2 case arises when navigating from a cell that does NOT have exit validation to a read-only editable cell which has pre-validation. The 3 case arises when navigating from a cell that DOES have exit validation to one that has pre-validation.) 2. --- XTREE: The X flag (for validation) now means "conditional validation", it only exits for post-editing validation if the editing operation changed the cell contents. (When combined with COLDEF flag u, for editable read-only, it continues to always exit for pre-validation prior to editing the cell.) A new COLDEF flag, x (lower case x), may be used for "unconditional validation" of normal editable cells. When combined with "u", it defeats the pre-validation and always causes post validation. (The value of post-validating an edit of a read-only cell may be debatable, but this might be useful for the sake of uniformity if you want to validate between every cell movement.) ============================================================================ A-Shell Development Notes Version 4.9.974 (02 Dec 2006) ============================================================================ 1. --- GUI: We no longer permit a modal dialog to get the focus unless it is "the" (current) modal dialog. Previously it was possible to cover up the current modal dialog by clicking on another A-Shell dialog. 3. --- GUI: A new font scaling option has been added to the Dialog Sizing dialog, so that the fonts in ALTPOS dialogs can be scaled separately from fonts in the main window and those in dialogs based on the main window grid. 4. --- GUI: A help button has been added to the Misc. Settings and Dialog Sizing dialogs. (Grab the latest Ashsetup.chm file from www.microsabio.net/aftp/doc to complete the effect.) 5. --- GUI: XCALL MIAMEX, MX_WINSETTINGS (first introduced in edit 940) has been updated with new fields: ID Symbol ID # Meaning/Values -------------------------------------------------------------------- AWS_DLGFONTSCALE 13 Font scaling for ALTPOS dialogs AWS_DLGCAPTINC 14 Include caption in ALTPOS dialog height AWS_WININFBGC 15 BG color to use for active edits (&h00BBGGRR format) A new opcode, AWSOP_SAVE (2) has been added to save the current settings back to the current (or a specified) .ash file: xcall MIAMEX, MX_WINSETTINGS, AWSOP_SAVE, FILE$, STATUS FILE$ can be "" for the current .ash file, or may be set to something else to save the current settings to a new file and to make that file be the current file. Note that typically only a name.ext (e.g. "sample.ash") is necessary, since the directory where the current .ash was loaded from would be the default. STATUS will come back 0 for ok, or else a number indicating the Windows error #. (A message box will also display if there is an error; you can also retrieve the description of the error via MIAMEX, MX_ERRNOMSG). Note that you can re-load the last saved settings using MIAMEX, MX_SHOWWINDOW, OP+64. 6. --- ASHICO1.DLL has been updated (to version 1.0.0.4) with several new icons: "arrow_down_blue::ashico1" ! (blue arrows) "arrow_left_blue::ashico1" "arrow_right_blue::ashico1" "arrow_up_blue::ashico1" "arrow_down_green::ashico1" ! (green arrows) "arrow_left_green::ashico1" "arrow_right_green::ashico1" "arrow_up_green::ashico1" "bookmark::ashico1" ! (bookmarks) "bookmark_add::ashico1" "bookmark_delete::ashico1" "bookmark_down::ashico1" "bookmark_new::ashico1" "bookmark_up::ashico1" The ICODLG program in [908,27] has been updated to display the new icons. The updated ASHICO1.DLL may be downloaded from: http://www.microsabio.net/aftp/bin-win/ashico1-4.zip =========================================================================== A-Shell Development Notes Version 4.9.973.2 (27 Nov 2006) ============================================================================ 1. --- XTEXT: Fix problem where ^Z would remove text protection. (This was actually due to the fact that ^Z is the keyboard shortcut for UNDO, which was undoing the action taken by the application to mark the text as protected.) 2. --- COMPIL (edit 343) fixes a problem in which functions/procedures did not compile correctly if the program was large enough that the automatic /A or /AV switch had to be activated. (There was no problem if the /A and/or /AV was explicitly specified on the COMPIL command line.) ============================================================================ A-Shell Development Notes Version 4.9.973.1 (26 Nov 2006) ============================================================================ 1. --- GUI: Adjust logic determining height of controls. (This partially resolves an issue that became apparent in 973 in which buttons at the bottom of ALTPOS dialogs suddenly got closer to the bottom than before, but, for worse or hopefully better, goes beyond that). The new rule is that when the EROW coordinate of a control is expressed using regular rows (not millirows), then the control height will not include the external leading (see Misc. Settings dialog), unless it is a variation of edit control and the Misc. Settings option to allow edit controls to extend into the leading area is set. On the other hand, if the EROW coordinate was expressed in millirows, then the control height will include the external leading. Previously, the second part of the rule was also contingent on the ALTPOS option. (Then, in 973, it was inadvertantly changed so that as long as ALTPOS was in effect, millirows were not needed to get full-height controls.) This sounds confusing, but hopefully the new rule is more logical and simpler than the old one. The idea behind it is as follows: a) When using regular row units, it is common to put controls in adjacent rows. In order for these to not appear too crowded (especially for buttons and other controls that have their own borders), it seemed logical to preserve the external leading area between the rows as empty space. b) But, when using millirows, the idea is that row N occupies millirows N*1000 to (N+1)*1000-1. (E.g., row 5 spans millirow 5000 to 5999.) Thus, íf you actually asked for a control to occupy millirows 5000 to 5999, you would expect it to be right up to the edge of another control that started in millirow 6000. It would seem too confusing if the system automatically converted your request for a control spanning millirows 5000-5999 into one spanning millirows 5000-5850 in order to preserve the leading area. This line of reasoning seems sensible whether or not ALTPOS is in effect. So, if you are updating from a previous version, it is possible that depending on whether you were using millirows and/or ALTPOS, that some of your buttons and edit boxes may get taller or shorter by the amount of the leading, but in the majority of those cases, the effect will probably be too small to matter much, or will be an improvement. A new sample program, TSTBTX in [9??,*] has been added to the SOSLIB to illustrate the different button heights for different button styles. 2. --- EVENTWAIT improvement 1: AUI_EVENTWAIT now does a better job of identifying the current control ID when the EVENTWAIT was terminated by a keyboard or mouse event that EVENTWAIT was "entirely" in control of. For example, if you were in an EVENTWAIT for a dialog with a handful of buttons which generated the equivalent of F1, F2, F3, etc., and you exited by hitting F1 instead of TABbing around until you had the focus on the corresponding button and hitting ENTER, it will now try to match the exitcode generated by the button to the corresponding control. Similarly, if you click on a control to force an exit via the control's click string, it will now properly identify the control. (This is a relatively minor improvement, since in nearly all cases, it is the exitcode that you care about, not the control id, but it becomes more relevant when you re-enter the eventwait operation, since in that case, the starting control ID could affect subsequent navigation logic.) 3. --- EVENTWAIT improvement 2: Most situations that previously caused EVENTWAIT to abort with exitcode 99 now instead act as if you had set the control ID parameter to 0 (i.e. defaulting to the focus on the first control). Such situations include: a) the control ID you specify doesn't exist or isn't a child of the specified parent ID; b) the exitcode you specify (in the case of EVW_EXCDFOCUS) doesn't match any control in the range. Although these are "errors" in the sense that you are asking EVENTWAIT to do something that is impossible, they are so minor that reporting them as errors and forcing your application to deal with them is more hassle than it is worth. Under the new scheme, if you have the GUI TRACE option on, it will log the error, but otherwise will just ignore it and revert to putting the focus on the first control in the range specified by the parent. 4. --- XTREE enhancement: the Dspwid= column definition option can now be used to specify a fudge factor adjustment (+/- pixels) rather than just a fixed size. To specify a fudge factor, insert a + or - after the =, e.g. Dspwid=+5 ! increase calculated width by 5 pixels Dspwid=5 ! set width at 5 grid units 5. --- XTREE enhancement (warning: possibly changes existing column layouts): Previously, Dspwid= and Dspmin= always used the main window grid units. Now, if the XTREE belongs to a dialog using the ALTPOS grid, the specified units are interpreted as ALTPOS units. 6. --- XTREE refinement: Clicking on a cell that has a ClickExit= definition now sets the XTR'CLICKROW and XTR'CLICKCOL fields, in addition to the XTR'XROW and XTR'XCOL fields. (Unless the click occurs while an editable cell that gets validation is active, both sets of ROW/COL fields will be the same. Otherwise XTR'XROW/XTR'XCOL will point to the editable cell that needs validating, XTR'XVALIDATE will be set to 1, and XTR'CLICKROW/XTR'CLICKCOL will point to the cell you clicked on.) NOTE: XTREE context menus (right-click menus) do not work reliably with editable cells (yet). 7. --- GUI/W2000 fix: Static controls stopped generating click strings under W2000 back in edit 966. Now they work again. ============================================================================ A-Shell Development Notes Version 4.9.973 (21 Nov 2006) ============================================================================ 1. --- Extended TCRT: A-Shell/Windows and ATE now support the following extended tab commands: ? tab(-10,62);"0";chr(127); ! disable wrap ? tab(-10,62);"1";chr(127); ! enable wrap By default, wrap is enabled and there has never been an option to disable it. 2. --- Scaling logic now applies to dialogs immediately, and the ALTPOS grid basis has changed slightly. (Unfortunately this will likely have a minor effect on the width of existing dialogs using ALTPOS, but the new formula is slightly more natural, and virtually eliminates the need for the strange 160 default width scale in the Dialog Sizing dialog. Consequently, existing dialog sizing scale factors will be reset to 100 for existing .ash files. (Once you re-save any settings, your saved settings will be preserved.) For dialogs using the ALTPOS grid, the grid basis continues to be the size of a character in the default GUI font. The actual grid row height is equal to the height of a combo box plus the external leading, and the grid column width is about half way between the "average" and maximum character width for the default gui font. Unlike before, the default gui font is scaled according to the scale factor in the Misc. Settings dialog. Since scaling that font also affects the height of combo boxes and the average character width, the entire grid scales along with the font scale factor. For example, with the font scale factor set to 0 or 100, the dialog grid will be based on the default size of the default GUI font. (This is the font you see in menu bars and in most standard Windows dialogs.) If you change that to, say, 90, then the dialog and everything in it should get about 10% smaller. (Scaling isn't entirely linear or orthogonal, but that's approximately the idea.) Related to this, the Dialog Sizing dialog offers a new option of whether to include the dialog caption in the dialog height when forcing dialogs to use the grid based on Font Size (i.e. ALTPOS units). Normally, dialogs using the font-size or ALTPOS grid are sized so that they have the expected number of rows not counting the caption bar. For example, if SROW = 1 and EROW = 10, then there will be room for 10 logical rows inside the dialog. This is quite convenient and logical, but conflicts with the way non-ALTPOS (main-window based) dialogs are sized, since they include the caption in the height. So in our example of SROW=1 and EROW=10, the outer height of the dialog would be equivalent to 10 rows in the main window, but since that includes the caption, you'll probably end up with something closer to 9 rows. This causes a problem when trying to convert dialogs to the ALTPOS grid, because you almost always end up with the equivalent of one extra row in the dialog. The new option in the Dialog Sizing dialog to include the caption in the dialog height should help you counteract that. Note however, that it only has an effect on dialogs that weren't explicitly coded to use MBF_ALTPOS. (The theory is that if you coded the dialog to use the ALTPOS grid, then you were counting on the number of rows. But if you coded it to use the main window grid, and then we force it to use the ALTPOS grid via the option on the Dialog Sizing dialog, then you probably don't want the extra row. Another side effect of the new scaling logic is that you can indirectly resize an active dialog by resizing the main window behind it. 3. --- XTREE bug fix: When clicking from one editable cell to another editable cell, it was setting XTR'XROW and XTR'XCOL to the clicked-to cell, rather than the clicked-from cell (which is the one that needs validating.) XTREE bug fix: While editing a cell, right clicking on another (to bring up the context menu) was not working right. It now exits with EXITCODE -48 with XTR'XROW and XTR'XCOL set to the cell to be validated, but when you re-enter, the context menu will appear in the expected location. 4. --- XTREE refinement: Clicking on a checkbox or radio button while in an editable text cell now immediately updates the clicked-on checkbox or radiobutton. 5. --- XTREE: Three new fields have been added to the XTRCTL structure in the XTREE.MAP file: ... ! (existing) MAP2 XTR'CLOSEDENDED,B,1 ! (exiting) map2 XTR'XVALIDATE,B,1 ! [119] 1=must validate xrow,xrol MAP2 XTR'CLICKROW,B,4 ! [118] last clicked on row MAP2 XTR'CLICKCOL,B,1 ! [118] last clicked on col MAP2 XTR'UNUSED2,X,19 ! [118] (was 25) [119] was 20 XTR'CLICKROW and XTR'CLICKCOL return the row/col position of where the mouse was clicked when that clicked caused an exit from an editable cell for which validation was needed. In such a case, the existing XTR'XROW and XTR'XCOL fields will continue to identify the cell that needs to be validated. On re-entry, if XTR'CLICKCOL and XTR'CLICKROW fields, if non-zero, will determine the re-entry position. The XTR'XVALIDATE field will be set to one if the cell indicated by XTR'XROW and XTR'XCOL needs validation. Previously you had to rely on exitcode -48 to identify when validation was needed, but this is not adequate when the even which terminates an editable cell operation is a click on another control that generates its own exitcode. In that case, the exitcode returned to the application will be that of the clicked-on control, and the XTR'XVALIDATE flag will be handy to indicate that the cell identified by XTR'XROW and XTR'XCOL needs to be validated. 6. --- XTREE enhancement: you can now have multiple editable XTREEs on the same screen, with the ability to click directly from an editable cell in one, to an editable cell in the other. Note that you will need to transfer the XTR'CLICKCOL and XTR'CLICKROW values returned from the original XTREE into the XTRCTL structure passed to the clicked-on XTREE. 7. --- COMPILER enhancement (or fix, depending on how you look at it): You may now have non-array variables named FN'xxxx. Previously the compiler assumed that these were functions, generating undefined function or reserved word errors. 8. --- COMPILER enhancement (or fix, depending on how you look at it): The ++include search path for nested include files that do not specify a dev: or [p,pn] now starts with the current directory. Previously, if the prior ++include at the same level referenced an ersatz:, that ersatz: became the default for other ++includes at that level. ============================================================================ A-Shell Development Notes Version 4.9.972.1 (14 Nov 2006) ============================================================================ 1. --- GUI: TAB(-10,AG_WALLPAPER) (-10,39) wasn't properly parsing quoted filespecs or handling those with [p,pn] in them. 2. --- GUI: VUE was not disabling wallpaper when running in local Windows mode. 3. --- XTREE: Fix problem with not being able to sort a column repetitively (up/down) without clicking on another column header in between. 4. --- Runtime fix: XGETARG within a function was not properly translating arguments passed as F6 to arguments received as I or B type. (Problem did not affect SBXs.) 5. --- ATSD: Fix (yet another!) situation where an untimely telnet disconnect could leave an instance of ASHW32 running on the server, using up a lot of CPU time and outputting a lot of error messages to the ashlog. 6. --- XTREE: Back off from a previous refinement that caused the right or bottom edge of the XTREE to be snapped to the edge of the parent control if it was within a couple of logical columns. Now, the right and bottom edges are only snapped to the parent edge if they otherwise would have been clipped by the parent edges. ============================================================================ A-Shell Development Notes Version 4.9.972 (05 Nov 2006) ============================================================================ 1. --- ATE: LOG function now includes aux printing control codes and data. 2. --- Compiler: Calling a traditional subroutine within a function or procedure is now allowed (both the body of the subroutine and the call to it must be within the Function/EndFunction or Procedure/EndProcedure). 3. --- XTREE: XTF_TAB now overrides the normal editing/navigation use of the TAB and SHIFT-TAB keys (allowing you to TAB entirely out of the XTREE even from an editing operation). 4. --- GUI: Settings|Dialog Sizing option to base dialog sizing on main window grid now overrides the explicit use of MBF_ALTPOS within a program. (This was always the intent but was never implemented.) ============================================================================ A-Shell Development Notes Version 4.9.971.4 (03 Nov 2006) ============================================================================ 1. --- Compiler fix: compilation of DIMX in main program (not inside a function or procedure) was broken - was causing a GPF. (Introduced in 971.1). 2. --- Compiler enhancement: errors caused by attempting to use a reserved word in a map statement or parameter list now give a more specific error than merely "illegal syntax". 3. --- Runtime fix: XPUTARG now works with I variables. 4. --- Compiler/Runtime enhancement: Function parameters may now use the % suffix to force them to be treated as integers (I,4) instead of floating point, e.g.: Function fn'myfunc(A,B%,C$) ============================================================================ A-Shell Development Notes Version 4.9.971.2 (02 Nov 2006) ============================================================================ 1. --- Runtime fix: XPUTARG was not working within a procedure if another procedure had already been called in that procedure. 2. --- AUI_EVENTWAIT fix: END was setting exitcode -45 (same as HOME) instead of -46 as it was supposed to. 3. --- XTREE adjustment: XTF_NOREDRAW with opcode 0/1 was causing the initial display to take longer than before. Now, XTF_NOREDRAW can be used with opcode 1 (replace) to load the new data top of the old data (without first clearing it), possibly reducing the "flash". ============================================================================ A-Shell Development Notes Version 4.9.971.1 (02 Nov 2006) ============================================================================ 1. --- Compiler fix: FOR/NEXT statements were generating errors in /RC mode. 2. Runtime fix: TRACE.xxxx statements were displaying garbage in place of the $P plug-in variable (which is supposed to whose ). ============================================================================ A-Shell Development Notes Version 4.9.971 (01 Nov 2006) ============================================================================ 1. --- Runtime fix: command lines and TRACE/DEBUG statements with "%" characters were causing some strange results. 2. --- STRTOK.SBR enhancement: OP parameter now supports a +2 flag to cause it to recognize quoted arguments. For example, consider the following string: "DSK0:A.B[111,222]",ARG1,ARG2 If the field delimiter is a comma, normally STRTOK would parse the args like this: "DSK0:A.B[111 222]" ARG1 ARG2 By adding +2 to the OP parameter, it will parse it like this: DSK0:A.B[111,222] ARG1 ARG2 (Yes, I was shocked to discover it didn't always work this way by default.) Note that it removes the quotes. 3. --- ATE: TAB(-10,23) expands "$ASHELL" (equivalent to "$ATE") into the ASHW32.EXE command line and miame.ini specification necessary to launch a child A-Shell session underneath ATE. Example: ? TAB(-10,23);"$ASHELL run myprog";chr(127); 4. --- Fix bug in processing the initial A-Shell command line that was causing it to get stuck in an infinite loop with command lines containing backslashes. 5. --- AUI_EVENTWAIT enhancement: When EVW_CTLARROWS flag set, CTRL+ and CTRL- return EXITCODE -62 and -61 respectively. (Note that you need to hit the + and - keys on the numeric keypad.) When EVW_CTLCLIPBD is set, CTRL Z returns EXITCODE -60. 6. --- XTREE enhancement: control boundaries will now be adjusted to the edge of the parent window of XTREE if XTREE edges were within a few pixels or were beyond the edges. Previously, the control was visually clipped, making it impossible to see the part outside the parent window (dialog). Now, if you want XTREE to stretch from the left edge to the right edge of a dialog, set the SCOL param to 1 and the ECOL param to something large enough to always go past the right edge (like 999). 7. --- COPY.LIT 3.1(126) fixes a problem with harmless but annoying "Error 256 occurred" messages under UNIX. 8. --- ATSYNC.LIT 1.0(104) now displays file transfer errors in a message box, unless the /NOERR switch is specified. Also, fix the /CONT flag (causes it to continue trying to transfer remainder of files after a transfer error.) And finally, fix a syntax parsing problem in which it didn't like certain command lines starting with a comma (i.e. default hostdir). 9. --- New Installation Setup Change: In default MIAME.INI, replace SBR=INFDEF:|G||C (GUI mode INFLD) with SBR=INFDEF:|_ (text mode, force underlines for field markers.) ============================================================================ A-Shell Development Notes Version 4.9.970.5 (31 Oct 2006) ============================================================================ 1. --- Run time interpreter bugfix: "enhancement" in 970.1 (item 5) to detect access to a DIMX'd var before the DIMX was actually executed had the undesirable side effect of applying to any unmapped array. Now fixed. ============================================================================ A-Shell Development Notes Version 4.9.970.4 (30 Oct 2006) ============================================================================ 1. --- VIC32 library errors now reported to debug message window (opening it if necessary). This helps debug a problem which has intensified recently when certain control types with images started using VIC32.DLL to load the image (rather than letting the control creation API do it). Because of this increased reliance on VIC32.DLL, we are now including it with ATE and ASHW32. ============================================================================ A-Shell Development Notes Version 4.9.970.3 (30 Oct 2006) ============================================================================ 1. --- Compiler: New variation of ++INCLUDE: ++INCLUDE'ONCE file Acts same as ++INCLUDE except that if a file with the same name and extension (not considering ppn, ersatz, disk, etc.) has already been included, the operation is ignored. This turns out to be quite convenient if you store user-defined functions in individual BSI files, and some of them reference other user-defined functions. This way, you can ++INCLUDE'ONCE the BSI's needed by the current BSI, without having to know whether the calling program has already ++INCLUDEd that BSI. (Of course, this only works if the main program also uses ++INCLUDE'ONCE for this type of BSI.) 2. --- Compiler: Fix problem with use of system functions in the argument list of user-defined procedures. 3. --- Runtime enhancement: TRACE.PRINT / PAUSE.PRINT no longer try to replace % characters with parameter substitutions unless the string being printed starts with $ (i.e. $# or $T). In that case, you should avoid trying to output string messages certain % character sequences such as %s, %d, %x as the internal string formatter will replace them with arguments that probably aren't defined and will end up as numeric garbage. ============================================================================ A-Shell Development Notes Version 4.9.970.2 (30 Oct 2006) ============================================================================ 1. --- XTREE.SBR fix: test for invalid ANSARY (see item 6, 970.1 below) was falsely reporting a problem when running with older A-Shell/UNIX. ============================================================================ A-Shell Development Notes Version 4.9.970.1 (29 Oct 2006) ============================================================================ 1. --- SORTIT.SBR enhancement: It is now possible to specify the first element of an array to be sorted. Previously, you had to map the array underneath an unformatted variable like this: MAP1 ARRAYX MAP2 ARRAY(100) MAP3 FLD1,S,10 etc. The problem with requiring the ARRAYX variable (in the example above) to be passed to SORTIT.SBR is that it prevents you from sorting arrays allocated via DIMX. So now it is possible to do something like this: DIMX ARRAY(COUNT),S,WIDTH XCALL SORTIT,ARRAY(1),COUNT,WIDTH,K1SIZ,... Note that in such a case, there is no way for the subroutine to verify that the ARRAY actually has COUNT elements, so you'ld best be cautious lest you commit mayhem in memory. 2. --- GUI: Further improvement to the control dump to provide more human-readable class names and to distinguish between variations of the same class (like Date or Time, vs. DATETIME). 3. --- GDI Printing Bug fix: The FONTWIDTH and FONTHEIGHT printer initialization parameters stopped working in 958.1. 4. --- Compiler fix: FOR/NEXT loops were generating compiler syntax errors within functions. 5. --- Runtime refinement: Attempts to access a DIMX variable before the DIMX statement is actually executed are now flagged with error 30 (subscript out of range.) Previously, no error was triggered, with unpredictable results. (Note that the compiler "defines" variables when it sees a MAP or DIMX statement during compilation, regardless of whether the statement is in the execution flow of control. But in the case of DIMX, the defined variable is just a placeholder of minimal size, until the DIMX statement is executed at runtime.) 6. --- XTREE.SBR refinement: XTREE now checks for and reports two common and difficult-to-debug errors. The first is if the MAPped definition of the COLDEF string is not long enough to hold the entire definition. (Note that as a side-effect, you are no longer allowed to pass a literal string for the COLDEF parameter - it must be a mapped variable.) The second error occurs when the width of the ANSARY elements doesn't match up with the expected width according to COLDEF. Note that in order to perform this check, you must pass the ANSARY as an element, i.e. ANSARY(1), rather than as an unformatted variable, e.g. ANSWERX. 7. --- GUI: Fix a problem in which dialog context menus didn't work for dialogs that were not the current modal dialog. Also, the actual popup menu now appears in the right position, even when the dialog is in negative coordinate space (on a 2,1 dual monitor arrangement). ============================================================================ A-Shell Development Notes Version 4.9.970.0 (28 Oct 2006) ============================================================================ 1. --- Compiler: Implement PRIVATE and PUBLIC keywords for fine tuning of scope of variables (MAP or DIMX) in the context of functions and ++includes. Here's an update of the various combinations (including STATIC). But first a few definitions relating to variable scope and duration: Global (scope) = Potentially visible from everywhere in the program. (Note: global variables are not visible within functions and procedures unless ++pragma auto_extern declared within the routine.) This is the default for MAP variables except when declared inside a function or proc. Local (scope) = Visible only within the function or procedure in which the variable was declared. This is the default for variables mapped within a function or procedure. File (scope) = Visible only within the ++include file. Requires PRIVATE keyword (PRIVATE MAPn...) and should only be used within ++include files that are colletions of functions and procedures. The PRIVATE MAP statement must appear outside of any functions or procedures. Static (duration) = Variable persists for duration of program. This is the default except for variables mapped within functions/procedures. Prefixing such MAP statements with STATIC will give them static duration. Unlike automatic variables (see below), there is only one copy of each static variable in memory, even in the case of recursion. Automatic (duration) = Variable is automatically created and destroyed at runtime for each instance of a function or procedure. This is the default for variables mapped inside of a function or procedure. These are also called "stack" variables, because they are allocated on the stack. (When the function or procedure returns, they get popped off the stack.) Note that in the case of recursion, you can have multiple instances of a stack variable (one for each nesting level of the function call). Like all variables, they are always pre-initialized to zero or null (unless the MAP statement contains an explicit initialization value). Now, let's review the new keywords STATIC, PRIVATE, PUBLIC: - MAPn ... Defines a global, static variable, unless it occurs within a function or procedure, in which case it defines a local automatic variable. Local variables (whether static or automatic) are invisible outside that routine. Note that if a MAP statement contains an explicit initialization value, then it has the effect of an assignment statement that gets executed at runtime. Thus, if MAP statement is in the flow of control in such a way that it can be executed multiple times, the definition of the variable only occurs once (by the compiler) but the optional initialization would occur each time the MAP statement was executed. - STATIC MAPn ... Used only within functions and procedures to force creation of a static variable rather than the normal automatic stack variable. Note that if the MAP statement contains an initial value, it will only be assigned once. -PRIVATE MAPn ... Used only within a ++include file, and outside of any function or procedure. This defines a variable that has file scope, and in particular will be visible within any function or procedure inside the current ++include file. This is useful when a group of related procedures need to share a few global variables that the outside program has no business knowing about. - DIMX ... Defines a variable to be dynamically allocated at runtime. Note that the compiler defines the variable when the DIMx statement is encountered (as it would for a MAP statement), but the variable cannot be referenced at runtime until the DIMX statement is executed. The actual memory for the variable is allocated outside the user partition, and gets cleaned up when the program (or SBX) ends. If DIMx occurs within a function or procedure, by default the variable would be a local stack variable and thus only accessible between the time the DIMX was executed and when the routine ended. Since the cleanup doesn't occur until the program ends, this could cause a build-up of memory allocations and thus is not recommended. (See STATIC DIMX or PRIVATE DIMX or PUBLIC DIMX). Note that DIMX is an extended implementation of the original DIM statement, which is now deprecated and not officially supported within functions. - STATIC DIMX ... STATIC DIMX is to DIMX as STATIC MAPn is to MAPn. Used only within functions or procedures to cause the DIMX allocation to persist. As a pratical matter, to avoid executing the DIMX statement multiple times (if the function is called multiple times) you will probably have to associate it with another local STATIC flag variable that you set when the DIMX is executed. - PRIVATE DIMX ... PRIVATE DIMX is to DIMX as PRIVATE MAPn is to MAPn (i.e. declares the variable to have file scope and static persistence), except that it only makes sense for such a statement to occur within a function or procedure within a ++include file. (Although DIMX, like MAPn, is preprocessed by the compiler for the purposes of "defining" the variable, regardless of where it occurs in the source code; DIMX statements need to be actually executed before the variable can be referenced. Since statements occuring outside of a function but inside of a BSI are for most practical purposes, outside of the flow of statement execution, it doesn't make sense for PRIVATE DIMX to be anywhere but inside a function or procedure.) However, once executed, the variable will be accessible from other routines within the same ++include file. As with other PRIVATE variables, this is useful when a set of related functions or procedures wish to share access to a dynamically allocated structure. - PUBLIC DIMX ... This is a special form of DIMX that can occur only inside a function or procedure. (Unlike PRIVATE DIMX, it doesn't have to be within a ++include file.) It overrides the normal default of local scope and stack persistence for variables defined within a function of procedure, instead making the variable visible anywhere in the entire program. This is handy in a situation where you want to use a function or procedure to create a dynamic memory structure (perhaps by loading the data from or across the internet) that is then available in the main program. 2. --- GUI: Slight modification to control dump - Class column now contains more friendly class names, and a new column has been added for the real class names. 3. --- XTREE: The backslash \ character now marks the start of hidden text within a column in array mode, just as it does in file mode. Note that to treat backslash as a normal character, you need to add the \ code to a column definition (any column will do). (WARNING: This may break existing XTREEs that contain backslashes in the array data since previously the \ column code was not necessary for arrays; talk to Herman if you don't like this, or just add \ to your column definitions.) 4. --- Terminal support: TAB(-1,20) (read character at cursor address) is now supported under Windows and ATSD. ============================================================================ A-Shell Development Notes Version 4.9.969.3 (26 Oct 2006) ============================================================================ 1. --- Compiler: Allow "End Function" as an alternative to "EndFunction" and "End Procedure" as an alternative to "EndProcedure". 2. --- Compiler: Procedures and functions now support switches and do/while loops within them. (Previously this caused a compiler error message.) 3. --- Compiler: Fix an obscure problem with handling of switches that were logically nested (by execution chronology) but not physically nested. ============================================================================ A-Shell Development Notes Version 4.9.969.2 (25 Oct 2006) ============================================================================ 1. --- Runtime bug fix: (A-Shell/Windows) A directory lock was not being released after scanning a directory until another directory was scanned. The one known symptom was that SYSACT could not delete a directory (because it scans it immediately before trying to delete it.) 2. --- XCALL MIAMEX,MX_COPYFILE fix: under UNIX, it was not working with filenames containing spaces. 3. --- Compiler (1.1.326) fixes a problem introduced with function support in Compiler version 1.1.322 in which CALL and GOSUB didn't allow the use of a line number instead of a label (e.g. GOSUB 1000). (We probably should have left this as an error and just changed the message to one chastising you for even attempting such an offense against programming aesthetics, but backward compatibility concerns overruled.) 4. --- Installation program: Now supports a target directory with spaces in it. 5. --- GUI: MBF_ALTPOS dialogs with no parent were not being positioned properly according to the grid. (The sample program DLGCTR[908,28] wasn't always centering the dialog, depending on the screen resolution and other factors.) ============================================================================ A-Shell Development Notes Version 4.9.969.1 (24 Oct 2006) ============================================================================ 1. --- ATSD / Terminal Driver Fix: AM75/AM65 was not allowing certain function keys to be translated (particularly PageUp / PageDown). 2. --- XTREE bug fixes: - Clicking on the expand/collapse buttons in a multi-level tree was returning exitcode -48 (rather than performing the expand/collapse) if an editable cell previously had the focus. - On re-entry (XTROP_RESELECT), if the XTF_NOREDRAW flag is set, no changes are made in the status of currently expanded or collapsed rows. Otherwise, the XTR'EXPANDLEVEL parameter determines that. - Close memory leakage loophole when using XTROP_REPLACE or XTROP_CREATE to replace data in an existing tree that had auxiliary memory allocations to support features such as row fonts and images. - When a column defined a ClickExit= option, the following column was acting as if it had ClickExit=-1. - TAB and Shift-TAB now navigate from the first editable cell to the last (as they would in a dialog). The arrow keys, however, stop the navigating at the end of the row or column. 3. --- AUI_CONTROL: The CTYPE2 flags can now be updated via opcode CTLOP_CHG with the MBST_STYLE flag. ============================================================================ A-Shell Development Notes Version 4.9.969.0 (23 Oct 2006) ============================================================================ 1. --- COMPILER: Support user-defined functions. Syntax: FUNCTION FN'name(var1,...varN) FN'name = ! set return value ENDFUNCTION Notes: - Function name must begin with FN' (case insensitive). A side effect of this rule is that you may not define an array with a name starting with FN'. If the function name ends in $, then it returns a string value; otherwise it returns a floating point value. - To invoke the function, just reference it using array syntax, i.e.: A = FN'name(x,y,z) You may also invoke it as a statement rather than an expression, using: CALL FN'name(x,y,z) - Parameter passing: Any variables in the formal parameter list (var1,...,varn) will be assigned from the calling parameters, converting as necessary. Their types will be determined by the normal rules for unmapped variables. If the call does not specify all the params, any leftover are set to 0 or null. If the call specifies more params than are listed in the function definition, or the parameter types are not suitable for the default string/floating point types, you may also retrieve the arguments via XGETARG (just as you would in an SBX). The number of parameters passed will be available in the system 'dot' variable .ARGCNT, but the types and sizes will not be available. (If you need that kind of flexibility, use an SBX!) The main reason for using XGETARG or XPUTARG would be to pass a structure parameter. Note that you may want to use STRSIZ # just prior to the function definition to define the default string size, if you plan to pass strings longer than the usual default. - The parameter list may be empty, in which case you use an empty pair of parentheses (). - Local variables: Any MAP statements defined between FUNCTION and ENDFUNCTION are considered local stack variables, which are allocated and initialized for each instance of the function. You may also prefix MAP statements within the function definition with STATIC (e.g. STATIC MAP1 S'COUNT,F) to make the local variable persistent across instances of the function. Such a variable will only be initialized once, the first time the function is called. - Global variables: By default, you may not access variables defined outside the function. However, you can enable this capability with ++PRAGMA AUTO_EXTERN "" (e.g. ++PRAGMA AUTO_EXTERN "TRUE"), in which case any variable referenced within the function that is not locally mapped will be assumed to be a global variable. (This pragma is turned off by default at the start of each function.) - Return expression: The default return value is 0 for numeric functions and "" for string functions. To set another return value, assign it to the variable matching the function name (e.g. FN'name = -1). Note that this is similar in concept to the RETURN(expr) statement in an SBX, except that it doesn't end the function. (You can have many assignments to the return variable; only the last one will matter at the time the function returns.) - Error trapping: By default, Basic errors are internally filtered in such a way that the error appears to the caller to have occurred on the line the called the function. (This allows the stack to be properly unwound before doing an unstructured ON ERROR GOTO out of the function.) You may, however, create a local error trap inside the function, using the regular ON ERROR GOTO statement. The local error trap may resume back to locations within the function. A new variation of the RESUME statement also allows the local error trap to forward errors to the caller: RESUME ENDFUNCTION {WITH_ERROR {N}} Without the optional WITH_ERROR clause, this acts like a normal RESUME LABEL, except that a special reserved label ENDFUNCTION is used to indicate the end of the function. A common way to use this feature would be: FN'name = err(0) ! assign basic error # to function value RESUME ENDFUNCTION ! return to caller (with error cleared) This would clear the Basic error condition (so it doesn't trigger the caller's ON ERROR GOTO), but it would still return to the caller the error number so that the caller could take action in a more structured manner (as opposed to via an error trap). If the WITH_ERROR {N} clause is specified, then the function returns, but the current error (or error N, if specified) is set, causing the caller to get an error on the line that called the function. RESUME WITH_ERROR is equivalent to what happens if you don't establish error trapping within the function at all. - Exiting the function. Besides exiting by hitting the ENDFUNCTION statement naturally, you may also exit from anywhere inside the function by executing the EXITFUNCTION statement. This example of a function to allocate a file illustrates many of the possible statements: strsiz 100 ! make sure spec$ gets a reasonable size Function Fn'Alloc(spec$,bytes) map1 blocks,f,6 static s'tot'allocations,f on error goto Trap ! local error trap blocks = int((bytes + 511) / 512) allocate spec$,blocks s'tot'allocations = s'tot'allocations + blocks Fn'Alloc = 0 ! unnecessary but explicit exitfunction ! exit function Trap: ! note this label doesn't conflict with outer TRAP Fn'Alloc = err(0) ! set return value to error # resume endfunction ! clear Basic error and return EndFunction In the above example, the local static variable s'tot'allocations will get incremented by the number of blocks each time the function is called. (It doesn't serve any purpose in this example, as there is no way to retrieve it, but it might, for example, be used to prevent the program from allocating too many blocks in one session, or for computing statistics.) 2. --- COMPILER: Support user-defined procedures. Syntax: PROCEDURE procname(var1,...varN) XPUTARG n, ! return (1 or more) parameters ENDPROCEDURE Notes: - Procedures are exactly like functions except that they cannot be used as expressions, and they don't return an expression value. (Like functions, or SBX routines, they can update any of the parameters passed.) The also use similar to separate keywords: FUNCTION PROCEDURE ENDFUNCTION ENDPROCEDURE EXITFUNCTION EXIPROCEDURE - To call the procedure, use a form of the CALL statement: CALL procname(var1,...varn) 3. --- COMPILER: New pragmas: ++PRAGMA TRACK_LAST_ROUTINE ++PRAGMA TRACK_LAST_LABEL (Where may be "ON", "OFF", "TRUE", "FALSE", 1 or 0). The first pragma generates an internal assigment statement each time a function or procedure is called. The second does the same, but for every label. These may be retrieved via the new 'dot' variables (see next). 4. --- COMPILER: New 'dot' variables: .LAST_ROUTINE (name of last called function or procedure) .LAST_LABEL (name of last label passed) .ARGCNT (number of parameters passed in last call) .NEST_LEVEL (# of levels deep with nested function/procedure calls) 5. --- Extended TAB Commands: Two new macros have been added to the TAB(-10,23) command (which executes a Windows command line): TAB(-10,23);"$COPY ";src$;" ";dst$;"~";flags;chr(127); TAB(-10,23);"$MOVE ";src$;" ";dst$;"~";flags;chr(127); Although it is possible to execute a Windows file copy using the XCOPY command, these new macro commands are much cleaner in the sense that they don't cause a Command Prompt window to appear, won't prompt you for anything, and don't have such complicated switches. The macro implementation is essentially the same function as MIAMEX,MX_COPYFILE and they share the same flags. ($MOVE is equivalent to $COPY with the +1 flag; +2 can be added in either case to allow an existing destination to be overwritten.) If ~flags is omitted, the default is 0 (don't overwrite an existing destination). ============================================================================ A-Shell Development Notes Version 4.9.968.9 (20 Oct 2006) ============================================================================ 1. --- ATS: Fix a problem with AM75/AM65 emulations relating to the use of reverse video, underline, and other commands which typically require a space. The symptom was it was outputting an extra space. Note that the problem didn't occur with the "no-space" versions of the commands (e.g. 106/107 and 108/109 instead of 30/31 and 32/33). 2. --- ATS: Fix a problem in which disconnecting would sometimes cause the ashw32.exe on the server to try to report a socket error, which would sometimes cause it to go into an infinite loop (requiring that the ashw32.exe process be manually killed on the server via the task manager.) ============================================================================ A-Shell Development Notes Version 4.9.968.8 (19 Oct 2006) ============================================================================ 1. --- MIAMEX,MX_RMPATH fix: Under UNIX variants, XCALL MIAMEX,MX_RMPATH was generating a seg fault if it could not delete the directory (because it wasn't empty) AND the BASERR trace was turned on. (The seq fault was in the trace logic, not the directory delete routine.) 2. --- MIAMEX,MX_COPYFILE no longer defaults to xxx extensions. ============================================================================ A-Shell Development Notes Version 4.9.968.7 (17 Oct 2006) ============================================================================ 1. --- COPY.LIT 3.1(124) Now skips wildcarded source files that have more than one extension, and displays a warning message listing the filename. The problem was that a file like xxx.yyy.lck would get copied to xxx.yyy (since when wildcarding, A-Shell LIT commands only create valid 10.3 filespecs). You can still copy such a file using quoted native filespecs. 2. --- MOVE.LIT 3.0(107) Same change as for COPY.LIT. 3. --- GUI: CTLOP_INFO was truncating MBF_STATIC+MBF_BITMAP filespecs at 40 bytes. 4. --- GUI: Icons displayed via MBF_STATIC+MBF_ICON were getting scaled. (Static icons were not intended to be scaled; use bitmaps or button icons if you want them scaled to the size of the control.) ============================================================================ A-Shell Development Notes Version 4.9.968.6 (17 Oct 2006) ============================================================================ 1. --- GUI: MBF_STATIC+MBF_ICON now works with icons loaded directly from .ICO files. Previously you could only load a discrete ICO file from disk into a button (not a static control). Static controls only supported icons loaded from a DLL (e.g. "gear::ashico1") or from A-Shell itself (e.g. "#hand"). The TSTICB sample in [907,023] was updated to load one static icon along with the other button icons as an illustration. 2. --- Close a loophole in which TRACE.PRINT would crash A-Shell if the output string expression was longer than 512 bytes. (It now gets truncated). ============================================================================ A-Shell Development Notes Version 4.9.968.5 (16 Oct 2006) ============================================================================ 1. --- *** WARNING: READ THIS FOR IMPORTANT COMPATIBILITY ISSUE *** XTREE: Handle the answer array for editable cells that also support individual cell color in a more consistent and flexible manner. Previously, checkboxes always took only one column in the answer array, even if they support individual cell colors (and thus required two columns in the main data array). Now, two columns are required in the answer array for each checkbox that supports cell colors (B). Just as with the main data format, the first column is used for the cell color index code, and the second for the checkbox data (0/1/2). This change will break existing programs that have this type of columns (like XTRA5 - see updated version in 908,021). For other editable cells, the change is minor, since they previously allocated a an extra column in the answer array to account for the color byte in columns with the B code. The difference now is that the first byte of the field is reserved for the color code. Previously, the color code was not expected to appear in the answer array (thus making the answer array and main data array one column out of sync.) Besides eliminating some confusion over how to handle this kind of column, the new scheme allows you to update the color of individual cells on re-entry while still using XTROP_RESELECT and XTF_NOREDRAW. The XTRA5 sample program has been updated to illustrate this. Both the description column and the XL checkbox column combine the B code for individual cell colors with being editable. If you activate the validation option, clicking a checkbox in the XL column will cycle the cell through three different colors as it cycles through the three states of the checkbox. Also, if you uncheck all of the checkboxes on a row, the description cell will change to a pink color. Note that on re-entry, a blank passed for the color index will preserve the existing color, rather than setting it back to the default. The color codes passed back from XTREE in the answer array will always be blank. ============================================================================ A-Shell Development Notes Version 4.9.968.4 (16 Oct 2006) ============================================================================ 1. --- XTREE/ATE: Fix XTREE file mode in ATE (broken in 968.2; wasn't returning the selected row correctly.) ============================================================================ A-Shell Development Notes Version 4.9.968.3 (14 Oct 2006) ============================================================================ 1. --- ATSD: AM75 emulation function keys weren't working. Note: For non-ATE emulators, you must use 8 bit international mode in order for function keys to work. (ATE always works in 8 bit mode.) 2. --- GUI MONCAL: Clean up of two minor annoyances related to the MCS_DAYSTATE option (which allows highlighting of indiviudal days): - The days of the month would initially appear to be randomly highlighted for a brief-but-visible instant before the application set them. (This was particularly noticeable if you scrolled rapidly through the months.) - The control generated internal "new date selected" messages at about two minute intervals, which generate the same exitcode as if the user had actually selected a new date. (It's not clear if this was intended to be a feature, but it seemed like more of annoyance so we now squelch the "new date selected" signal unless a new date was actually selected. 3. --- COMPIL: New miame.ini switch OPTIONS=RC_DIMX tells compiler to allow DIMX statement in /RC mode. (DIMX is not supported by AMOS, so this doesn't make sense, but it may be useful in cases where you know you won't try to execute the DIMX statement but just want to have a single copy of the RUN program that runs on AMOS and A-Shell.) 4. UNIX: New MIAMEX function 167 for verifying at runtime that a set of open files matches the directory entries for those files: XCALL MIAMEX,MX_VERINODE,STATUS,CH1{,CH2...,CHN} STATUS returns 0 if all the specified channels are valid; else it returns <0 for a system error or else the channel # of the first file in the list that doesn't match its directory entry. Background: under UNIX, it is possible to use the mv command to rename a file even if it is in use. This is because mv is thought of as merely a directory operation, whereas file operations all use the inode rather than the name entry in the directory. Since renaming a file doesn't change its inode, it doesn't affect files that are currently operating on the inode. Once the file is renamed, you can then create or copy a new file whose name matches the original name. That still doesn't affect processes with the file open, since the new file will have a different inode and thus isn't really in conflict with any existing processes using the old file. However, that could cause problems for the application if two sets of users are operating on different copies of the file, thinking that they are the same copy. The new XCALL can be used to make sure that the open file(s) still match the directory entries for those files. Note that it only works under UNIX (Windows doesn't use inodes and this situation wouldn't arise there), and it only currently works for random and ISAM-A (DISAM) files. ============================================================================ A-Shell Development Notes Version 4.9.968.2 (12 Oct 2006) ============================================================================ 1. --- GUI: Work around problem with popup dialog positioning not being correct when running on dual monitors in 1,2 configuration. 2. --- XTREE: The combination "uX" (editable read-only, with validation) now causes an automatic exit with EXITCODDE -48 whenever the cell is ENTERED (rather than EXITED). (This makes some sense, given that you should be able to modify the cell if it is read-only, so there isn't any point in post validation. But there is a point in pre-validation if you wanted to perform some action whenever the user selects one of these cells, either by clicking on it or using keyboard navigation.) In this mode, it does not exit for validation on attempts to key in data (as it does for a read-only editable cell without the X code.) ============================================================================ A-Shell Development Notes Version 4.9.968.1 (11 Oct 2006) ============================================================================ 1. --- XTREE/ATE: Fix 64K limit on size of ANSARY. (Exceeding this was causing bad things to happen, including segmentation fault.) 2. --- XTREE read-only editable cell refinements: a) we no longer select the text in the cell when starting the edit operation; b) doubleclick now exits with EXITCODE -59. ============================================================================ A-Shell Development Notes Version 4.9.968 (09 Oct 2006) ============================================================================ 1. --- Force "child" modal dialogs to display above their parents. Previously, it was possible to cover up the active dialog by clicking on another dialog, which left the user thinking the session had died because the active dialog was no longer visible. This new behaviour should be automatic except in the case where the "parent" dialog is modeless. In that case, you must specify the ID of the parent dialog when you create the child dialog. 2. --- Fix a problem with using more than one Mask= in a single XTEXT control. 3. --- XTREE: cformat u (edit readonly) now supports individual cell colors. ============================================================================ A-Shell Development Notes Version 4.9.967.9 (05 Oct 2006) ============================================================================ 1. --- INFLD prehistoric mode (|p) no longer overrides explicit GUI mode (|G). 2. --- XTREE Mask= now integrated into the editable cells operation, so that before a cell is edited, non-numeric mask characters are stripped out, and when the editing operation is completed, the field is reformatted using the mask (for the purposes of display). 3. --- Remove item #3 from 4.9.967.8 below. 4. --- XTREE: timeout and context menus (during a cell edit) now work in split mode (previously they only worked in non-split mode). ============================================================================ A-Shell Development Notes Version 4.9.967.8 (04 Oct 2006) ============================================================================ 1. --- XTREE: Last RGBbg/RGBfg designed in header no longer "spills" over into first defined column. 2. --- XTREE: Fix bug where after passing through a read-only editable cell, normal keys would stop working in regular editable cells. 3. --- XTREE: Take into account at least 75 rows when deciding whether we need a horizontal scroll bar. (Previously it was only looking at the initially visible rows.) 4. --- XTREE: When editing a cell that has an individually-assigned cell background color, use it for the edit background color too. 5. --- XTREE: New advanced column option Mask= can be used to associate a numeric formatting mask with a numeric column. Mask syntax is the same as for the Basic USING statement. 6. --- EVENTWAIT: New flag EVW_CTLCLIPBD (&h00100000) causes the normal Windows clipboard shortcuts to be returned as exitcodes: ^C=-56, ^V=-57, ^X=-58. ============================================================================ A-Shell Development Notes Version 4.9.967.7 (03 Oct 2006) ============================================================================ 1. --- INFLD prehistoric mode (|p) now overrides the GUI flag (same as if ||g had been specified) and also defeats the auto-bevelling feature used when terminal supports Windows but GUI not requested. (Note: |_ also overrides the auto-bevelling but forces the marker to be an underline, while |p uses prehistoric dots.) 2. --- XTREE: Minor improvement to handling of cell data with column code B (where the first byte is a color index). Previously the byte took up space in the display if it didn't match a color. 3. --- Minor relaxation of license counting for background jobs. 4. --- XTREE: Fix memory leak relating to popup menus attached to columns. (Eventually this was leading to inability to allocate new memory modules.) 5. --- EVENTWAIT: new flag EVW_CTLARROWS (&h080000) may be added to EVW_VAREXIT or VAR_HAREXIT to cause CTRL+arrow to return a unique exitcode (offset by -16 from the SHIFT+arrow exitcodes). Previously, CTRL+arrow returned the same exitcode values as the arrow keys by themselves. 6. --- GUI: Improvement to mouse capture/highlight mode; capture is disabled while mouse is not over target window, eliminating need to click twice to get a response from another control while capturing. ============================================================================ A-Shell Development Notes Version 4.9.967.5 (30 Sep 2006) ============================================================================ 1. --- The AUI_MENU opcode 4 (MNUOP_POP), which displays a previously defined context or popup menu, now supports millirows: xcall AUI, AUI_MENU, MNUOP_POP, MENUID, "", ROW, COL, "", "", STATUS {,DLGID} 2. --- GUI: INFLD Up-Down (aka spin) controls now preserve their Up-Down buttons even when the field is not active. (Previously they reverted to ordinary edit controls when not active.) Note that if you click on one of the Up-Down buttons while the field is not active, it will trigger the click string for the field, but not increment or decrement the field value. (This is deliberate to avoid the possibility that your application may decide not to respond to the click string by enabling the field, thus giving the user the false impression that the field value had actually been updated.) Although this will be a slight annoyance, it is no worse that before (where you had to click the field to activate and display the Up-Down buttons before the field could be changed), and has a somewhat better visual aesthetic. 3. --- A new control type flag, MBF_UPDOWN (&4000) has been implemented to facilitate the above change. Generally you would not use this flag directly, unless you wanted to create an Up-Down control independent of INFLD. In that case, use MBF_EDIT + MBF_UPDOWN (+ any other relevant flags); set WINCLASS$ = "ASHEDIT", and WINSTYLE to any valid ES_xxx flags (Windows Edit control styles). Such a control will allow the user to change the value by clicking on the Up-Down buttons, independent of any signals or actions by the application. You would need to use the AUI_CONTROL CTLOP_INFO function to retrieve the current value of the field. 4. --- Two new AUI_CONTROL CSTATE flags, MBST_ZTOP (&H200000) and MBST_ZBOTTOM (&h400000) may be set to force the control to be at the top or bottom, respectively, of the "Z-order". (The "Z-order" determines the display order of controls that otherwise have the same precedence. In general, controls created later are farther down the Z-order than controls created earlier. These flags would mainly be of use in situations where you have overlapping sibling controls.) ============================================================================ A-Shell Development Notes Version 4.9.967.4 (28 Sep 2006) ============================================================================ 1. --- XTREE (ATE server side): fix bugs causing last byte and byte following last byte of ANSARY to be clobbered in some cases. 2. --- XCALL MIAMEX,MX_USRLOD now supports an additional parameter, (COUNT), making it easier to load full or partial arrays into a memory module: xcall MIAMEX,MX_USRLOD,IDX,FSPEC${,FLAGS{,VAR{,COUNT}}} When FLAGS contains USRMEM_NOFILE (meaning that the module is to be loaded from contents of the variable VAR, with FSPEC$ indicating the desired name of the memory module), then if VAR is actually an array element, e.g. VAR(1), then COUNT can be specified to indicate the number of elements to load starting with the specified element. For example: MAP1 ARRAY(75),S,25 XCALL MIAMEX,MX_USRLOD,MIDX,"MYMOD",USRMEM_NOFILE,ARRAY(1),70 The above would load 75 elements of the array, starting with ARRAY(1) into a memory module named "MYMOD", whose index number would be returned in MIDX. WARNING: It is impossible for the subroutine to know whether the COUNT value you specify is actually valid (i.e. not larger than the array), so the responsibility is yours. 3. --- Corresponding to the MX_USRLOD enhancement above, XCALL MIAMEX,MX_USRIO now allows you to read and write full or partial arrays. No new parameters are needed. The only change is that now, if the specified VAR is an array element, then the BYTES specified is trusted, even if it exceeds the size of the VAR parameter. (This is needed, because when an XCALL parameter is specified as array element, e.g. VAR(1), then the size seend by the XCALL is the size of the element, not the size of the entire array.) To transfer read 70 elements worth of data from the memory module loaded in the previous MX_USRLOD example, back into the ARRAY, you could use the following: MAP1 ARRAY(75),S,25 xcall MIAMEX, MX_USRIO, STS, MIDX, 0, ARRAY(1), 0, 70*25 You could also copy from the ARRAY to the memory module in the same way, using opcode 1. The only difference between this and the MX_USRLOD operation above is that MX_USRLOD will create the module if it doesn't already exist. 4. --- GUI: Fix problem with controls getting unwanted frames drawn around them. ============================================================================ A-Shell Development Notes Version 4.9.967.3 (27 Sep 2006) ============================================================================ 1. --- GUI: Fix bug introduced in 967.1 where XY=0 was not clearing all controls. ============================================================================ A-Shell Development Notes Version 4.9.967.2 (26 Sep 2006) ============================================================================ 1. --- COMPIL (edit 321) fixes problem introduced in 4.9.966 (VUE edit 280) in which it would abort the compilation when encountering an included file that was being edited, but wouldn't report any error. Prior to 966, VUE didn't place a read lock on the file so it would not have interfered with compilation; now it does. (And as of 967.2, it reports the error correctly and doesn't generate a RUN file.) ============================================================================ A-Shell Development Notes Version 4.9.967.1 (25 Sep 2006) ============================================================================ 1. --- Fix problem with SHIFT key status getting stuck on when in XTREE, causing up arrow to exit rather than scroll. 2. --- GUI: STATIC controls (MBF_STATIC) can now support any image type supported by AUI_IMAGE (currently BMP, JPG, TIF, PCX). Displaying an image inside of a static control (using AUI_CONTROL) rather than independently (using AUI_IMAGE) offers some advantages in that it eliminates some confusion caused by having to treat them differently than other controls. The technique is analogous to a static icon or a button with an image: just specify the combination MBF_STATIC+MBF_BITMAP and put the image filespec in the CTEXT$ parameter. Note the following: - Unlike static icons (MBF_STATIC+MBF_ICON) which do not scale, static bitmaps will be scaled to fit the coordinates of the control. If the MBF_NODISTORT flag is set, the aspect ratio will be preserved (meaning that the image may not fully fill the height or width of the control). Otherwise, it will be stretched to fit. - Requires that you have a license for the imaging library (vic32.dll). 3. --- MSGBOX.SBR (and TAB(-10,17)) support a new message box flag, MB_TOPMOST (32768 or &h8000) which can be specified to force the message box to stay on top of all other windows (eliminating a problem where the messagebox could get hidden, leaving the user with the false impression that the window had locked up.) 4. --- Fix bug in TRACE.PAUSE whereby closing the debug window while it was waiting for a doubleclick response to the pause message was locking up the job. 5. --- AUI_CONTROL change mode (CTLOP_CHG) flag MBST_CHANGEX now permits changing virtually everything about most controls (tooltips, associated images, and in most cases even the control type). 6. --- AUI_CONTROL now supports a new parameter, CTYPE2, which is another 32 bit bitmap of flags intended to serve as an extension of CTYPE. Currently none of the values are used, but but the top 8 bits are reserved for application-defined bits. Setting these will have no affect on A-Shell, but might be useful for storing flags that you can retrieve via the CTLOP_INFO call. (The top 8 bits would be &h80000000 thru &h01000000.) 7. --- AUI_CONTROL query operation (CTLOP_INFO) now returns the complete CSTATE parameter as previously set when the control created. Also, the coordinates returned for child controls are now relative to the child's parent, rather than to the main window. ============================================================================ A-Shell Development Notes Version 4.9.967 (22 Sep 2006) ============================================================================ 1. --- XTREE GUI: It is now possible to use DIMX to allocate the ANSWER array (when required for trees that are editable, or allow multi-select, or allow drag/drop). Previously, you had to specify the MAP1 unformatted variable, i.e.: MAP1 ANSWERX ! ANSWERX passed to XTREE MAP2 ANSARY(100) MAP2 CB1,S,1 ! checkbox MAP2 EDIT1,S,10 ! editable cell The problem with the above construct is that it is impossible to dynamically allocate. Now, you can do the following: MAXCNT = 100 ! must match array size (i.e. # rows) DIMX ANSARY(MAXCNT),S,11 ! element size = sum of editable fields DIMX ARRAY(MAXCNT),S,200 ! array of rows (same MAXCNT as ANSARY) ... XCALL XTREE,SROW,SCOL,ANSARY(1),ARRAY(1),MAXCNT,COLDEF,... Note that in the above case, XTREE has to "trust" you that the actual mapped size of the ANSARY() and ARRAY() arrays is >= MAXCNT. Also note that you will have to parse the ANSARY() elements out into the individual fields that would normally make up ANSARY (i.e. as mapped in the first example above). Finally, for ATE, note that this change requires updating the server side as well (because the XCALL argument checking is done by the server side before passing it to ATE). 2. --- XTREE GUI: It is now possible to use the XTF_NOREDRAW flag along with opcode 4 (reselect) even when you are updating data in the editable cells prior to the reselect. (Previously XTF_NOREDRAW disabled the updating of the editable cells from the ANSARY parameter on reentry.) XTF_NOREDRAW might be useful in this circumstance to eliminate unwanted display adjustments taking place during the reentry process. 3. --- GUI: AUI_WINDOW enhanced to return additional metric information about the screen, including the size in dialog (altpos) units, and taking into account the size of the task bar. This is useful if you want to compute a dialog size relative to the screen size, in advance of creating the dialog. The new information is returned in the following parameters (which take the position of the l,t,r,b,rows and cols parameters for other flag values): flg = -1 ! query cid = -1 ! -1=full screen, -2=full screen minus task bar xcall AUI,AUI_WINDOW,flg,hgridpix,vgridpix,hresalt,vresalt, & hoverhd,voverhd,tsts,bsts,cid,hrespix,vrespix hgridpix,vgridpix (substituting for l,t params) return the dialog (altpos) grid size in pixel units. hresalt,vresalt (substituting for r,b params) return the screen size in dialog (altpos) grid units. hoverhd,voverhd (substituting for rows,cols) return the dialog size overhead (added to the size you request) to account for the title bar, borders, leading, etc. As a general rule, the vertical overhead is equivalent to one logical row (one vertical dialog unit) and the horizontal overhead is negligible. Previously, that call only set the hg and bg parameters to the size of the screen in pixels. (Although we've flogged this topic many times, as a reminder, if the MBF_ALTPOS flag is specified when creating a dialog, the coordinates are taken to be in "dialog (altpos) units". These are based on the size of default system font, which in turn is affected by the combination of the screen resolution, the font DPI, and the system font face (which for A-Shell's purposes can be set from the Settings..Font dialog). These units can be further adjusted by means of the scale factors in the Settings | Dialog Sizing dialog (which default to 100% for the height and 160% for the width). To put this in simpler terms, a single dialog (altpos) unit is roughly what it takes to display a single average character, with a reasonable amount extra for inter-line spacing and to allow for the possibility that your characters are wider (up to 160%) than "average". Unlike that standard A-Shell row/col grid units, dialog units are not affected by the size of the main window, but they do adjust along with the display size of the standard font (which is generally just what you want, and the way most Windows programs are sized). The AUIWIN sample program in [908,28] has been updated to display this information about the screen, and a new sample program, DLGCTR [908,28] has been added to demonstrate using the information to create a centered dialog, with no visible parent, and which occupies nearly all of the screen. 4. --- GUI: The left/top offset of dialogs created without a visible parent has been adjusted slightly, so that you should now be able to create a dialog that starts at the top left corner by making the main window invisible (or using MBF_DLGNOPARENT), and setting SCOL=1, SROW=1 and MBF_ALTPOS +MBF_DLGNOCREEP. ============================================================================ A-Shell Development Notes Version 4.9.966.1 (21 Sep 2006) ============================================================================ 1. --- XTREE GUI: New column definition code "u", which is similar to "U" in that it defines a variation on an editable text cell. While "U" causes the editing logic to skip over the cell in input mode (making it only updatable by the application), lower case "u" allows the cell to be given the edit focus but in read-only mode. (Read only mode looks the same as regular edit mode except that the background of the cell is gray instead of white.) The idea behind this feature is to give the user a sense of being able to edit the cell, but without allowing them to directly edit it. Instead, when the cell has the focus, most keys other than navigation keys will cause the XTREE to exit (with EXITCODE = -48, as for normal cell editing validation), so that the application can then present a more customized cell editing capability. For example, in an appointment scheduler, you might want the user to be able to "edit" a cell in order to make or change an appointment, but you don't want them to just be able to type anything in the cell. Instead, they cause the cell to have the focus (using navigation keys or by clicking with the mouse) and then they can indicate the desire to update the cell by hitting ENTER, or any exit key, or for that matter, any normal character key. The application would then detect this event by the combination of the EXITCODE (-48 for ENTER or printable characters, or the normal exitcode for other exit keys) and determine the cell by the XTR'XROW and XTR'XCOL fields. Then it might pop up a dialog designed for editing an appointment. When that dialog is finished, the application can plug an updated value for the cell into the appropriate slot in the ANSARY parameter and re-enter the XTREE using XTR'OPCODE 4 (reselect). Note that when re-entering, the initial focus will be determined by the XTR'XCOL and XTR'XROW fields (presumably still pointing the cell we were just in) and the XTR'XNAVCOD field, which contains the value of the key used to exit the field. Depending on that value, the initial focus may be advanced to another cell. For example, the standard action for the ENTER key is to advance to the next cell. If you don't want that, then zero out XTR'XNAVCOD before re-entering the XTREE. Also note: XTR'XNAVCOD can be used to determine which key the user entered to cause XTREE to exit. 13=ENTER, while values from asc("1") to asc("z") indicate the corresponding character key. 2. --- XTREE GUI: Context menus (i.e. right-click or popup menus) associated with XTREE are now used even when an editable cell currently has the focus. Previously, if you hit right-clicked while in the process of editing a cell, you would have gotten the standard edit control popup menu (with copy/cut/paste options). 3. --- XTREE GUI: INFLD background color logic (see 963.4 below) now applies to editable cells in XTREE also. 4. --- XTREE GUI: New field in XTRCTL allows toggling of "open ended" option for last display column. Previously, this was always set to TRUE, meaning that the last column was "open ended" (expanding to fit the larger of the space available and the data in the column). When the new field, XTR'CLOSEDENDED, is set to 1, the open ended option is disable, which should cause the final display column to adopt a fixed width (either as defined by the Dspwid=## option in COLDEF, or as it sees fit based on some internal heuristics). The XTREE.MAP has been updated to add the new field to the end, which now looks like this: MAP1 XTRCTL ! extended XTREE parameters MAP2 XTR'OPCODE,B,1 ! 0=normal (create), 1=replace data, ... ... MAP2 XTR'TIMEOUT,B,4 ! [115] timeout (ms) (exitcode=11) MAP2 XTR'LEFTPANECOLS,B,1 ! [116] (XTF_SPLIT) # cols in left pane MAP2 XTR'LEFTPANEWIDTH,B,1 ! [116] (XTF_SPLIT) width of left pane ! 0=optimize, -1=50/50, else col units MAP2 XTR'CLOSEDENDED,B,1 ! [117] 1=last col not open ended MAP2 XTR'UNUSED2,X,25 ! [117] 5. --- MSBOXX: BOXCOD flag BOX'VLI (&h04000) now properly forces a vertical line in case where STROW=ENDROW and STCOL=ENDCOL. (Previously, it was displaying a single horizontal line in this case.) ============================================================================ A-Shell Development Notes Version 4.9.966 (16 Sep 2006) ============================================================================ 1. --- INFLD GUI: When in |K (Windows keyboard convention) mode, INFLD now remembers the INS/REPL state from one field to the next. Also, for a subtle visual clue as to which mode it is in, the vertical bar caret is bold when in REPL mode. Note that program or internally controlled changes to the INS/REPL mode do not affect the remembered state. 2. --- INFLD: New TYPE ||I forces INS mode off (i.e. REPL mode on). (The existing TYPE |I can be used to force INS mode on.) This overrides the remembered state (see above) for the current field, but does not change the remembered state for subsequent fields. 3. --- VUE: Adjust way files are locked during editing to make more compatible across operating systems (e.g. for when a UNIX machine is emulating a Windows files server or vice versa.) 4. --- VUE: A new ini.vue option, LCKFILE= (default=FALSE) can be used to force VUE to create a separate .lck file while is being edited with write privileges. The purpose of this is to allow yet another way for external editors to detect that a file may be in the process of being modified by VUE. 5. --- GUI: Add a "Dump Font Cache" option to the context menu for the debug dialog, to help in debugging/analyzing font usage. (The text string "Dump Font Cache" may be over-ridden by defining message string 005,008 in the SYSMSG.USA file.) The fields displayed in the dump are as follows: face: font face name ht (height): height of the font in device units. Negative values refer to the character height of the font; positive values refer to the cell height (which includes leading). A-Shell almost always uses the character height (i.e. negative values). wd (width): width of the font in device units. This normally applies only to fixed width fonts where the FA_GRIDWIDTH flag was specified in the fontattr parameter for the control. wt (weight): weight of the font (also from the fontattr parameter). it (italic): 0=normal, 1=italic pf (pitch and family): 0=default (typical, since face name determines it.) ul (underline): 0=no, 1=underlined cs (charset): 0=default (typical, since face name generally determines it.) hf (handle to the font): this will be some large hex number nref (number of references): the number of controls currently sharing this font. 6. --- GUI: Refine reporting of errors during control creation. Previously, it would only report the first 3 (the theory being that after that, you probably realize you have something terribly messed up and would appreciate not having to dismiss endless message boxes in order to get out of the program). Now, since we have the debug dialog mechanism, it just forces the debug dialog window open and reports each error. 7. --- Fix an INMEMO bug where it was not displaying the title in certain OPCODE combinations involving MMO_SVA. 8. --- INFLD: Fix bug in SETDEF scanning for match on initial preload in which it would accept certain partial matches even when a full match was farther down the list. 9. --- Refine startup command line parsing logic for distinguishing when a "\n" is part of a literal filename and when it should be considered a line break. Previously a \n immediately following a filename would be treated as part of the filename unless there was an intervening space. Now an \n after the first dot in the filename will be considered as a line terminator. 10. --- GUI: fix problem in which date picker drop-down would sometimes pop itself back up (introduced when self-serve date dropdown introduced in 965.4). 11. --- GUI: When a dialog is deleted, any associated menus are now automatically deleted. Previously, this was causing menu resources to be used up, with the eventual effect of running out of them. 12. --- GUI: When the drop-down button of an inactive INFLD control is clicked, the subsequent activation of the field (assuming it takes place within 500 ms.) will automatically trigger the auto-dropdown operation, which should eliminate the annoyance of having to click two times on such a control to get it to drop down (once to get the application to activate the control and once again to initiate the drop-down display). ============================================================================ A-Shell Development Notes Version 4.9.965.6 (12 Sep 2006) ============================================================================ 1. --- Reinstate lost timeout support in XTREE, XTEXT 2. --- SORTIT.SBR now preserves the order of items with equal keys. Also, make same correction to direct memory sorting (of files in MEM:) in BASORT. (All other BASORT modes have been preserving order of recs with equal keys since 4.7) 3. --- Fix INFLD mode 28 (reformat with no display or input); was broken since 4.9.905. 4. --- Reinstate tooltips (broken in 964.1) ============================================================================ A-Shell Development Notes Version 4.9.965.4 (31 Aug 2006) ============================================================================ 1. --- AUI_EVENTWAIT now returns exitcodes for: HOME (-45) END (-46) DEL (-47) (These match the handling of these keys in XTREE.) 2. --- AUI_WINDOW supports 3 new params. The new complete syntax is: xcall AUI,AUI_WINDOW,flg{,l,t,r,b {,rows,cols {,tsts,bsts {cid,hg,vg}}}} Where the new parameters (cid,hg,vg) are applicable only when flg = -1 (i.e. for query mode): cid (numeric, control ID): If 0, information is returned about the main window (as before). If -1, the screen resolution (in pixel units) is returned in the hg and vg parameters. (The other return values are not applicable when cid = -1.) If >0, then returned information will be based on the specified control number rather than the main window. You can use this mode (cid > 0) to get information about the size and position of a specific control. Although the AUI_CONTROL opcode CTLOP_INFO also does this, AUI_WINDOW returns more detailed information relating to the current absolute position and size of the control relative to the desktop, whereas CTLOP_INFO only returns the logical coordinates as there were specified when the control was created. The difference is particularly signficant for dialogs, which can be moved around, and for certain complex controls, like the calendar or animation controls, which may ignore or override the size information used to create them. AUI_WINDOW also returns information about the grid units. hg, vg (numeric, horizontal and vertical grid units): When cid = -1, these return the screen resolution in pixels. Otherwise, they return the grid size, in universal units (0-10000) of the specified window or control. You can compare these grid values to the values returned in the l,t,r,b (left, top, right, bottom) coordinates to determine sizes and positions in terms of row/col units. Note that when cid=0 (main window), the rows and cols parameters return the defined number of rows and columns in the main window. But when cid > 0, they return the size of the target control in millirows and columns. The AUIWIN sample program (in 908,28) has been upgraded to illustrate the new parameters, although to test out the cid > 0 option, you'll first need to run some other program which creates controls and leaves them on the screen. Then run AUIWIN, and consult the control dump to get the control id numbers you want to query. 3. --- (GUI) INFLD now supports a "self-service date picker". The concept is similar to the self-service combo (where you put "..." in the SETDEF parameter and it returns EXITCODE 29 when you attempt to display the drop-down), except here you activate it by adding TYPE ||v to the date type codes. Presumably this might be useful in cases where you like the look of the edit portion of the date picker, but want to display a more specialized calendar when the user clicks the drop-down button. 4. --- Fix a memory corruption problem when you attempted to copy text from the debug window to the clipboard more than one time. 5. --- (GUI) XCALL AUI_CONTROL, CTLOP_INFO was failing to return several parameters. 6. --- (GUI) XCALL AUI_CONTROL, CTLOP_CHG supports two additional new flags: MBST_CHANGEX (&h00040000) MBST_SELECT (&h00080000) MBST_CHANGEX is related to MBST_CHANGE, MBST_POS and MBST_STYLE and affects those attributes (like font, color, etc.) that were not covered by the other bits. (Changing tooltip is not yet implemented, but will be part of this.) MBST_SELECT "selects" the control if the control has the design mode flag set. (Just ignore this comment as "design mode" is a long way from being usable.) Note that to unselect a control, use CTLOP_CHG with MBST_CHANGE and don't specify the MBST_SELECT flag. ============================================================================ A-Shell Development Notes Version 4.9.965.3 (30 Aug 2006) ============================================================================ 1. --- (Bug Fix) A recent fix to RENAME.SBR caused it to substitute an extension of ZZZ in the target filename if no extension was specified. 2. --- (Bug Fix) XTREE was resizing the first column to fill the entire width of the tree when using opcode 1 and XTF_NOREDRAW. ============================================================================ A-Shell Development Notes Version 4.9.965.2 (29 Aug 2006) ============================================================================ 1. --- (GUI) Preliminary support for adding menus to dialogs. This is accomplished by using the AUI_MENU function and adding the dialog id to the end of either form of the xcall list: xcall AUI, AUI_MENU, OPCODE, MENUID, TXT, STATE, TYPE, CMD, & FUNC, STATUS {,DLGID} or xcall AUI, AUI_MENU, OPCODE, MDFSPEC, STATE, STATUS {,DLGID} Notes: - The menu takes up the space that would have been occupied by the first logical row of the dialog. (So if planning to add a dialog menu, don't try to use row 1 for other display purposes.) - Currently it is not possible to delete the menu, once added. (In general, you would probably just delete the dialog.) - The dialog display does not get automatically refreshed to show the newly added menu. To force this to happen after you have added all of your menu items, use AUI_MENU with opcode 6: XCALL AUI, AUI_MENU, 6, 0, "", 0, 0, "", "", STATUS, DLGID This will increase the height of the dialog to allow for the spaced used by the newly added menu, and will force the menu to be displayed. ============================================================================ A-Shell Development Notes Version 4.9.965.1 (29 Aug 2006) ============================================================================ 1. --- (GUI) Fix problem introduced in 965 interfering with ability to drag dialogs around. 2. --- Fix a problem with RENAME.SBR introduced in 958.2 to support renaming of files with no extension. Turns out some people were quite fond of the quaint notion of using a name like "DUMB" to refer to a file actually named "DUMB.DAT". So the new rule is: if the input filespec contains no period, then the default extension of DAT applies (as in days of old). If you want no extension, then specify a filespec with a trailing period. 3. --- (GUI) Fix problem introduced in 965 in which controls explicitly specifying the Window class "STATIC" were not displaying in dialogs. ============================================================================ A-Shell Development Notes Version 4.9.965 (29 Aug 2006) ============================================================================ 1. --- (GUI) XTREE now supports a split (or dual-pane) mode, allowing two sets of columns to be scrolled horizontally independently. This is typically useful when you have a lot of columns (so horizontal scrolling is needed) but you want one, or perhaps a few columns to always be visible. By putting those columns in the left pane, they will be immune to the horizontal scrolling taking place in the right pane. To activate, a new FLAGS bit has been defined: XTF_SPLIT (&h20000000). Also, two new fields in the XTRCTL structure, the end of which now looks like this: ... MAP2 XTR'USECOLORDER,B,1 ! [114] use COLORDER() to reorder? MAP2 XTR'COLORDER(31),B,1 ! [114] a(x) = real col # for disp col x MAP2 XTR'TIMEOUT,B,4 ! [115] timeout (ms) (exitcode=11) MAP2 XTR'LEFTPANECOLS,B,1 ! [116] (XTF_SPLIT) # cols in left pane MAP2 XTR'LEFTPANEWIDTH,B,1 ! [116] (XTF_SPLIT) width of left pane ! 0=optimize, -1=50/50, else col units MAP2 XTR'UNUSED2,X,26 ! [116] XTR'LEFTPANECOLS specifies the number of columns to be in the left pane. Note that this counts physical columns that have a non-zero data width, whether or not the column is hidden, and it is based on the order in which they are defined in the COLDEF parameter (not necessarily the order they appear in the physical input data.) So columns which use cpos and cwidth of 0 do not count, but all other columns do (including the special column needed for multi-level support, hidden color columns, etc.) XTR'LEFTPANEWIDTH may optionally specify a display with for the left pane, using the same column units used by the Dspwid parameter (for defining column widths). If zero, then XTREE will try to determine the optimum width by adding up the optimum display widths of the initially visible rows. You can also set it to -1 (or 255) to put the splitter bar separating the panes exactly in the middle of the XTREE. If you specify a size that is too wide the left pane will initially occupy the entire XTREE, but the user will still be able to move the splitter bar from the right edge to make the right pane visible. Notes: In most other respects, the dual pane mode should act just like the regular, single-pane mode. Both panes remain vertically synchronized at all times. However, in editable mode, there is currently an assumption that you would probably confine the editable cells to the right pane, and thus the editable cell navigation operates on this principle, although you could still select an editable cell in the left pane with the mouse. Two sample programs are available: XTRA2S is a variation of XTRA2, with the zip column in the left pane by itself. XTRA5 has been upgraded to offer an option of how many columns, if any, to put in the left pane. (If none, it works as before in single-pane mode.) 2. --- (ATE) The initial time delay before the demo mode warning appears has been increased from 30 seconds to 90 seconds, to give people with very slow connections or typing skills more time to get logged in (and acquire the server license) without being nagged. ============================================================================ A-Shell Development Notes Version 4.9.964 (24 Aug 2006) ============================================================================ 1. --- (GUI) Implement a month calendar control. It is essentially the same as the calendar that appears in a date picker when you press the dropdown button, but is not associated with an input field, thus making it suitable to just place on a form as a convenience to the user. If desired, you can have it generate keyclick strings when you change the date, and you query the selected date so that your application could respond appropriately. To create a calendar control: XCALL AUI, AUI_CONTROL, CTLOP_ADD, ID, CTEXT$, MBST_ENABLE, CTYPE, & CMD$, "", CSTATUS, SROW, SCOL, EROW, ECOL, FGC, BGC, & FONTATTR, FONTSCALE, FONTFACE$, TOOLTIP$, PARENTID, & "ASHMONTHCAL", WINSTYLE, WINSTYLEX Parameter notes: The CTEXT$ parameter is generally ignored when creating a calendar, unless you specify a WINSTYLE that creates a title bar (see below). CTEXT$ is however used with the CTLOP_CHG opcode to set the date or day states. CTYPE may be set to 0, unless you want to enable a click string, in which case specify the MBF_KBD flag. CMD$ may specify a standard keyclick string (if MBF_KBD specified). If so, then clicking on a date will send the click string. Unless the MCS_DAYSTATES option is specified in WINSTYLE, advancing to another month does not trigger the click string. SROW,SCOL,EROW,ECOL; Because the control size is fixed by the system (based on system display parameters), it doesn't make much sense to specify an arbitary rectangle (although you can, with unpredictable results). Typically, you want the control to be stuck in one of the four corners of the window or dialog (or at least up against an edge). To accomplish this, A-Shell will apply certain logical rules to the coordinates given. The first rule is that if you ask for a size that is less than the minimum width and height needed to display one month, it will be automatically expanded as needed. To take full advantage of this, just set the EROW,ECOL parameters to match the SROW,SCOL. For example, to put it in the upper left, set the coordinates to 1,1,1,1. The second rule is that if the starting position specified is beyond the width or height of the window, it will be moved to fit. So to position the control in the bottom corner, specify numbers that you know are larger than the size of the window, like 100,100,100,100. (Note that if you specify a row > 200, millirows are assumed, which means you would need to specify a much larger value.) To with these rules, you can position the control in each of the 4 corners as follows: Top left: 1,1,1,1 Top right: 1,100,1,100 Bottom left: 100,1,100,1 Bottom right:100,100,100,100 Even with this simplification, you still need to deal with the fact that the actual size may be smaller or larger than you are expecting in terms of the row/col coordinates used for other controls. (This problem is minimized if you use MBF_ALTPOS since at least then the units are based on the font size and resolution. But if your dialog grid is based on the main window, then the size of the main window will determine how many rows and columns are actually occupied by the calendar.) If you specify a rectangle that fits in the window and is large enough to show more than one month, the control will display as many months as it can. (This is not recommended though, as no consideration has yet been given to the special issues that may arise. In particular, the day states option only works for single-month-at-a-time calendars.) FGC,BGC,FONTATTR,FONTSCALE,FONTFACE$ are ignored. TOOLTIP$ and PARENTID work as usual. The WINCLASS parameter must be specified as "ASHMONTHCAL". (This replaces the fact that we didn't specify a control type in CTYPE.) WINSTYLE may be used to specify additional style options relating to the window wrapper for the control, as well as options specific to the calendar: MCS_DAYSTATES (&h0001) Enable day state highlighting (see below) MCS_WEEKNUMBERS (&h0004) Show week numbers in calendar MCS_NOTODAYCIRCLE (&h0008) Don't circle today's date MCS_NOTODAY (&h0010) Don't show todays date at bottom of calendar WS_BORDER (&h00800000) Put a thin border around it WS_DLGFRAME (&h00400000) Put a dialog-style border around it WS_CAPTION (&h00C00000) Add a title bar (allows dragging) WS_SYSMENU (&h00080000) Add an X button (to close calendar) WINSTYLEX may optionally have additional extended window styles: WS_EX_TOPMOST (&00000008) Force on top (of its siblings) To retrieve the selected date (either in response to receiving the click string or exitcode, or whenever you like), use CTLOP_QRYCB (5) opcode to query the control. (This opcode was previously only used for querying a checkbox, but takes on a slightly different meaning here): xcall AUI, AUI_CONTROL, CTLOP_QRYCB, ID, CTEXT$, CSTATE, CTYPE, & CMD$, "", CSTATUS Set ID to the ID of the control (as returned from the CTLOP_ADD) operation. The currently selected date will be returned in CSTATUS as a number with the following format: CCYYMMDD. (You can convert it to a string and parse it out into subfields as you like.) The CTEXT$, CSTATE, CTYPE, and CMD$ parameters are ignored. To set the date in the calendar, use the CTLOP_CHG opcode and put the date (in CCYYMMDD format) into the CTEXT$ parameter, as if you were changing the text of a control. Set the CSTATE parameter to MBST_TEXTONLY: CTEXT$ = "20060924" ! 24-Sep-2006 xcall AUI, AUI_CONTROL, CTLOP_CHG, ID, CTEXT$, MBST_TEXTONLY, CTYPE, & CMD$, "", CSTATUS Limiting the calendar to a range of dates: Use the CTLOP_CHG operation as for setting the date, except format the CTEXT$ parameter as a 17 byte string of two dates in CCYYMMDD format with a dash in between: CTEXT$ = "20050120-20070630" ! range of 15-Jan-05 thru 30-Jun-07 xcall AUI, AUI_CONTROL, CTLOP_CHG, ID, CTEXT$, MBST_TEXTONLY, CTYPE, & CMD$, "", CSTATUS Setting Day States: as an added feature, you can force selected dates to be shown in bold. To do so, specify the MCS_DAYSTATES flag when creating the control. You must then send a string of 0's and 1's to the control to update the day states for the current month when the control is first displayed and whenever the month changes (which will require you responding to the click code). Set the CTEXT$ parameter to a string 31 digits long, representing the days 1-31 of the current month. (Set any extra days to 0). 0 indicats the normal date, and 1 the bold state. Then use the same CTLOP_CHG format as shown above for setting the date. The control will determine which you are setting by the fact that the CTEXT$ string is exactly 31 bytes long: CTEXT$ = "1000000000000010000000000000000" ! bold 1st & 15th xcall AUI, AUI_CONTROL, CTLOP_CHG, ID, CTEXT$, MBST_TEXTONLY, CTYPE, & CMD$, "", CSTATUS Note that this mechanism currently is only supported for one month at a time (so see the discussion above about specifying the coordinates to make sure that the control is not big enough to show multiple months). SAMPLE PROGRAM: See the new sample program MONCAL.BP in the SOSLIB for a simple working example. 2. --- (GUI) New XCALL to display the color selection dialog and return the selected RGB value: XCALL MIAMEX,MX_CHOOSECOLOR,RGB,STATUS Where RGB (B,4 or F,6) [in/out] is the RGB color value. On input, it determines the default color selected in the dialog; on output it returns the newly selected color. STATUS (F) is 0 for OK, or else indicates an error. (Trying to execute this function in a non-GUI environment should return -1). 3. --- (GUI) New XCALL to display the font selection dialog and return the selected font name: XCALL MIAMEX,MX_CHOOSEFONT,FONT$,STATUS Where FONT$ (S,32+) [in/out] is the font face name. On input, it determines the default font selected in the dialog; on output it returns the newly selected font. ============================================================================ A-Shell Development Notes Version 4.9.963.9 (22 Aug 2006) ============================================================================ 1. --- (GUI) AUI_CONTROL opcode 2 (change) now supports an additional cstate flag MBST_POS (&h10000, i.e. 65536 decimal) which causes the position and size of the specified control to be updated. 2. --- (XTREE) The XTRCTL XROW field is now updated (and returned) in virtually all cases. Previously, it was only updated if the tree was editable or contained a popup menu. ============================================================================ A-Shell Development Notes Version 4.9.963.8 (19 Aug 2006) ============================================================================ 1. --- (XTREE) Further fix to XTREE problem of columns with no explicitly defined width getting no width at all. 2. --- (XTREE) New column type U may be added to an editable text column (E) to cause the column to only be updatable by the application. In other words, editable but not-editable. The only point of this would be for columns where you wanted to automatically calculate and update some information each time you re-entered the tree, without having to go back to opcode 0 to load all of the data. (When re-entering trees with editable cells using opcode 4, only the cells corresponding to the fields in the ANSWER array are updated.) ============================================================================ A-Shell Development Notes Version 4.9.963.7 (16 Aug 2006) ============================================================================ 1. --- (IMAGE) Fix a problem in which images in dialogs would not always get displays on top of other items in the dialog. ============================================================================ A-Shell Development Notes Version 4.9.963.6 (16 Aug 2006) ============================================================================ 1. --- (Linux) Improve way that XCALL XTCKI (and similar functions such as GETKEY(-2) and XCALL GET when only checking to see if a character exists) works so that a null byte waiting to be input will be treated as any other. This already worked under Windows, but still does not work properly under AIX. 2. --- (XTREE) Fix a rather serious problem in which columns would disappear when using opcode 4 (reselect) without using the XTF_REDRAW flag. ============================================================================ A-Shell Development Notes Version 4.9.963.5 (14 Aug 2006) ============================================================================ 1. --- %env% variable expansion under UNIX is now case insensitive, as it has always been under Windows. This should clear up some confusion situations, including one where %miame% got evaluated as equivalent to the miame.ini filespec rather than the miame directory (whiel %MIAME% worked as expected). 2. --- XCALL MIAMEX,MX_SETMEMFLAGS (163) may now be used to change the flags for a memory module: XCALL MIAMEX, MX_SETMEMFLAGS, IDX, FLAGS where: IDX [in, numeric] should be set to 0 to reference the memory module for the currently running program or subroutine, or else it can specify the module previous located in a call to MIAMEX,MX_USRMAP (107) FLAGS [in, numeric] are the new flags (overriding the previous ones). If you just want to turn on or off a particular flag but leave existing flags alone, you should first retrieve the existing flags using the MX_USRMAP call. Note that if you want to use this call within an SBX to cause the SBX to be deleted from memory on exit (instead of being retained as part of the normal cacheing scheme), then set FLAGS = USRMEM_INUSE (1). (If you don't have that flag set, the module could be deleted by a subsequent memory operation even while the program is running, which would be bad.) 3. --- (ATE) FTP transfers now prompt for login information if the transfer fails because of a bad login. This used to work for transfers explicitly initiated by TAB(-10,22) or the ZTERM ESC sequence, but was broken when the ATSYNC feature was introduced. Now it works in all cases, including XTEXT file transfers. 4. --- (Windows GUI) Fix a problem in the debug/trace window in which output strings containing "%" would end up displaying garbage. (This was just a display problem, but confused efforts at debugging.) 5. --- (Windows GUI) Fix an issue with use of MX_AUTOPARENT so that it can be used to give a modeless dialog the same automatic parent feature that a modal dialog would get. Background: normal modal dialogs effectively become the automatic parent of any subsequent controls that do not specify a parent, but this is not true for modeless dialogs (which might be used for auxiliary purposes like a status window which would not be sensible to make the automatic parent.) However, if you are creating a dialog with MBF_MODELESS+MBF_SYSMENU so that the dialog can be minimized, but are otherwise treating it as if it were modeless, then use the MIAMEX,MX_AUTOPARENT call after creating the dialog so that subsequent controls become part of that dialog by default. Note that this is essential if the dialog contains images created with AUI_IMAGE, since that call does not have an option to set the parent ID. (The image would automatically be assigned to the current modal dialog, but if the current dialog is modeless, it would be be assigned to the a previous modal dialog or the main window.) 6. --- (Windows GUI) CTRL+SHIFT+DBLMIDDLECLICK can be used as an alternative to CTRL+SHIFT+DBLRIGHTCLICK to bring up the GUI debug options dialog. This is handy when there is a context menu defined, since that triggers on the first right-click, interfering with the ability to enter a double-right-clk. 7. --- (Windows) Fix a problem in which certain startup error message dialogs would be empty. 8. --- (ATE) Fix a problem with failing to look for icons and bitmaps in the local ATECACHE and ATEPERMCACHE directories. ============================================================================ A-Shell Development Notes Version 4.9.963.4 (11 Aug 2006) ============================================================================ 1. --- (GUI) Support a new option on the Misc. Settings dialog to define a special background color to be applied to INFLD edit controls when they are active. The theory is that by defining a light color that is nonetheless distinguishable from the standard white, it will be easier for users to detect which edit field is active. Note that the effect only works for INFLD controls that are based on the standard Windows edit control (i.e. includes comboboxes and up-down controls, but not checkboxes, radiobuttons, or date/time controls.) ============================================================================ A-Shell Development Notes Version 4.9.963.3 (10 Aug 2006) ============================================================================ 1. --- Support %env% variables in specifiers passed to MIAMEX,MX_SHELLEX, help filespecs with MDF files. 2. --- Wallpaper and AVI files will now be located in the %ATECACHE% or %ATEPERMCACHE% directory if not in the specified directory. 3. --- Clean up memory corruption loophole in processing of partial input (:P) in DO files. 4. --- Support MIAMEX,MX_GETREG under ATE. ============================================================================ A-Shell Development Notes Version 4.9.963.1 (08 Aug 2006) ============================================================================ 1. --- XTEXT.SBR now supports an option to make the Save icon on the toolbar act like "Save As" (i.e. display a dialog to allow you to choose a filename and location) rather than just "Save". To active this option, in the txc'fmapctl field, clear bit 3 (corresponding to the Save command, which is equivalent to F3) and set bit 19 (corresponding to the Save-As command, or Shift-F3). For example, if you previously had txc'fmapctl = &h000000FF (i.e. send all the functions corresponding to F1-F8 to the control), you would change this to &h000400EF to force the Save button to act like Save-As. Note that this would not affect the keyboard commands F3 and Shift-F3, which would continue to distinguish between Save and Save-As. 2. --- New xcall to check if an input character is available without inputting it: XCALL TCKI,FLAG Where FLAG is a numeric type, which returns 0 if no character is available, else 1 if 1 or more characters are available. ============================================================================ A-Shell Development Notes Version 4.9.963 (05 Aug 2006) ============================================================================ 1. --- (Windows/ATE) Implement a new message window mechanism to make it easier to output debugging/tracing/status information without interfering with the GUI screen context. The scheme has three parts: a) Message Window: The message window consists of a popup-dialog, initially positioned in the upper right corner of the screen, and filled with a multiline text control, scrollable in both directions. The user can move, resize, minimize or close the dialog using the typical mouse operations, without affecting the application. A right-click context menu is also supported, with the following options: - Select All - Clear Selections - Copy - Clear Messages - Properties The first two options select or unselect all of the messages, which is currently only of relevance to the third option, which copies the selected messages to the clipboard (from which they can be pasted into an email message or notepad.) The fourth option (clear messages) deletes all of the messages from display (freeing up memory, clutter, etc.) You can also close and re-open the dialog to get the same effect. The last option (Properties) pops up another dialog containing checkboxes corresponding to the various TRACE options in the miame.ini (or the SET.LIT TRACE options). At the top of the dialog is a master checkbox which controls whether any of the system trace messages appear in the on-screen debug dialog. When the dialog is launched manually, by default the system trace option is set, in which case the display can be considered just a slightly more convenient version of the information also being sent to the ashlog.log file. When the message window is opened under program control, the system trace option defaults to off, since the liklihood there is that the program is going to control the information sent to the message window. If the system trace option is set, the remaining checkboxes allow you to turn trace options on and off for immediate effect, rather than having to set them globally in the MIAME.INI or from the dot prompt (thus making it easier to turn on a lot of traces for a very short period in order to investigate something within a complex program). Another advantage of the trace window vs. the ashlog.log is that it only contains messages for the current instance of A-Shell. b) Manually opening the message window: Use CTRL+SHIFT+DOUBLE-RIGHT-CLICK, then click the "Show Message Window" button. c) Opening the message window under program control: Two new sets of Basic statements have been implemented in the compiler (requiring /RC or /X:2): DEBUG.OPEN DEBUG.PRINT <msg> DEBUG.PAUSE <msg> DEBUG.CLOSE TRACE.OPEN <title> TRACE.PRINT <msg> TRACE.PAUSE <msg> TRACE.CLOSE d) Notes on the TRACE.xxxx and DEBUG.xxxx statements: The DEBUG and TRACE statements are equivalent, except that the DEBUG statements have no effect unless the system DEBUG flag is set (via SET DEBUG). The xxxx.OPEN statements are also optional, and mainly serve to allow you to set the title on the message window. The xxxxx.PRINT statements will automatically open the message window if necessary. The <msg> and <title> arguments are typical string expressions, except that the <msg> expression may start with zero or more of the following special control variables: $# (displays the running message count as a message id #) $T (displays the time in HH:MM:SS format) $P (displays the program name in brackets, e.g. <MYPROG>) e.g.: DEBUG.PRINT "$T $P The value of X is: " + X This would appear something like: 11:25:01 <MYPROG> The value of X is: 25 Note that the first token of the message (space delimited) that does not start with $ cancels scanning for $T and $P and $#. The xxxx.PAUSE statements are equivalent to the xxxxx.PRINT statements except that they output an additional message to the message window: <Application paused - Doubleclick here to resume> As suggested by the message, the application is then suspended while waiting for the user to double-click the message window. This is intended as alternative to the usual practice of display message boxes which require a click on the OK button to proceed. Note: CTRL+C will abort the pause and pass the CTRL+C to the program. The actual wording of that message and the acknowledgement message when the doubleclick is received may be customized via the strings 005,002 and 005,003 in SYS:SYSMSG.xxx. When the DEBUG.xxxx or TRACE.xxxx statements are executed on a server whose client is ATE, the message is forwarded to the ATE client to display. If the client is not ATE, the message is output to the standard ashlog.log. e) EVTWIN.SBR: For maximum flexibility, the DEBUG.xxx and TRACE.xxx statements are actually compiled as: XCALL EVTWIN,OP,STRING{,optional args} where OP is made up of the following parts: &hxx01 = Open &hxx02 = Print (or Pause) &hxx04 = Close &h01xx = Debug (vs. trace) &hx2xx = Pause (wait for doubleclick) EVTWIN.SBR is included in A-Shell, but if you don't like the way it works, you could theoretically replace it by using an ALIAS and supplying your own SBX. Also, under AMOS, or versions of A-Shell prior to 4.9.963, if you want to be able to run programs containing such statements and compiled with /RC, you would need to supply a dummy EVTWIN.SBR (so that the statements had no effect), or if you are really ambitious, create one that does something useful. (Note that the simplest null SBX would be a program containing just an END statement, with the RUN renamed to SBX.) 2. --- VUE function to insert edit number (^S,E) no longer interferes with the current search context. 3. --- New subroutine to check a string to see if contains a valid numeric contents: XCALL NUMCHK,STRING{,LEN{,RC}} Where : STRING is string to check. STRING is stripped of leading and trailing spaces and tabs and returned that way, regardless of whether valid. LEN is optional length. If specified, stripped string length must match. RC is an optional return value: 0 = ok -1 = string contains invalid characters or is wrong length Note that NUMCHK may be passed to the XFUNC() function, in which case RC isn't really relevant since the function itself returns the same value. 4. --- New subroutine to check a string to see if contains a unprintable chars: XCALL RXPCHK,STRING{,RC} Where : STRING is string to check. spaces and tabs and returned that way, regardless of whether valid. RC is an optional return value: 0 = ok >0 = position of first unprintable character in string. Unprintable characters are defined as those whose ascii value < 32 or is between 127 and 160 inclusive. Note that RXPCHK may be passed to the XFUNC() function, in which case RC isn't really relevant since the function itself returns the same value. 5. --- XCALL GET may now be used to check if a character is available without waiting and without actually inputting the character, by setting BYTES'REQUESTED=0 and TIMER=0. (Previously, this would have waited indefinitely until a character was available.) This is equivalent to GETKEY(-2). ============================================================================ A-Shell Development Notes Version 4.9.962.2 (04 Aug 2006) ============================================================================ 1. --- Fix a serious bug in the compilation of SWITCH statements, which caused the Nth compiled SWITCH in a program to match on the first CASE if the (N-1)th compiled SWITCH had not yet executed. ANY PROGRAM CONTAINING SWITCH STATEMENTS SHOULD BE RECOMPILED!!!! (Thanks to Herman for spotting this one, and apologies to anyone who got stung by it.) ============================================================================ A-Shell Development Notes Version 4.9.962.1 (01 Aug 2006) ============================================================================ 1. --- GETKEY(-2) now works (i.e. doesn't remove the character from the buffer). 2. --- Close a loophole in TCPX.SBR where passing it a bogus socket value might have led to a seg fault. ============================================================================ A-Shell Development Notes Version 4.9.962 (26 July 2006) ============================================================================ 1. --- XTREE now supports a timeout option, specified by a new field in the XTRCTL parameter, the end of which now looks like: ... MAP2 NEXTROW,B,4 ! (preexisting) MAP2 DELCTLID,B,4 ! (preexisting) MAP2 USECOLORDER,B,1 ! (preexisting MAP2 COLORDER(31),B,1 ! (preexisting) MAP2 TIMEOUT,B,4 ! (new) timeout (ms) MAP2 UNUSED,X,28 ! (updated) for expansion The XTREE.MAP file has been updated accordingly. The timer is reset after each keystroke and after each mouse event. (So you can avoid the timeout by just wiggling the mouse.) If the timer expires, XTREE will return EXITCODE=11 (like INFLD timeout). 2. --- XTEXT also supports a timeout option, similar to XTREE, via the addition of a timeout field to the TXTCTL parameter, which now ends like this: ... MAP2 TXC'BPROTCLR ,B,4 ! [preexisting] MAP2 TXC'PROTROWS ,B,4 ! [preexisting] MAP2 TXC'TIMEOUT ,B,4 ! [new] timeout (ms) MAP2 TXC'UNUSED ,X,66 ! [update] (256 total) As with XTREE, the timer gets reset on keystrokes and on mouse activity within the control. If the timer expires, XTEXT will return EXITCODE=11 (like INFLD and XTREE) and any editing changes will be saved. The XTX1 sample program has been updated to add TXC'TIMEOUT to the fields on the screen. 3. --- XTREE: remove an old limitation (left over from the text version) causing the ending column to be truncated at the maximum column number of the main window grid, even if the XTREE was being displayed in a dialog. 4. --- Fix bug causing spurious file-not-found errors when loading images and and other graphic files. ============================================================================ A-Shell Development Notes Version 4.9.961.3 (26 July 2006) ============================================================================ 1. --- (ATE) Fine tuning of ATE typeahead handling. 2. --- (UNIX) Low level input routine was not handling receipt of 0xFF character properly (generally only a problem in the case of raw data input). 3. --- (Windows) Switch to latest VS2005 Microsoft development environment. (Theoretically should not affect executable, but probably there are many subtle effects, hopefully good ones.) ============================================================================ A-Shell Development Notes Version 4.9.961.1 (21 July 2006) ============================================================================ 1. --- XTREE enhancement: column sorting now percolates down through all the levels of a multi-level tree. Previously, only the top level items were sorted. Note that in either cases, child rows remain with their parents. 2. --- INFLD checkboxes: The ||m code (see 958.1 below) now works for fast checkboxes as well as fast comboboxes, causing them to return EXITCODE 13 rather than 0 when they are exited by clicking. ============================================================================ A-Shell Development Notes Version 4.9.961 (18 July 2006) ============================================================================ 1. --- XTREE enhancements: - New column cformat code "n" causes empty cells to always sort to the bottom (regardless of whether sorting up or down). May be used with any column type. - New column cformat code "^" causes sort to be case insensitive. Note that whether case sensitive or not, the collating sequence is based on the Windows locale (not the LDF). 2. --- Dialogs created with xcall AUI,AUI_CONTROL may now specify a parent ID of -1 to signify that the dialog is a child of the main window. The default (0) makes the new dialog a child of the current dialog (if any). 3. --- Windows: Add a "Settings" to the text of the File.. menu options (Load, Save, Save As, Defaults). 4. --- A-Shell/Windows command line: the -o <settings file> specification may now contain embedded %env% variables. For example, when sharing a single %MIAME% directory between multiple users that may want to have independent settings without having to change the settings file name, you could use a standard -o parameter of something like: -o "%USERPROFILE%\Application Data\A-Shell\myapp.ash" In such a case, on launch, if the specified file is not found, A-Shell will also look for it in the %MIAME% directory, and if that isn't found either, it will look for %MIAME%\default.ash. Regardless of which (if any) is found, when the user uses the Settings..Save option to save the settings, they will be written to the location specified by the -o switch. (The effect of this is that users may start out sharing their window settings, but as they customize them, they start using their own private settings.) 5. --- Dialogs with the CMF_SYSMENU and CMF_MODELESS flags will now also contain a minimize button. 6. --- Dialogs with the CMF_SYSMENU flag now offer additional choices for how it responds to the user clicking on the "X" to close it. By default, that sends an ESC and leaves it to the application to close the dialog (using AUI_CONTROL opcode 3). The new options require setting the CMF_KBD flag (which previously had no effect on dialogs). If you set that flag and put something in the command parameter, then that string will be sent instead of the standard ESC. If you set the CMF_KBD flag but leave the command parameter empty, then dialog will close itself without sending anything to the application. (This might actually be very convenient for status/info/debug dialogs that are just outputting auxiliary messages, perhaps via SCRSTS.SBX; in which case further output would just be thrown away.) SCRSTS.SBX 1.0(105) now supports this capability; see the updated TSTSCR sample program (edit 104+) in [907,20] to experiment with it.) 7. --- Minor timing adjustment in the click-handler to try to eliminate a scenario where a double-click on an XTREE may have a side effect as if a click was issued for a control that is popped or or revealed immediately after the exit from XTREE. ============================================================================ A-Shell Development Notes Version 4.9.960.1 (11 July 2006) ============================================================================ 1. --- (Windows/ATE) You can now explicitly set the parent id of a dialog to -1 (or to a number larger than the maximum control ID, e.g. 65535) to force it to use the main window as its parent, rather than another currently opened dialog. 2. --- (Windows/ATE) Add a Save option to the Settings menu and add a confirmation message box indicating the location where the settings were saved. (The idea here is that it would be a more natural place to find the save option on the Settings menu where you access the settings that would be saved.) 3. --- (Windows/ATE) The -o <settings file> command line parameter may now include embedded environment (%env%) variables. For example: ashw32.exe -o %USERPROFILE%\Application Data\ATE\xyz.ash ... 4. --- (ATE) Now supports an explicit -o switch on its command line (if you want to override the default. 5. --- (ATE) If the connection configuration option to limit the configuration to the current user is selected, then it passes the following -o switch to ASHW32: -o %USERPROFILE%\Application Data\ATE\<name>.ash where <name> is the name of the profile. This way, if/when the user changes the settings and selects the Save option, they will be saved in a location specific to the current user (as opposed to the %MIAME% directory, which may be shared between multiple users). 6. --- (Windows/ATE) No longer abort on startup if the the path to the .ash file is invalid. ============================================================================ A-Shell Development Notes Version 4.9.960.1 (11 July 2006) ============================================================================ 1. --- Fix problem in MIAMEX,MX_GETOFD hanging when running in local Windows. 2. --- TAB(-1,94) (scroll down) wasn't clearing the top row of the box. (Congratulations Frank on spotting this 10-year old bug!) 3. --- Support AMOS-style filespecs in MIAMEX,MX_SHELLEX 4. --- Support defining environment variables in terms of other environment variables in MIAMEX,MX_SETENV. 5. --- Windows printing now supports files with UNIX-style line terminators. (Useful when printing from UNIX to Windows via ATE or AshLPD.) 6. --- Minor enhancement to XTREE checkbox support. Now, you can have individual cells within a checkbox column which do not contain a checkbox by setting that column data to blank. (You could have done this before, but the editing logic still allowed you to set the focus to the cell, which was a bit confusing.) The XTRA5 sample program has been upgraded to illustrate this, and also to show how individual checkbox cells can have their own background color. 7. --- ATSYNC.LIT 1.0(102) removes the incorrect "not yet implemented" note next to the /DELETE switch in the help display. ============================================================================ A-Shell Development Notes Version 4.9.960.0 (9 July 2006) ============================================================================ 1. --- Windows installation program no longer overwrites the IFX and VUX and ASTART.CMD files if they already exist. ============================================================================ A-Shell Development Notes Version 4.9.960 (5 July 2006) ============================================================================ 1. --- (ATSD) Remove restriction limiting the number of connections from a single IP address to 5. 2. --- Adjust the way background tasks are counted against the license. Previously, the first background task would count as a node, but after that, they would not. Now, provided that the license is for 5 or more nodes, the first 5 (simultaneous) background tasks do not count. After that, they count as regular nodes. 3. --- (ATE) For what it's worth (probably not much), auto-screen snapshots now get saved on the server, even when INFLD is running in GUI mode on the client. Previously they got stored on the ATE client in a file called .BUF. The reason this is not worth much, is that the issue only related to snapshots taken by GUI-mode INFLD, and GUI objects do not appear in the snapshot file (as screen snapshots was a text-mode phenomenon). But for hybrid program where most of the screen is text but INFLD is still running in GUI, this might be helpful. Manual snapshots are now disabled in GUI mode. 4. --- XCALL MIAMEX,56,ENVVAR,ENVVAL{,STATUS} may now be used to define arbitrary environment variables. (56 = MX_SETENV in ASHINC.DEF.) STATUS returns 0 for success, -1 for general error, -2 for overflow of memory set aside for environment variables. Use MIAMEX,31 (MX_GETENV) to retrieve environment variable definitions. 5. --- Fix minor compiler bug in which numeric CASE statements were not allowing leading minus signs (i.e. CASE -1). (For A-Shell Editor users, this is COMPIL.EXE edit 317.) 6. --- XCALL MIAMEX,38 (MX_MKPATH) now supports embedded environment variables, e.g.: xcall MIAMEX,MX_MKPATH,"%MIAME%\901902",STATUS 7. --- (Windows) XCALL HOSTEX now supports a new suffix character, "#", which is like "$", except that it allows the child process to inherit the handles opened by the parent. This is mainly only of interest for passing a a socket opened by the parent to the child, so that the parent can close it and accept another on the same port. 8. --- Two new LIT commands: .GETENV var .SETENV var=value The first retrieves the value of the specified environment variable. The second sets the specified environment variable to the specified value. 9. --- The GDI //IMAGE and //METAFILE commands, as well as XCALL IMAGE and XCALL AUI,AUI_IMAGE will now look for the image file in the directories pointed to by the environment variables ATECACHE and ATEPERMCACHE, if it is not found in the originally specified directory. This is an extension of the feature described below under 957.0 #5, and is mainly useful for ATE printing (where the host may pre-transfer //IMAGE or //METAFILE images to one of the cache directories without having to modify the printfile or deal with incompatibilities between the directory structure used on the host and on the ATE client.) 10. --- xcall MIAMEX,MX_WINPTR,status,printer{,port{,driver}} (MX_WINPTR=120: prompt for windows printer) now supports ATE. Thus, the application on the server can now prompt the user to choose a windows printer, and then, using TAB(-10,54) (see edit 953 item #1 below), send this information to the ATE client prior to printing to it via the DEVICE=AUXLOC: option. Note that to be effective, this requires that a printer init file exist for the specifiec printer name in the ASHCFG: directory of the ATE client (aka %MIAME%\dsk0\001007). Values returned in the status parameter are now as follows: 0 = user cancelled out of the printer selection dialog -1 = feature not supported (requires ATE or A-Shell/Windows) -2 = invalid ATE response (ATE must be build 960+) >0 = OK 11. --- UNIX installation script improvements: - The installation script now replicates the TERMINFO definitions for am62a to am62cg and am75 to am75g if needed. (This is a convenience when updating older systems with the intent of using ATE. For new installations, you still need to run the tic am62a.tis command to compile the TERMINFO definitions for the am* emulations.) - ASTART.CMD is no longer overwritten - ASHLPR components (OPR:ASHLPR.INI, ersatz def ASHLPR:=DSK0[1,24], BAS:ASHLPR.SBX) now installed if not already there. ============================================================================ A-Shell Development Notes Version 4.9.959.0 (28 June 2006) ============================================================================ 1. --- (Windows/ATE) Introduce PDFX module for generating PDF files. The module consists of a separate installation of a PDF printer driver called PDF-XChange which can be selected and output to like other printer drivers, except that instead of printing, it creates a PDF file. Our offering to customers will consist of a license for the drivers, new options and PDF-related capabilities within A-Shell (mostly GDI print commands), and, in the case of non-Windows environments, AshLPD or ATE modules to deliver the print file to the PC where the PDFX drivers reside. Absent the license, or when attempting to print to the driver from a non A-Shell application, the output will contain prominent "demo" stamps but otherwise work. Complete documentation on pricing, licensing, technical details available separately from MicroSabio. 2. --- (Windows/ATE) Implement new family of GDI printing commands for configuring the new PDFX operation: //PDFX,key,value For example, //PDFX,Save.WhenExists,1 The complete set of //PDFX commands is documented separately. Note that all //PDFX commands are ignored if the currently selected driver is not PDF-XChange. 3. --- A new printer init command may be used in conjunction with DEVICE=AUXLOC: to specify where the output file will be placed on the PC. (Normally this doesn't matter much because the file is usually deleted after printing, but in cases where that is not true, and especially for PDF generation, the location is rather important.): AUXPCDIR=<pc path> example: AUXPCDIR=%MIAME%\PDF If <pc path> does not exist, it will be created (provided that its parent path exists). 4. --- (ATE) TAB(-1,93) and TAB(-1,94) (scroll box up and down) were not working. Fixed. 5. --- (Windows/ATE) A problem in which a click on a combo box dropdown list overlaying the top of an inactive XTEXT control would sometimes (leak through), as if the combo were clicked and then the XTEXT clicked again. 6. --- When auto-snapshots are enabled (via SUBMIT /BC or /BA switches or via the A-Shell -bc or -ba command line switches, or via the |S INFLD TYPE code), a final snapshot is not automatically take just before the session exits. 7. --- (Windows/ATE) You may now toggle the PASSTHROUGH option with a printfile by inserting one of the following as the first line of the printfile: //PASSTHROUGH OFF or //PASSTHROUGH ON Note that the above mode is not "sticky"; it only affects the current report. 8. --- (ATE) Yet another way to change the PASSTHROUGH option, but otherwise use the printer configuration as set in the ATE connection properties, is to use a special pseudo-printer name +GDI or +PASSTHROUGH in the DEVICE=AUXLOC: statement, i.e.: DEVICE=AUXLOC:+GDI or DEVICE=AUXLOC:+PASSTHROUGH This will cause ATE to use the current printer configuration as set in the connection properties, but will force the GDI or PASSTHROUGH option. It has no effect if the workstation is not running ATE. Furthermore, unlike the //PASTHROUGH command, this one "sticks" across multiple print requests (but doesn't change the saved connection properties, so that when the user manually displays the connection properties, or launches a new ATE session, the GDI/PASSHTROUGH option will revert to the way it was last manually set.) You can also get the same effect without sending a print request via the following TAB command: ? TAB(-10,54);",+GDI";chr(127); or ? TAB(-10,54);",+PASSTHROUGH";chr(127); ============================================================================ A-Shell Development Notes Version 4.9.958.5 (27 June 2006) ============================================================================ 1. --- (ATE) The printer init command DEVICE=AUXLOC: may now specify an optional printer configuration name for ATE to use. (This effectively issues the TAB(-10,54) command, as described in a previous edit below.) Example: DEVICE=AUXLOC:Okipage ============================================================================ A-Shell Development Notes Version 4.9.958.4 (25 June 2006) ============================================================================ 1. --- Fix bug in XCALL MIAMEX,MX_FLINES (147) where the slinelen arg was not always ignoring trailing spaces and control characters from the stripped line length returned. Note that the linelen argument continues to include the LF terminator (as well as any trailing spaces); but the slinelen arg now properly only counts the printable characters. 2. --- RENAME.LIT 3.1(110) and MAKE.LIT(103) recognize filespecs ending in "." as indicating a file with no extension, rather than as a wildcard. ============================================================================ A-Shell Development Notes Version 4.9.958.3 (23 June 2006) ============================================================================ 1. --- (Windows/ATE) XTREE now allows you to hide a column by using the mouse to shrink it's width to 0. (Actually, you could always have done this, but now, if XTR'USECOLORDER=1, XTREE sets the corresponding entry in the XTR'COLORDER array to <position>+128, which effectively causes the column to remain hidden on subsequent calls to reselect from the tree. This can be demonstrated easily in the XTRA3 sample program: use opcode 0 and set the modeless option to create/display the tree; then manually shrink one or more of the columns to become invisible. Then exit the tree and re-enter it with opcode 0 or 1 to verify that the column remains hidden. (Use the popup menu option to unhide them.) ============================================================================ A-Shell Development Notes Version 4.9.958.2 (22 June 2006) ============================================================================ 1. --- (Windows/ATE) Fix conflicts between INFLD TYPEs ||m and F and ||S 2. --- XCALL RENAME now accepts files with no extension (previously it treated these as having extension DAT). Note: this is only part of the solution to the problem of not being able to rename a file with no extension. The other part requires an update to RENAME.LIT (not yet available). ============================================================================ A-Shell Development Notes Version 4.9.958.1 (20 June 2006) ============================================================================ 1. --- (Windows/ATE) Fix a timeout problem (5 second delay) in MIAMEX,97 (MKDIR) and MIAMEX,137 (HTMLHELP) 2. --- (Windows/ATE) New INFLD TYPE codes related to combo boxes: |m prevents the ENTER key, when used to select an item from the dropdown list, from also causing the field to exit. ||m causes EXITCODE 13 to be returned when an item is selected from the dropdown list (using ENTER or click). This allows you to distinguish that event from merely hitting ENTER to the field when the dropdown is not displayed. 3. --- (Windows/ATE) Fix a bug in which a popup XTEXT (TXF_POPUP) would clobber a control which had the same starting row/col position in the parent window. 4. --- (Windows/ATE) XTREE now allows the program to keep track of temporarily hidden columns using the same means as it does to keep track of column order (i.e. via the XTR'COLORDER array). If XTR'COLORDER(x) >= 128, then real column x will be hidden. The XTRA3 sample program has been updated (edit 130) to illustrate this. It also adds Hide and Unhide options to the popup menu to illustrate another way of accomplishing the same thing. (The beauty of the first method is that it requires no programming effort at all.) ============================================================================ A-Shell Development Notes Version 4.9.958 (15 June 2006) ============================================================================ 1. --- The compiler now supports REPEAT statement when compiling in X:1 or X:2 (BasicPlus) or /RC mode. REPEAT is similar to EXIT in that it can occur inside a DO loop or FOR/NEXT loop; it causes the control to transfer to the next iteration of the current loop without executing any remaining statements in the body of the current loop. For example: TOT = 0 FOR I = 1 TO 10 IF I = 5 REPEAT TOT = TOT + I NEXT I The above loop will set TOT to the sum of the numbers 1 thru 10, except 5. 2. --- The compiler now supports the EXIT statement in /RC mode. 3. --- The compiler now supports the SWITCH / ENDSWITCH / CASE / DEFAULT statements in /RC mode. (The generated RUN file is compatible with AMOS and existing A-Shell runtime versions.) The implementation is roughly compatible with the AMOS BASICPLUS version, although the details of the AMOS implementation are a bit vague, so here is an alternate explanation... The general form of the SWITCH construct is as follows: SWITCH <expr> CASE <constant> <statements> EXIT CASE <constant> <statements> EXIT DEFAULT <statements> EXIT ENDSWITCH The <expr> is first evaluated, and then list of CASE statements is scanned from top to bottom until a match is found between the <expr> and the <constant>. At that point, the <statements> below the matching CASE are executed. If there is no EXIT, the flow of control will continue on through the <statements> following the subsequent CASE statements. (In other words, once a match is found with a CASE, then all subsequent CASE and DEFAULT statements will match, which is why you almost always want to terminate the <statements> associated with a particular CASE with an EXIT.) The optional DEFAULT statement is like a CASE that always matches, so its sub-statements will be executed if none of the above CASE statements match, or if a previous CASE statement matches but had no EXIT statement, so that control continued to flow. Multiple CASE statements can share the same set of <statements>, and a single CASE statement can contain a range of values. A range consists of two constants separated by three dots (although one of the two ends of the range can be omitted to indicate an open-ended range). For example: SWITCH DUES CASE 101... FREE'MASSAGES = -1 EXIT CASE 100 CASE 75 FREE'MASSAGES = 3 EXIT CASE 50...74 FREE'MASSAGES = 1 EXIT CASE ...49 FREE'MASSAGES = 0 EXIT ENDSWITCH In the above SWITCH, if DUES>=101, FREE'MASSAGES is set to -1. If DUES=100 or DUES=75 then FREE'MASSAGES = 3. If DUES>=50 and DUES<=74, the FREE'MASSAGES = 1, and if DUES<=49 then FREE'MASSAGES = 0. If DUES>75 and DUES<100, then none of the CASE statements match, and since no DEFAULT was specified, the SWITCH ends up having no effect. Note that as is typical with numeric expressions in Basic, they can evaluate to integers or floating point values. Although it is somewhat unorthodox to use a SWITCH with non-integers, there is no law against it. The <expr> given in the SWITCH statement can be any type, but the <constants> in the CASE statements must match that type. In other words, if the <expr> is a string, then the CASE <constants> must be literal (quoted) strings, as shown here: SWITCH MEMBER'TYPE$ CASE "Platinum" FREE'UPGRADES = 5 FREE'MASSAGES = 3 DUES = 100 EXIT CASE "G"..."Gold" FREE'UPGRADES = 3 FREE'MASSAGES = 3 DUES = 75 EXIT DEFAULT FREE'UPGRADES = 0 FREE'MASSAGES = 1 DUES = 50 EXIT ENDSWITCH In the above example, the second CASE statement would match when MEMBER'TYPE$>="G" and MEMBER'TYPE$<="Gold" (using normal Basic string comparison logic). As a reminder, AlphaBasic treats trailing blanks the same as nulls in string comparisions, so the second CASE would match even if MEMBER'TYPE$="Gold ". Note that the maximum length of the literal strings in the CASE statements in this case must not exceed the current default string size as set by the STRSIZ statement. Also note that this form of the SWITCH (i.e. with string expressions) does not appear to be support by AMOS. For the more common type of SWITCH (numeric), the CASE constants can also be ASCII constants, or hex/octal constants), for example: SWITCH ASC(A$[B;1]) CASE 'A'...'Z' CASE 'a'...'z' TYP$ = "Alpha" EXIT CASE '0'...'9' TYP$ = "Number" EXIT CASE &h80... TYP$ = "8 bit" EXIT CASE ...&o37 TYP$ = "Control" EXIT DEFAULT TYP$ = "Punc" EXIT ENDSWITCH Note that any statements between the SWITCH statement and the first CASE are actually executed in all cases under A-Shell, whereas they may not be in other implementations of SWITCH statements (such as AMOS). Consequently you should avoid putting any statements there, except perhaps for debugging purposes. 4. --- (Windows/ATE) Close window for memory corruption to occur when the size of the ANSWER parameter passed to XTREE.SBR (with the XTF_MSEL, XTF_EDITABLE, or XTF_DRAGDROP options) is larger than the size of the ARRAY parameter. This would normally not make any sense, given that the ANSWER data would always have to be a subset of the item data passed in the ARRAY parameter, but some programs use a common, large ANSWER array with different sets of ARRAY data. 5. --- (Windows/ATE) Close window for click confusion when a dialog is closed immediately in reponse to a double-click, and there is a clickable control immediately below the dialog. The symptom was that sometimes the double-click would have a residual effect of triggering the underlying control click action too. 6. --- (Windows/ATE) Close an INFLD loophole in which you could bypass the character filtering rules by using the Paste option from the context menu of the edit control itself. Now that operation is trapped and re-routed through the keyboard handler so that INFLD can discard (or fold) or otherwise preprocess the characters. ============================================================================ A-Shell Development Notes Version 4.9.957.4 (08 June 2006) ============================================================================ 1. --- (Windows/ATE) XTREE refinements: - Further aesthetic cleanup of display issues related to editable cells with validation. - Preservation of top index (vertical scroll position) now works with multilevel trees also. ============================================================================ A-Shell Development Notes Version 4.9.957.3 (05 June 2006) ============================================================================ 1. --- (UNIX) SUBMIT.LIT 3.1(143) now supports a maximum time limit by adding an optional number of minutes to the /W switch, i.e.: .SUBMIT MYTASK /W:5 This would wait up to 5 minutes, and if the process is still running at that time, it will be killed. Specifying /W without the optional minutes argument causes the submitter to wait indefinitely, as before. (The previous edit, 142, had incorrectly set the default wait value to 1 minute.) 2. --- APPEND.LIT 2.1(114) now supports the case where the destination and one of the source files is the same file, and neither exists, provided the /I{gnore} switch is specified, e.g.: .APPEND /I A.A=A.A,B.B Previously this would have aborted with an error if A.A didn't exist. Now, the above command is logically equivalent to COPY A.A=B.B 3. --- Improve parsing of initial A-Shell command line as so to be smarter about when to interpret \n as a line break as when to interpret it as a literal character sequence. As background, 926.2 introduced the ability to pass multiple commands on the A-Shell startup command line by separating them with chr(10) or "\n". This applies whether launching A-Shell from an icon/shortcut or via HOSTEX.SBR. For example: XCALL HOSTEX,"$ASHELL vue notes.txt\nsize notes.txt" The above command line essentially creates and then executes a command file on the fly, equivalent to: :R vue notes.txt size note.txt The problem occurs when Windows or UNC paths are passed on such command lines, since in that case a \n might occur inside of such a path. Previously, A-Shell limited the confusion by only recognizing \n if it was the first \ in the command line. Now, it attempts to analyze whether the \n occurs in something that looks like a filespec. If so, it treats the \n as literal; else it treats it as a line break. For example: XCALL HOSTEX,"$ASHELL log ashtst:\nvue c:\notes \nsize c:\notes.txt" The above command line contains 4 \n sequences. The first and third are considered not part of filespecs and thus are converted to line breaks. The second and fourth, which are contained in the token "c:\notes.txt", which is interpreted as a filespec because it starts with what could be a drive letter. Note the following tricks and considerations when trying to get "\n" to be treated as a line break: - If you want to follow a filespec with "\n", precede it by a space, as we did in the example above for the "\n" following "vue c:\notes". A trailing or leading space does not usually interfere with the interpretation of a filespec, so that shouldn't cause a problem. Without the space, in the example above, "c:\notes\nsize" would have been considered a single filespec. - Quoting the filespec doesn't help, since the quotes are generally removed by the shell or other command line parser before we get to the code that looks for "\n". - A token is considered to be a filespec if it starts with \\ or with a letter followed by a colon. 4. --- (Windows/ATE) You can now specify an RGB value for the FGC and BGC (foreground and background color) parameters in AUI_CONTROL when creating STATIC controls, rather than being limited to the previously defined colors in the color palette. In order for FGC or BGC to be recognized as an RGB value rather than a palette color number, it must not be -1 or -2, and one of the following must be true: R value not zero, G value not 0, or B value >= 128. Use hex notation to make this humanly readable, i.e. &hRRGGBB where RR, GG and BB are the two-digit hex values for red, green and blue. For example, magenta could be represented as &hFF00FF. Note if either the FGC or BGC parameter (for a STATIC control) contains an RGB value, this overrides the XP Theme color (just as if you had added +64 to the palette color number). 5. --- (Windows/ATE) Minor XTREE aesthetic improvements relating to editable cells and validation: - The column currently being edited now shows as selected. (Previously it tended to select the column of the last validated cell.) - When moving from one validated cell to the next, there was previously a quick flash in the first column for that row, owing to the row being selected then inactivated, then cleared during each validation operation. ============================================================================ A-Shell Development Notes Version 4.9.957.2 (31 May 2006) ============================================================================ 1. --- (Windows/ATE) Misc XTREE fixes/improvements: - Fix problems with how row(s) are initially selected in XTREE. Now it should conform more closely to typical Windows standards i.e. if you click on a row while the tree is inactive, when it gets activated, that row will be selected. If it is a multi-select tree, such a click will clear previous selections unless you use the CTRL or SHIFT key at time of click. Clicking on a neutral part of the control should select the previously selected item(s). Note, however, that currently clicking on the scroll bars of an inactive XTREE does not actually activate it. This allows you to scroll the display without any need for your application to respond. - Opcodes 1 (reload) and 4 (reselect) now attempt to preserve the current scroll position of the existing tree, provided that the first selected item is visible. Previously it was usually trying to reposition the scroll bar such that the first selected item was approximately 1/3 of the way down from the top visible position. 2. --- (ATE) Fix inadvertent tracing of "sending kbd response" messages to ashlog.log. ============================================================================ A-Shell Development Notes Version 4.9.957.1 (24 May 2006) ============================================================================ 1. --- (Windows) A-Shell now uses the same grid units when the main window is launched invisibly (with -z switch) as it does when launched normally. Previously, it used a default window size, which affected the sizing of dialogs opened by the invisible window (unless the MBF_ALTPOS or font-based dialog sizing method was used). 2. --- (Windows/ATE) Misc XTREE-related fixes: - Drag-and-drop now targets the positions between the existing rows, rather than the rows themselves, so you can now drop a row either before or after any existing row. (Previously the target was a row, which was interpreted as meaning that the dropped item would be inserted just before the target row, making it impossible to drop a row after the last existing row.) - You can now initiate a drag-drop operation with a single click-drag. Previously, this only worked if the item to be dragged was already selected, which meant you would have had to click twice to start dragging an item that wasn't previously selected. - The row dropped (via drag-and-drop) now remains selected. - Drag-and-drop is now supported in multi-select trees, although only a single item may be dragged at a time. - Some confusion over how the initially selected row(s) were determined has been partially cleared up. In general, the ANSWER data (whether a single value or an array) is used to preselect the items. The main exception is that if you had clicked on the XTREE while it was inactive, then for single-select trees, the row clicked will override the ANSWER specification. For multi-select trees, the row clicked will add to the existing set of selected rows. - Clicking on another cell during a cell editing operation was sometimes causing the control to appear to become stuck in an infinite loop. - Fix a memory leak when re-entering an editable tree after validating and the tree contained combo boxes or popup menus. (After a few dozen validation cycles, you would start getting OUT OF MEMORY errors, although it probably didn't affect the operation of the program if the tree was deleted before trying to create another one. 3. --- (Windows) MIAMEX email interface (MX_MAPI) now supports attachments. New syntax: XCALL MIAMEX,MX_MAPI,STATUS,FSPEC{,FLAGS,SUBJECT,TEXT,XDATA, & FSPEC2,FSPEC3,...FSPECN} To send file(s) as attachments, add +2 to FLAGS. SUBJECT will specify the subject line of the message. TEXT will specify the body of the message. XDATA is a dummy placeholder argument intended to be implemented later for further refinements, such as specification of recipients. You can specify "" in its place for now. FSPEC2...FSPECN are strings specifying additional attachments (if you have more than one). Note that this call requires that the Windows "Simple MAPI" interface be installed. This will happen automatically in most cases, as it is included in Outlook Express. But it is not installed by default with the full server version of Exchange Server. In that case, you need to manually install the "simple MAPI" subsystem from your Windows media or microsoft.com. 4. --- (ATE - server side only) Fix a problem in which INFLD would not return the updated field contents when the originally preloaded field contained characters that had to be "escaped" (such as embedded quotes). 5. (LINUX) New EFS build 51000. (Some minor performance optimization for encrypted ISAM files.) ============================================================================ A-Shell Development Notes Version 4.9.957.0 (19 May 2006) ============================================================================ 1. --- XCALL NFIND now works as documented. (Previously, it hardly worked at all.) 1. --- (ATE) Fix problem with :S status in a command file not being cleared immediately at end of command file. 2. --- (LINUX) For the Encrypted File System (EFS) you can now specify which extensions are to be encrypted via the following MIAME.INI command: EFSEXT=ext1{,ext2,ext3,...ext10} ; (up to 10 extensions) Whenever a file is created (either via OPEN for output or ALLOCATE), if the extension is in the EFSEXT list, and encryption is supported, and has not been disabled via XCALL ASFLAG,1024, then the file will be created as an encrypted file. (Note: EFS is not included in the standard release version of A-Shell but is supported as a custom option.) EFS also now supports the INMEMO option whereby INMEMO opens the file itself. 3. --- (Windows/ATE) Clean up an XTREE display anomaly introduced in 955 in which the initial display of an XTREE control would sometimes involve multiple passes, with the first pass(es) involving fewer than the total number of columns. 4. --- (Windows/ATE) Fix a problem in which the PAGE command was intermittantly not working (i.e. not stopping at the end of each page). 5. --- (ATE) ATE now looks for files related to control creation (icons, bitmaps, etc.) in the %ATEPERMCACHE% directory if not found in the initially specified directory. 6. --- (UNIX) TRACE=INOUT now also lists the inodes of the jobtbl.sys and qflock.sys files in the ashlog.log entry. (This is useful for confirming that the jobs are actually sharing the same sys files.) 7. --- (Windows/ATE) XTREE now supports item drag-drop (within a single XTREE control) as a means of allowing the user to re-order the rows and to communicate the new order back to the application. For example, you may want to present a list of fields available for export and allow the user to determine the output order by rearranging the list using drag/drop. Or you may want to load up an XTREE with a list of all of your illegally downloaded MP3 tunes and use the drag/drop feature to create ordered playlists. To enable the feature, specify the XTF_DRAGDROP (&h10000000) bit in the FLAGS parameter, and insert two fields at the start of the ANSWER array, along the lines of how you would set up the ANSWER array for editable cells. The first field is a 4 character string to return the original row number for the given display row, and the second field is an array of one-character item selection flags (just as you would have for multi-selection). For example: MAP1 ANSWERX MAP2 ANSARY(MAX_ROWS) MAP3 ORG'ROW,S,4 ! orig row # of this display row MAP3 SELECTION,S,1 ! selection flags MAP3 CB,S,1 ! a checkbox column MAP3 EDATA,S,8 ! a 8 character editable column <etc> Note that the ORG'ROW field must be first, followed by the SELECTION field, followed by any editable checkboxes, followed by any other editable cells. (In the example above the ORG'ROW and SELECTION fields would be mandatory while the CB and EDATA fields would only apply if you happened to have one editable checkbox column and one editable text column.) The SELECTION field is treated just as it would be when multi-select is enabled (i.e. SELECTION(I)="1" if item I is selected, or "0" if not.) Note that the presence of a SELECTION array usually indicates that multiple selection is supported, but in this case it does not necessarily imply that. In fact, the drag-drop operation currently only works for one row at a time, although you can still allow multi-selection for reasons independent of drag-drop. In normal (single selection) case, all of the SELECTION() entries will be "0" except for the one selected item.) The ORG'ROW field is formatted as a decimal number of up to 4 digits with leading spaces. (This imposes a maximum of 9999 rows when using drag-drop, which is a reasonable limit since drag-drop becomes somewhat impractical anyway when you have more than several dozen items.) Since the array used to load items is not returned by XTREE, and all other related return data specifying row numbers is coded relative to the original order of the rows (as opposed to the last display order), the ORG'ROW() array provides the only way for the app to determine what the last display order was. (This might even motivate you to enable drag/drop just for the purpose of being able to easily process the array data according to the way the user sorted it.) The ORG'ROW() array is ordered according to the display order of the rows, unlike all the other arrays within the ANSWER array, which are ordered according to the original array order. As an example of using ORG'ROW(0, the following code would print the original array data according to the display order (resulting from drag/drop and/or column sorting): FOR I = 1 TO MAX_ROWS J = VAL(ORG'ROW(I)) IF (J > 0) PRINT ARRAY(J) NEXT I 8. --- COPY.LIT 3.1(122) now preserves the modification time and ownership of the source file. Also, it supports a new switch, /C{onfirm}, which is similar to the /Q{uery} switch except that it only prompts you to confirm whenever the destination already exists. (If you are prone to accidentally overwriting important files by loose-fingered copy commands, you may want to rename COPY.LIT to something else, then create a COPY.DO which forces the /C switch to be specified.) ============================================================================ A-Shell Development Notes Version 4.9.956.1 (09 May 2006) ============================================================================ 1. --- (Windows/ATE) Fix two recently introduced bugs in XTREE: - The initial row wasn't getting selected according to the ANSWER value if ANSWER was mapped as an unformatted variable. - A fatal Windows error was occurring with certain combinations of XTREE operations. 2. --- (Windows/ATE) Remove the "*" entry from INFLD combo boxes (i.e. when the SETDEF list contains a * or *,* entry to allow wildcards). ============================================================================ A-Shell Development Notes Version 4.9.956 (08 May 2006) ============================================================================ 1. --- (Windows/ATE) XTEXT no longer displays "Page Break" in the page break line. (Apparently this was too obvious, redundant, even "ugly" for those with more developed aesthetic sensibilities.) 2. --- (Windows/ATE) XTREE combo box editing improvements: - You can now use ALT+DOWN ARROW to force the drop-down to display (or in the case of the self-service combo, to exit). - CTRL or SHIFT with the UP/DOWN arrows now advances to the next or previous row. (UP/DOWN by themselves move among the choices of the list, whether or not the list is in the dropdown position.) - The item (row) height is now adjusted to be at least the height of the combo box. In the case of fixed-height trees, this happens when the tree is initially displayed. In the case of variable row-height trees (XTF_VARY flag set), this happens on a row-by-row basis as you activate combo boxes. 3. --- (ATE) The cache directory concept has been split into two parts: a temporary cache meant for storing files of temporary interest to ATE, and a more permanent cache for files such as icons that are likely to remain valid for the life of the application. Both the temporary cache and the permanent cache initially point to the directory previously used for the one-and-only cache (typically %MIAME%\cache), but you can now separate them on the Misc Tab of the ATE configuration dialog. Once separated, the contents of the temporary cache will be deleted at the end of each session. (As long as the two types of cache occupy the same directory, they will be given the benefit of the doubt and allowed to remain permanently. A new environment variable, ATEPERMCACHE, will be automatically created to point to the permanent cache directory. The recommended permanent cache directory is %MIAME%\PermCache, which will be set up be default for new ATE installations. The old cache environment variable, ATECACHEDIR, has been shortened to ATECACHE (although the old form will still be recognized), and will point to the temporary cache directory. Dealers/users will want to devise a strategy to migrate the permanent files from the old cache directory in to the new permanent cache, probably using the new ATSYNC facility (see next). 4. --- (Server/ATE) A new command, ATSYNC.LIT, makes it easy to synchronize a directory from the server to the permanent cache on the PC: .ATSYNC {Hostdir} {,PCdir} {/Switches} If the Hostdir specification is not present, uses current directory. Otherwise it should specify a directory in either AMOS or native syntax. If the PCdir specification is not present, the default is the %ATEPERMCACHE% which is the environment variable automatically set up to point to the permanent cache directory on the ATE client. Otherwise, it can be a native Windows directory specification (with optional embedded environment variables using the %envvar% syntax). Switches: /C{ont} = continue trying even after a transfer error /D{elete} = delete files from PC target dir not in host source dir /P{rogress} = display progress info /NOERR = don't display FTP errors (just return status) ATSYNC relies on FTP (or SFTP) as configured on the ATE client. (The FTP root directory must agree with the root directory as seen by A-Shell on the server.) ATSYNC sends a list of all the files in the Hostdir to the ATE client, which compares the size and modification date against the version on the PC. For those files where the server version is newer than the PC version, or for which the PC version doesn't even exist, ATE will initiate a file transfer. If the /B switch is specified, then after the files are transferred, it deletes any file in the target PC directory that was not present in the source directory on the host. 5. --- (ATE) The "CoStar" (actually Cogent) interface is now supported: PRINT chr(27);"[!v"; chr(27);"&oC"; CMD$ INPUT "",A ! returns CR or "" if ok, else ^C where CMD$ is a command string recognizable by Cogent. Two simple commands to test if the Cogent interface is working: CMD$ = "ABOUTCG" ! display the Cogent About box or CMD$ = "ECHO ""Hello world""" ! tell Cogent to display msg box Note that the sequence must be terminated with a CR (which is why there is no semicolon on the end of the PRINT statement above.) 5. --- (Windows/ATE) INFLD now allows list substitution (||L) to be used with combo boxes containing an edit control (||s). Previously, list substitution was deemed only sensible with the variation of the combo box which only allowed selection from the list (||S). If ||L and ||s are to be used together, and you want to allow the user to be able to enter values which are not in the list, then add a list substitution pair consisting of "*,*" (assuming the delimiter is comma) to the end of your list. For example: SETDEF=",B,Blue,G,Green,R,Red,*,*,," This list would allow the user to select Blue, Green, or Red, (returning B, G, or R respectively), or, if the user typed in Yellow, it would just be accepted as is and no list substitution would take place. While implementing this, a minor problem was fixed in which you could not preload a value in any combo box that wasn't in the list, even if the list contained wildcards. 6. --- (Windows) XCALL AMOS (or XCALL HOSTEX,"$ASHELL...") now replicate more switches from the parent to the child: -o <settings file> -nm -m, -mx (provided no -m or -mx specified in XCALL command line) -z, -zt, -zi (provide no -z, -zt, or -zi specified in XCALL cmd line) 7. --- (Windows/ATE) Minor adjustment in sizing/positioning of data controls that have borders (INFLD edit controls, combos, date pickers, sunken static, etc.) Previously, only single-column edit controls were expanded by 0.5 columns to the right to avoid truncation problems. Now all such fields are expanded 0.2 columns to the left, and a similar amount to the right, which should minimize problems with display anomalies (truncation or different font sizes) caused by the fact that the borders of such controls reduce the available display area for the contents. The one undesirable side effect of this improvement is that the outer left edge of such field types will no longer align exactly with plain-text; but this should be a minor issue considering that data fields are rarely aligned vertically with non-data fields, and even when they are, the new version would be close to aligning relative to the data in the field rather than to the outer edge of the border of the field. 8. --- (UNIX) Fix conflict between SBR=INFLD_KEEPALIVE and multi-character function key translations. 9. --- (Windows) Allow ORIENTATION=LANDSCAPE to force landscape orientation even when DEVICE=PROMPT:. 10. --- (Windows) Installation/Update no longer overwrites ASHELP.MDF. ============================================================================ A-Shell Development Notes Version 4.9.955 (27 April 2006) ============================================================================ 1. --- (WINDOWS/ATE) XTREE fixes: - Numeric sort now properly handles (i.e. ignores) spurious formatting characters (currency symbols, thousands separators). - Current row selection and/or cell editing context is no longer lost or changed when columns are sorted. - Windows events are no longer suspended during the loading of the tree. Previously, it would seem to go "dead" while loading a large amount of data, and even an animated progress AVI wouldn't have gone into suspended animation, which sort of defeated the value of the XTR'DELCTLID feature. The XTRA7 sample program illustrates the feature. 2. --- (WINDOWS/ATE) Fields containing '&' (e.g. "A&W") now redisplay properly even when INFLD is not using an edit-style control for the redisplay (i.e. when neither |E nor ||C nor |M TYPE codes used.) 3. --- (Windows/ATE) XTEXT Minor fixes/enhancements: - Clicking on the Save icon now acts like F3, so can be trapped as exitcode (-3) by setting the &h0004 bit in TXC'FMAPAPP. - Protecting all rows (-1) wasn't protecting the last row if it wasn't terminated with a CRLF. (The XTX1 sample program was also failing to allow a negative value for TXC'PROTROWS field.) - Fix "bungy" scroll bar. - Implement a right-click menu for Cut/Copy/Paste commands. Note that the text for these commands comes from the following items in the SYSMSG.xxx file: 004,001,Cut 004,002,Copy 004,003,Paste (If those messages are not defined, the English defaults are used.) - Hitting ESC or clicking on the "X" (in popup mode) now prompts the user whether they want to save the changes (if there were any changes). If not, EXITCODE is set to 1 (and indicates that the changes were discarded). If so, EXITCODE is set to 0. If you don't want to be bothered by this confirmation message, you should probably convince your users to use another exit key (such as TAB or ENTER or an F# key). The sample program XTX1 has been updated to indicate that EXITCODE 1 and 10 corresponds to no update at all. The text of the message box that prompts the user to confirm whether they want to save or not is taken from the 023,001 entry in SBRMSG.xxx. The title of the message box is taken from the 000,001 entry in APPMSG.xxx (which is meant to be the application name). 4. --- (windows/ATE) XTREE new feature: ability to display images (JPG, BMP, PCX, TIF, GIF) in cells. Requires the VIC32 add-on imaging library. To display images, load the column with the image filespecs, and set the column type to "I". In addition, you must specify the following column options: ImgSiz=Width,Height,Bpp{,Fit}{,Stretch}{,ScaleQ} ImgCount=IniCount,GrowBy ImgDir=ImageDirectory where: Width and Height define the maximum display size (in pixels). If the XTF_VARY flag is not specified, then every image will be displayed at this size (scaling/stretching as needed). Otherwise, this size just specifies the maximum. Bpp (Bits Per Pixel) may be set to 1, 8, or 24. If 1 or 8, images with greater depth may be reduced, but the precise details of the color reduction vary according to many external conditions. (For best viewing, use 24.) Fit only applies when XTF_VARY is set, and causes any image that is smaller than the maximum size to be scaled up until it matches either the maximum width or height. Stretch only applies when XTF_VARY is set (it is automatic otherwise), and is the same as the Fit option except that the image is stretched as needed to match both the maximum width and height. (The aspect ratio is not preserved.) ScaleQ causes the resizing logic to use bilinear interpolation, which is slightly slower the the default (bit replication) method, but gives better results. IniCount specifies the number of images to be loaded, and would normally be set to match the Maxcount parameter of XTREE (unless you knew that not all rows would have images). GrowBy is a clue to the ImageList allocation routine as to how much to let the initial allocation grow by. In most cases, you should just set it to 0 or 1. ImageDirectory specifies the AMOS or native directory where the images are stored. This allows you to avoid having to specify the directory for each image in each row of the XTREE data. (However, if your images are in different directories, you can still specify the directory with the image name, in which case the ImageDirectory will be ignored.) For example: COLDEF="1~32~Image~I~" & + "ImgDir=c:\my documents\my images~" & + "ImgSiz=160,120,24,fit,scaleq~" & + "ImgCount=100,1~~" The above column definition specifies that positions 1 thru 22 of each arrow item contain an image filespec, which will be assumed to be in the directory "c:\my documents\my images". The maximum display size for the images will be 160 pixels by 120 pixels, using 24 bit color, and maximum quality scaling. We allocate space for 100 images, with possible expansion by one at a time. Normally, the images will occupy cells by themselves, but you can also include text in the cell with the image by appending the desired text to the image filespec, separated by a comma. For example, if the cell data was: myimage.jpg,display text then the cell would display the image (myimage.jpg), with the text ("display text") to the right of it. (Currently there is no option to put the text to the left of the image but it may be added if there is a demand.) A new sample program, XTRA7 in [908,21] has been added to illustrate image display. It presents a standard File Open (multi-select) dialog from which you can select up to 100 images to be displayed in an XTREE. The XTREE also contains an editable column for you to enter descriptions of the images, and has an option to save the data to a CSV file and reload it later, plus an option to show text in the image cells. 5. --- (Windows/ATE) XTREE new feature: left/right click instant exit, enabled fix a new Advanced COLDEF option: ClickExit=<lclick exitcode>,<rclick exitcode> Where each value is a positive or negative integer. If zero, then that type of click is ignored. The XTR'XROW and XTR'XCOL parameters return the coordinates of the clicked cell. Examples: ! left click -> EXITCODE -88, right click -> EXITCODE -89 COLDEF="25~9~ID~S~ClickExit=-88,-89~~" ! left click ignored, right click -> EXITCODE -89 COLDEF="25~9~ID~S~ClickExit=0,-89~~" ! left click -> EXITCODE -88, right click -> EXITCODE +88 COLDEF="25~9~ID~S~ClickExit=-88,88~~" The sample program XTRA7 has been enhanced to illustrate this; if you click on an image, it pops up a dialog with a larger version of the image and displays the image size information. The sample program XTRA5 also now supports clicking on the description column to exit. 6. --- (Windows/ATE) XTREE new feature: Combo boxes. Combo boxes are very similar to standard editable text cells. To specify, use the column code "l", either with or without the "E" (editable cell). If "El" are used together, the combo box will permit entry of arbitrary values. Otherwise "l" by itself only allows you to select from existing values. To define the values, add the following clause to that column definition: List=item1,item2,item3,....itemn or List=... For example: COLDEF = COLDEF + "9~13~Status~SEl~" & + "List=Virgin,Extra Virgin,Not so Virgin~~" This would define a column that the user can type anything into, or select from the three pre-programmed choices in the combo box. When list is set to "...", you get a "self-service" combo, meaning that it simply exits with EXITCODE=29 when you try to scroll or display the combo contents. This allows the application to present a more complex set of choices than can be easily handled in the with the internal combo. The XTRA5 sample program has been enhanced to illustrate the various combo box options. 7. --- (Windows/ATE) XTREE new feature: row foreground colors using custom RGB definitions (rather than A-Shell palette color numbers). Use column code "C" or "c" (as before), but instead of putting a numeric palette index value (0-15) in the cell, put an alphabetic character (A-P). custom RGB colors defined by RGBbg or RGBfg commands (using the syntax described below for definining custom row background colors), by setting the column data to a character A-P rather than to a numeric value. The numeric values continue to reference A-Shell palette colors, while alphabetic values reference previously defined RGBbg/RGBfg values. The XTRA3 sample program was updated to illustrate this technique. 8. --- (Windows/ATE) XTREE enhancement: Multi-selection mode is now supported in combination with editable cells and checkboxes. Previously, trees containing editable cells and checkboxes had to be single-selection. When using multi-selection in conjunction with editable cells, insert a one-byte column at the start of the ANSWER array to receive the selection flags. For example, in a single-selection tree containing 2 editable checkboxes and an editable text cell, your ANSWER array might be defined as follows: MAP1 ANSWERX MAP2 ANSARY(100) MAP3 CB'1,S,1 ! 1st checkbox MAP3 CB'2,S,1 ! 2nd checkbox MAP3 TEXT'3,S,22 ! editable text colum To allow multi-selection, specify the XTF_MSEL flag and insert another column in the ANSWER array, as shown here: MAP1 ANSWERX MAP2 ANSARY(100) MAP3 SELECT,S,1 ! Selection flags (must be 1st) MAP3 CB'1,S,1 ! 1st checkbox MAP3 CB'2,S,1 ! 2nd checkbox MAP3 TEXT'3,S,22 ! editable text colum A new sample program, XTRA5M, has been added to the SOSLIB sample programs to illustrate this. It is the same as XTRA5 but modified for multi-select. 9. --- (Windows/ATE) New XTREE feature: Column-specific popup menus. As before, you define a popup (aka "right click") menu using the PopupMenu= option associated with a pseudo (zero) column. To define a column-specific popup menu, use the same syntax, but add the PopupMenu option to the definition of the corresponding real column. If there is a PopupMenu defined for the specific column, then it will replace the PopupMenu defined for all the columns, UNLESS the definition of the column-specific PopupMenu begins with a "+". In that case, the column-specific definition is APPENDED to the default PopupMenu definition for that column. For example, the following defines one popup menu to be used for all columns, plus two columns, each of which has its own PopupMenu. The first one appends to the shared PopupMenu, while the second one replaces it entirely: ! Shared (default) popup menu (for all columns) COLDEF = "0~0~x~H~PopupMenu=" & + "Shared Menu Item 1,VK_xF501;Shared Menu Item 2,VK_xF502~~" ! This column appends its own popup menu to shared one above COLDEF = COLDEF + "1~10~State~S~PopupMenu=+" & + "-------,;State Menu Item 1,VK_xF510~~" ! This column has its own popup menu, replacing shared one above COLDEF = COLDEF + "1~10~City~S~PopupMenu=" & + "City Menu Item 1,VK_xF520;City Menu Item 2,VK_xF521~~" See the XTRA2 sample program which defines custom menus for the State and Country columns. Note that when adding COLDEF options to existing programs, you may need to increase the size of your COLDEF string. (You can get weird results if you don't.) This update also raises the maximum limits for the length of a PopupMenu definition from 256 to about 3000, and of the entire COLDEF parameter from 1536 to about 3000. 10. --- (Windows/ATE) XTREE enhancement: Rows with distinctive special foreground colors may now retain their distinctiveness even when the row is selected, by adding the COLDEF column type modifier "!" to the "C" or "c". (Normally, the text in selected rows appears white, making it impossible to tell if the row originally had a custom color or not.) If the custom FG color appears "too close" to the BG color of the selection bar (generally blue), then XTREE will display the text of the selected item in black, which should contrast with the selection bar while still making it clear that the row had a different color than the standard rows. Note that it there is not an exact science for determining how close is "too close", so you may sometimes end up with row foreground colors that do not have a lot of contrast against the selection bar. (To make rows stand out, you might want to instead use the new row background color feature, described below.) 11. --- (Windows/ATE) New XTREE feature: Custom background row colors. (Previously you could only set the foreground color of a row, and you could only set it to one of the A-Shell palette colors.) To allow this, the RGBbg option in the advanced COLDEF syntax now supports an optional 4th argument (idx) which may be set to an upper case character from A-P, e.g.: RGBbg=220,199,239,A Since RGBbg is otherwise used to set the background color for a column, if you just want to use it to define a row background color, use the RGBbg parameter with a "zero" column, i.e.: COLDEF = COLDEF + "0~0~x~H~RGBbg=220,201,244,E~~" The above defines a background color made up of RGB values 220,201,244 and assigns it to the index "E", but doesn't apply it to any column. To reference the defined color, create a column using the new column code "b", i.e.: COLDEF = COLDEF + "6~1~ColorBG~bH~~" The above defines a column one character wide that will be hidden (H) and thus the title will not show, but the column will be used to contain a reference to a defined RGBbg value (b). Finally, if the column contains a character in the range of A-P, it will be used to locate the associated background color definition which will be applied to the entire row. (If you prefer to use numeric digits in the color column data to reference the predefined RGB color, digits 0-9 will be interpreted as equivalent to letters A-J.) You can also add the 4th argument to RGBfg definitions, if you want to reuse that color for a row background color. The sample program XTRA2 was modified to give the top level rows each a different background color. 12. --- (Windows/ATE) New XTREE feature: ability to give individual cells custom background colors. The concept is similar to the row color described above, except: - The column code is B instead of b - The column may also contain other data following the color idx character (which must be the first character in the column). - You won't want to use the H code to hide the column. (That would defeat the purpose.) For example, consider the following column definition: COLDEF = COLDEF + "25~10~Price~#~~" This defines a numeric column 10 characters wide and with the title "Price". If you wanted to be able to highlight certain cells in this column (perhaps to indicate a sale price), you could change the definition as follows: COLDEF = COLDEF + "25~11~Price~#B~~" Then, as we have expanded the column by one, you would need to insert an extra character at the start of each item for that column. For normal cells, the extra character would be blank. But for cells you wanted to have a special background color, you would insert the color index character (A-P) at the start of the column (and make sure that the color was defined with an RGBbg (or RGBfg) clause, either for this column or for any other column.) 13. --- (Windows/ATE) Bug fixes: - Wallpaper was leaving a one-pixel high transparent strip just under the menu bar which allowed the desktop to bleed through. - ALT+key was generating a beep even when the accelerator character was recognized by A-Shell. Now it only beeps if unrecognized by A-Shell and Windows. - CMD/DO file silent mode (:S) was being cleared after most commands. - AUTOTPRINT no longer acts on output strings starting with ESC. (This was causing all ZTERM ESC sequences to fail when AUTOTPRINT on.) 14. --- (Windows/ATE) Minor wallpaper enhancements: non-destructive save/restore and auto-save on load. Normally, the wallpaper save and restore operations are destructive in the sense that "save" clears the current wallpaper, and an attempt to restore when there is no saved wallpaper will effectively delete the current wallpaper. To accommodate applications that want to be able to issue redundant save and restore operations, you can now add 4 to the OP parameter in the TAB(-10,39) statement, i.e.: Load wallpaper: ? TAB(-10,39);SPEC$;",0";chr(127); Delete current wallpaper: ? TAB(-10,39);",0";chr(127); Save (and then clear) wallpaper: ? TAB(-10,39);",1";chr(127); Save (but don't clear) wallpaper: ? TAB(-10,39);",5";chr(127); Restore wallpaper; clear saved copy from memory: ? TAB(-10,39);",2";chr(127); Restore wallpaper only if there is saved wallpaper: ? TAB(-10,39);",6";chr(127); The "load" command now also automatically "saves" a copy if there is not already a saved copy. Thus you could can now do a load followed by a restore without a save. Buried somewhere in the motivation for this is the fact that restoring a previously saved wallpaper is much faster than re-loading it from disk. 15. --- (Windows) COMIO.SBR enhancements: - COM ports beyond COM9 are now supported - Read/write errors now logged to ashlog.log - Two new optional parameters added (MSG and TIMEOUT): XCALL COMIO, OPCODE, CH, BUFFER, STATUS, COUNT {,MSG {,TIMEOUT}} MSG (string) returns the text of the Windows error message if an error occurs. (The text will be truncated to fit, but for best results map MSG of 80+ characters). If no error, then MSG will be "". TIMEOUT (numeric) may be used to set a timeout for the read and write operations. This is particularly useful when reading with the option to read until CR or LF, since if the data ends without sending a CR or LF, you could be stuck waiting forever. If timeout occurs, the MSG parameter will be set to "TIME". The STATUS and COUNT parameters may or may not indicate an error, so when using the TIMEOUT option, you should always check the MSG paramter for "TIME". 16. --- (Windows/ATE) IMAGE.SBR / AUI_IMAGE enhancements: - Opcode 5 (get image info) now supports an option to read the info from the image file on disk. (Previously you had to open it first). xcall IMAGE, 5, HANDLE, STATUS, IMGINFO {,FILESPEC} FILESPEC is used if HANDLE is zero. - XCALL AUI, AUI_IMAGE now supports opcode 5: xcall AUI, AUI_IMAGE, 5, HANDLE, STATUS, IMGINFO {,FILESPEC} ============================================================================ A-Shell Development Notes Version 4.9.954.0 (08 April 2006) ============================================================================ 1. --- Implement new API for copying/moving files via MIAMEX,MX_COPYFILE (27) : Old syntax (copy from open input channel to open output channel) xcall MIAMEX,27,CHIN,CHOUT New (optional) syntax: xcall MIAMEX,27,SRC$,DST${,FLAGS{,STATUS}} where: SRC$ and DST$ are file specifications (AMOS or native) FLAGS (default 0) may specify the following options: &h0001 (CPYF_MOVE) - Move file instead of Copy file &h0002 (CPYF_REPL) - Allow replacement of existing destination STATUS returns status: 0 = success -1 = destinations exists and CPYF_REPL flag not specified -2 = source doesn't exist -3 = invalid parameter types else STATUS returns a system error code. For UNIX, this will be the return code from the mv or cp utility. For Windows, it will be a Windows system error code (translatable by MIAMEX,86). Some advantages of the new method: - Move option is much more efficient than copy, provided source and destination are on the same volume or filesystem. If not, then the move is simulated by a Copy followed by a Delete of the source. - The new Move preserves the file creation and file modification times. - The new Copy preserves the file modification time (but updates the file creation time because it is creating a new file). In contrast, with the old syntax, both the creation time and modification time are updated. - Simplifies the logic for protecting against accidental overwrite, as well as for detecting common errors in the operation. (With the old method, in addition to needing the separate file opens and closes, you would have needed to also use lookup operations to check for the most common considerations of source-doesn't-exist or dest-already-exists.) Note that under UNIX, the operation invokes the mv or cp utilities, which must be available in the PATH. 2. --- XTREE no longer requires that the multilevel indicator column (type @) be the first column defined. (This is mainly useful as a workaround to an unresolved bug which sometimes causes the first defined column to be visible even when the column type is set to H for hide.) 3. --- LOOKUP.LIT 1.0(102) now supports quoted native filespecs up to 160 characters long. Previously, quoted specs did not work, the limit was 50 characters, and certain unquoted native specs would not work either. ============================================================================ A-Shell Development Notes Version 4.9.953.3 (04 April 2006) ============================================================================ 1. --- (XTEXT) More fixes/enhancements: - TXF_EOT flag was sometimes causing the modified flag to be set even if you didn't enter any text. - Reedit and save modes (opcodes 2 and 5) were not working properly in ATE. - New flag TXF_NODLGCREEP (&h40000000) causes the popup coordinates (i.e., when TXF_POPUP also set) to work relative to the main window rather than relative to the parent window. (Same concept as MBF_DLGNOCREEP with other dialogs.) - Fix a display refresh problem causing background windows to bleed through the XTEXT control when txc'tflag2 was not zero. - Reinstate/adjust meaning of txc'flagmask. The default value is now 0, which means that any bits set in any of the txc'flags# fields are added to the current (or default) settings. This is the most likely and most convenient way to adjust settings, since the defaults are both sensible and difficult to understand. If you set the low word bits, then the corresponding txc'flags# value replaces all of the existing flags. (Thus, if you set txc'flags1 to &h0020 and txc'flagmask to &h0001, then all of the internal default flags corresponding to txc'flags1 will be cleared except for the &h0020 bit. This could have unexpected side effects because some of the default flags that got turned off may have been useful.) The bits in the upper word of txc'flagmask, if set, cause the bits in the corresponding txc'flags# fields to clear the associated flags. This would only be useful if you wanted to disable one of the default flags (which would require that you first figured out what they were!) 2. --- (UNIX/ATE) Fix a conflict between SWAPKEY=~ and ATE responses. 3. --- (WINDOWS) Remove spurious "firing too rapidly" and "key not held" warning messages in the ashlog (unless the GUI or ATE trace flags set). ============================================================================ A-Shell Development Notes Version 4.9.953.2 (03 April 2006) ============================================================================ 1. --- (XTEXT) Several more minor fixes/enhancements. txc'flagmask no longer used. txc'flag# fields now operational (all flags turned off unless corresponding bit set). txc'flag1 &h02000000 now makes page breaks visible when read-only mode on. txc'parentid can now be set to 0 to make XTEXT be a direct child of the main window rather than a dialog. SROW,SCOL,EROW and ECOL can now be set to negative to specify coordinates in pixels (mainly of interest with TXF_POPUP mode). TXF_CTRLC flag changed to TXC_NOCLICKOUT (ignores click strings generating exitcodes below -49. Toolbar help icon now equivalent to F1; open icon equivalent to F2; search icon equivalent to F5 (all may be trapped using txc'fmapapp). Protecting all text no longer sets modified flag. ASHINC:ASHELL.DEF updated to change TXF_CTRLC to TXF_NOCLICKOUT. XTX1 sample program updated to set the &h02000000 txf'flag2; to demonstrate using absolute pixel coordinates when TXF_POPUP mode selected, and to save/restore all the XTEXT parameter settings to that you don't have to re-modify them each time you run the program. 2. --- (UNIX) UMASK command in MIAME.INI now supports optional second parameter to set umask for directory creation: UMASK=filemask{,dirmask} example: UMASK=011,002 Remember that the bits in the UMASK cause the corresponding bits in the file or directory permissions to be cleared, so 002 corresponds to drwxrwxr-x. ============================================================================ A-Shell Development Notes Version 4.9.953.1 (29 March 2006) ============================================================================ 2. --- (Windows) The Settings|Misc Settings dialog option to Force edit box height to match combobox was also forcing XTEXT controls to be the same height (i.e. 1 row high, very difficult to use.) 3. --- (Windows) A new printer init command makes it possible to automatically respond to a predictable dialog displayed by some pseudo printer drivers like PDF writers. Typically these will default to the same name as the source file, but with a PDF extension, and wait for the user to hit the SAVE button (or possibly to change the directory or filename first.) If you would rather just accept the default and not have to respond to such dialogs, you can add the following to your printer init file: AUTODLGOK={class,}<dialog title> {class} is an optional Window class for the dialog (which you may be able to get from a Spy utility). If omitted, then the dialog will be recognized solely by its title. <dialog-title> is the string appearing in the title bar of the dialog. For example, for the popular PDF995 driver, you could use: AUTODLGOK=Pdf995 Save As In this case, after A-Shell sends the file to the printer, it waits a few seconds to see if a dialog pops up with the specified title. If so, it sends an ENTER keystroke to it to just accept the default and proceed. Note that in most cases, the default directory will be set to match the directory used for the previous Save As operation by that driver. So before creating a thousand PDF files this way, you may want to first use the regular interactive method to establish the default directory. 4. --- (ATE) A problem with the newly introduced feature allowing binary files to be transferred via an aux print operation preceded by TAB(-10,54) (or ATEAPX.SBX) was resolved. Also, one cause of a several second delay when terminating an ATE session before the client recognized the termination was fixed. 5. --- (Windows) Fix a newly introduced problem in the installation program in which it would get an error trying to write the miame.ini before the directory had been created. ============================================================================ A-Shell Development Notes Version 4.9.953 (23 March 2006) ============================================================================ 1. --- (ATE) A new TAB(-10,x) command allows the host to enhance the functionality of a subsequent auxiliary port print operation: PRINT TAB(-10,54);File$;",";Ptr$;",";Fsize;chr(127); Where File$ is an optional filename to use for the print operation on the client side. This is handled automatically by the AUXLOC: driver so is only of use when you are going to use TAB(-1,82) directly to output text to the aux port (rather than indirectly via spooling to the AUXLOC: driver). Ptr$ is an optional printer name, which temporarily overrides the printer choice in the ATE connection properties. This allows the application to have some control over the way ATE prints, which is sometimes useful since otherwise the ATE user must manually change the printer choice in synchronicity with the needs of the application. One example of this would be if the app wanted to export a report to PDF, and it "knew" that all ATE clients had a PDF printer whose name started with "PDF": PRINT TAB(-10,54)",PDF";chr(127); XCALL SPOOL,FILE$,"AUXLOC" Assuming that there is a printer init file on the server called "AUXLOC" that contained DEVICE=AUXLOC:, this would transfer the file to the PC, and send it to the "PDF" printer regardless of (and without changing) the current printer setting for the ATE connection. We don't need to specify the filename above in the TAB(-10,54) statement because the AUXLOC: driver handles that automatically (but we do need the comma so that PDF is properly recognized as the Ptr$ parameter). Another example would be to use the DISK: pseudo-printer to simulate an FTP transfer: PRINT TAB(-10,54);",DISK:%ATECACHEDIR%";chr(127); XCALL SPOOL,FILE$,"AUXLOC" This would transfer FILE$ from the server to the ATE client %ATECACHEDIR% directory, which might be handy if FTP was not available on the server. NOTE that the technique would only be appropriate for ASCII files. To accomplish the same thing with files containing binary data, specify the file size in the Fsize parameter. (This activates binary mode.) Better yet, use the new ATEAPX.SBX (located in [907,33]) which encapsulates the necessary logic for binary or ascii file transfers from the server to the host without using FTP. 2. --- Fix a recently introduced problem in which the MIAMEFILE and MIAME environment variables could become corrupted after use of XCALL MIAMEX,MX_GETENV. At the same time, allow for completely independent MIAME and MIAMEFILE definitions. (Previously it was always assume that MIAME was the directory component of MIAMEFILE. Although that is usually the case, it is possible that MIAME could be predefined to point to one directory, and then A-Shell is launched with a -i specification from another directory.) 3. --- (ATE/Windows) XTEXT improvements: - TXF_POPUP mode now displays the "X" button in the upper right corner of the title bar. Clicking it acts exactly like hitting ESCAPE (i.e. finishes the editing session, but not necessarily closes the control, depending on the TXF_MODELESS flag). - Toolbar icons can now be turned back on again after having been hidden. Previously, you could hide an icon that was visible, but you would have had to close and reopen the session to make visible an icon that was hidden in the first instance of the control. - Clicking on the Printer icon on the toolbar now acts just like F4, meaning that if TXC'FMAPAPP contains &h0008 (the bit for F4), and the TXF_FKEYS flag is set, the control will exit with EXITCODE -4 instead of bringing up the internal printer dialog. (This is sort of preliminary and may be extended to other toolbar icons once it becomes more clear how to handle those that aren't normally equivalent to an F key.) - Under ATE when the source is a file, the first line of the file is examined to see whether the terminator is LF or CRLF, so that the appropriate file transfer mode is used (ASCII or BINARY). On the way back (if the destination is a file), it bases the decision on whether the CRNL flag is set. (If so, it uses binary so that the CRLF terminators are preserved; otherwise it uses ASCII so that they are converted to LF terminators.) - Control +/- keys now increase/decrease the font size by 10%. (This is quicker than using the toolbar zoom dropdown.) 4. --- In ISAM 1.0, when XCALL ASFLAG,32 is used to turn off all locking of the IDX file, if an error other than key-not-found (erf 33) occurs, A-Shell now retries the operation after doing a normal index lock. The theory here is that it may make it safer to use the no-lock mode in certain read-only situations (mainly in a peer-to-peer LAN environment) where normal locking has a high overhead and speed is the main consideration. 5. --- (UNIX) Text version of MSGBOX.SBR now gets button text from LDF. 6. --- Release now includes ZTXFER.LIT 1.0(102) (a reasonable simulation of the eponymous ZTERM/AMOS utility). (Works with both ZTERM and ATE.) Type ZTXFER with no args for syntax message. ============================================================================ A-Shell Development Notes Version 4.9.952.4 (20 March 2006) ============================================================================ 1. --- (ATE) Eliminate disconnect warning message box if disconnect occurs within 15 seconds of a keyboard operation. (Warning was only meant for cases where a host-initiated disconnect occurs when user not attending to session.) Also, fix a problem in which the ATE window would appear to go dead after disconnecting. 2. --- (Windows) The printer init option DEVICE=DISK:{directory} now supports environment variables using the standard %ENVVAR% syntax. For example: DEVICE=DISK:%ATECACHEDIR% This would copy the print file to the ATE Cache directory rather than print it. 4. --- (Windows/ATE) SHIFT-DEL and SHIFT-INS are now distinguishable from DEL and INS and thus can be programmed accordingly with FIXTRN. ============================================================================ A-Shell Development Notes Version 4.9.952.3 (17 March 2006) ============================================================================ 1. --- (UNIX) The text version of MSGBOX.SBR now supports the SBRMSG.xxx language entries for the button labels. (The external MSGBOX.SBX previously supported these, but when we folded it back into an internal routine they were temporarily lost.) 2. --- INFLD no longer displays forms background characters (TYPE f) unless the field contains data characters up to that point. This eliminates the strange appearance of a blank field with, for example, just dashes for social security field format. 3. --- When printing to the ATE client using DEVICE=AUXLOC:, the filename is passed from the server to ATE so that ATE can use the real filename rather than a randomly generated one. (This probably only matters when using a pseudo-driver that generates an output file based on the name of the printed file, such as PDF995.) 4. --- (ATE) Fix a problem in which ATE would get stuck in a kbd lock after a PolyShell swap. (Note that PolyShell only works with non-GUI screens.) ============================================================================ A-Shell Development Notes Version 4.9.952.2 (16 March 2006) ============================================================================ 1. --- (ATE) Fix problem with first down-arrow key after certain ATE commands was discarded. 2. --- (Windows) Change the report document name (as passed to the Windows print service) from "A-Shell Report" to the name of the printfile (with device and extension removed). This is mainly of benefit when outputting to a pseudo printer driver (such as a PDF writer) than uses the report document name as the basis for the output file name. ============================================================================ A-Shell Development Notes Version 4.9.952.1 (14 March 2006) ============================================================================ 1. --- (Windows/ATE) Close loophole in which Settings|Reset cleared the disconnect/terminate password. Also, fix missing default title on the disconnect dialog. 2. --- (Windows/ATE) Fix spurious character sent to host on ^C abort from GUI INFLD. 3. --- (Windows/ATE) Clicking on an INFLD field now triggers the click string immediately (on the down-click instead of waiting for the up-click.) 4. --- (Windows/ATE) File|Save now saves AutoMouse setting /jdm 5. --- Improvements/cleanup in MIAMEX,MX_GETENV (31) function: - Previously it was not recognizing the environment variable MIAME unless it had been explicitly defined at the OS level outside of A-Shell. Now it is always recognized (as pointing to the directory where the ini file is). - Use of the % delimiters is now optional, i.e. "MIAME" and "%MIAME%" (as well as "miame" and "%miame%" are all equivalent. - Under Windows previously, if the variable was not defined, the return parameter may not have been updated or may have contained a message such as "retrieve environment variable", which could have caused some confusion in the application. Now it always returns a null result string if the environment variable is not defined. 6. --- ISAM-A updated to version 6.11i to fix a loophole which allowed a memory access fault to occur when traversing a badly corrupted index. Under Windows, this could have caused the A-Shell process to just disappear. Under UNIX, it would have caused a segmentation fault. ============================================================================ A-Shell Development Notes Version 4.9.952 (08 March 2006) ============================================================================ 1. --- (Windows/ATE) XTREE: Implement radio buttons. These are exactly like checkboxes except that when you select one of them (with the mouse or spacebar), the others on that row are automatically cleared. Use column type code R (instead of T) for an editable radio button, or r (instead of t) for a display-only radio button. As with checkboxes, you can also use the X code to cause an immediate exit for validation when changing a radio button. An example of where you might want to use this is in a survey form with multiple choice questions. The questions could occupy one column, with each of the multiple choice options (A,B,C,D,E) consisting of a separate column with a radio button in it. Note that the logic that forces only one radio button in a row to be set only takes place in response to user changes; it does not happen when loading data into the XTREE from the application. (In the example above, you might want to start with none of the buttons set.) 2. --- (Windows/ATE) XTREE: Improve the user interface and validation logic for editable checkboxes and radio buttons. Previously, when the focus was on a checkbox, a new checkbox was created which was slightly out of alignment with the original one. Now, the cell is highlighted by emphasizing its border, but the checkbox itself does not change. When the validation option (X) is set, previously the control would exit every time a checkbox lost focus. This was not only confusing but interfered with the updating of the checkbox which was clicked on, in some cases making it difficult to change the state of the checkbox. Now, checkbox validation occurs only when the value of the checkbox changes, and this always happens while a particular checkbox maintains the focus, so this eliminates the confusion of validating the checkbox that previously had the focus rather than the new one you just clicked on. Also, you can now use the TAB key to tab from the first (non-editable) cell to the first editable cell, provided that XTF_TAB is not set. Previously you had to use the right arrow, which was inconsistent since you couldn't use that key to advance beyond an editable text cell. 3. --- (ATS) The A-Shell/Windows Telnet Service (ATS) now sends keepalive probes to the client every 15 seconds, so that if the client disconnects surreptitiously, the server side of the connection will realize it and terminate the process. 4. --- (ATSD) ATSD.EXE 1.2.0 now checks the job table when a process is disconnected, to make sure that it cleaned up after itself, and if not, it takes out the cyber mop to tidy up. (This, combined with the keepalive, should eliminate nearly all of the cases where processes or job table entries were hanging around long past their welcome.) 5. --- (ATE) ATE is now somewhat better about detecting dropped connections from its side, and reports them rather than just closing the window (sometimes leaving you wondering what happened to the connection.) 6. --- (Windows/ATE) A new TAB command allows the application to establish a disconnect/terminate password, which the user must enter in order to disconnect (from ATE) or terminate (from a local A-Shell/Windows session). When established, this supercedes the big dialog/warning message that otherwise appears when you click on the "X". (And perhaps more importantly, it also gets triggered when the "Disconnect" menu option is clicked, which previously exited without any fanfare whatsoever.) Syntax: PRINT TAB(-10,53);PW$;chr(127); or PRINT TAB(-10,53);PW$;"~";MSG$;chr(127); or PRINT TAB(-10,53);PW$;"~";MSG$;"~";TITLE$;chr(127); PW$ is a string of up to 15 bytes. If null, the password feature is disabled and disconnect behavior reverts to the way it was before. MSG$ is a string of up to 248 bytes, which can be used to replace the standard message which otherwise appears on the password dialog: This is a potentially unsafe way to terminate or disconnect. Please use the normal procedure to log out of the application, or enter the disconnect password below: The MSG$ may include a CRLF to force a line break; otherwise it is wrapped to fit the space. Since the space is designed for about 200 (lower case) characters, if you have a lot less, you might want to use a leading CRLF just to vertically center it. TITLE$ is a string which replaces the default title ("ATE Disconnect" or "Terminate A-Shell Session?") of the dialog box that prompts for the password. If specified, then the combined total length of MSG$ and TITLE$ is limited to 248 characters. SUGGESTIONS AND NOTES: - If you want to enable this feature all the time, then just add the TAB command to your main menu or startup command file. - Since you can set the password any way you like, some people use a formula, perhaps based on the date, or on any information you can obtain programmatically about the environment, job, etc., so that it can be given out as needed without necessarily revealing the formula. - If want to allow the user to disconnect from certain "safe" places (like the main menu), then you can clear the password. - The password is not encrypted, because no matter how secretive we make it, there is no way to stop the user from forcefully disconnecting by such brutal methods as rebooting, pulling the ethernet cable, powering down, etc. So this is at best a merely a way to discourage sloppiness rather than a way to prevent it entirely. 7. --- (Windows/ATE) XTREE: XTR'SKEY (preselect item(s) by searching for matching text in the column defined by XTR'COLUMNACTIVE) now works for multi-select as well as single-select XTREE. 8. --- (Windows/ATE) XTREE: A new feature which allows the display order of the columns (from left to right) to be different from the "real" order (as defined on COLDEF). Previously, the user could reorder the columns while XTREE was active (provided that the XTF_REORD flag was set), but there was no way for the application to remember the reordering, and thus users could not maintain their own preferred column ordering. The new feature returns the order of the columns in a new field in XTRCTL, which is can be saved by the application and used on subsequent calls to XTREE to maintain the user's preferred column ordering. To support the new field, the XTRCTL structure has been increased in size from 64 to 128 bytes, with the new fields as follows: ... MAP2 NEXTROW,B,4 ! (preexisting) MAP2 DELCTLID,B,4 ! (preexisting) MAP2 USECOLORDER,B,1 ! (new) 1=load/save column order from COLORDER() MAP2 COLORDER(31),B,1 ! (new) real col # to display in position (x) MAP2 UNUSED,X,36 ! (new) for expansion XTREE.MAP has been updated as shown above, but if you are using your own mapping, you'll need to update it if you want to use the new features. (There is no harm if you don't update the map, but the new features won't be available.) USECOLORDER must be set to 1 to activate the new feature. When USECOLORDER is set, on return from XTREE, the display column order will be stored into the COLORDER() array. COLORDER(1) specifies the "real" column which is now displayed in the first position; COLORDER(2) specifies the "real" column now displayed in the second position, etc. The array can keep track of the order of up to 31 display columns. If you have more than 31 columns, the user will still be able to maintain their ordering preference for the first 31 display columns; the remaining columns will always be displayed based on the order they appear in COLDEF. When XTREE is called, COLORDER() contains non-zero values, these will determine the new display order. (Unless you manually change them, the result will be that the new display order matches the order of the previous call to XTREE, which is probably exactly what you want, unless the previous call to XTREE was for a different logical tree but shared the same XTRCTL map, in which case you want to either set USECOLORDER=0 or clear out the COLORDER() array when switching logical tree structures. The simplest way to use this feature is just to set USECOLORDER=1, in which case the user's column order will be maintained across consecutive calls to XTREE, but not beyond that. If you want to maintain the user's order between application sessions, then you'll need to save the COLORDER() array somewhere and restore it as required. Note that if you are manually using COLORDER() to set a column order, you don't have to specify all the columns. For example, if there were 10 columns defined, you could determine which of the 10 displayed in the first three positions as follows: COLORDER(1) = 5 ! real column #5 will be displayed first COLORDER(2) = 8 ! real column #8 will be displayed second COLORDER(3) = 2 ! real column #2 will be displayed third COLORDER(4) = 0 ! remaining columns will retain their natural ! order, i.e. 1,3,4,6,7,9,10 (The first zero in the COLORDER() array effectively terminates the forced part of the ordering, with the remaining columns using "natural" ordering.) NOTES: - Unless you set the XTF_REORD bit in the FLAGS parameter, the user will not be able to reorder the columns by drag-and-drop, but that wouldn't stop the application from using USECOLORDER and COLORDER() to override the natural (or "real") column ordering. - Changing the display order of the columns does not affect the way columns are numbered in any of the other parameters (such as XTR'COLUMNSORT(), XTR'COLUMNACTIVE, etc.) In other words, the application doesn't need to be "aware" of how the columns are ordered. 9. --- You can now lock users out of A-Shell by creating a file ashell.lok (with a particular structure described below) in the directory where the miame.ini is. The plan is to create an SBX that will create this file for you (as well as force existing users out), but until that happens, you can still use this capability by manually creating the file as follows: Line 1: <# of seconds to wait before exiting, or 0 for unlimited> Lines 2-N: <Any text that you want to display> An example will make this more clear: 0 A-Shell is currently locked for maintenance by the Big Kahuna (starting at 5:30 PM and expected to last until 6 PM). You can wait here, or hit ESC at any time to exit and try again later. In the above example, the 0 on the first line indicates that A-Shell will wait indefinitely (until the user hits ESC, in which case it exits, or until the ashell.lok file is removed, in which case it proceeds as normal). If the 0 had been, say, 10, then the message would appear for 10 seconds but then A-Shell would exit. While waiting, the process had not been assigned a job, but it is using the ashell (or ashw32.exe) executable, and has the jobtbl and qflock files open, so if your maintenance requires exclusive access to those files, you may want to set the wait to just a few seconds (just long enough to see the message) so that you'll get an opportunity at exclusive access (even if it takes a few tries). On the other hand, if the maintenance does not require exclusive access to those files, you may want to allow the users to just wait indefinitely in this mode until you signal that it is ok to proceed by removing the ashell.lok file. Note that the message should indicate the ESC option (unless the wait time is set to just a few seconds), since it isn't otherwise obvious. (This scheme allows for the maximum in site/language customization.) To force the existing users to exit, you may be able to use KILL.LIT or FORCE.LIT, and SEND.LIT (to send a message), although this will soon be simplified via an SBX. Or, you could modify your application to check for the existence of the ashell.lok file periodically and handle its own graceful shutdown. ============================================================================ A-Shell Development Notes Version 4.9.951.2 (01 March 2006) ============================================================================ 1. --- (Windows/ATE) The INSERT key was not working in INFLD (to toggle between insert and overwrite modes). 2. --- (Windows/ATE) XTEXT fixes/enhancements: - TXC'WRAPWIDTH was not working. - TXC'SRCHKEY is now supported (for application-initiated searching) - TXC'SFLAGS (B,2) field added, for search options. The updated XTEXT.MAP file shortened the original TXC'SRCHKEY field from 32 to 30 bytes to make room for TXC'SFLAGS. - TXF_POSCUR flag added, to allow initial cursor position to be specified via the TXC'XCOL, TXC'XROW and/or TXC'XCUROFFSET parameters. The XTEXT document has been updated (available on microsabio.com) The XTX1.BP sample program (along with ashell.def and xtext.map) have been updated and are available from the a-shell.net "Latest" page. 3. --- (ATE) INFLD was locking up under ATE when a combo box had more than 512 characters. =========================================================================== A-Shell Development Notes Version 4.9.951.1 (28 February 2006) ============================================================================ 1. --- (WINDOWS/ATE) Fix several problems relating to XTEXT and ATE. Also update the sample program XTX1.BP to build 101 (can be downloaded separately from the a-shell.net "Latest" page). ============================================================================ A-Shell Development Notes Version 4.9.951 (27 February 2006) ============================================================================ 1. --- (WINDOWS/ATE) XTEXT.SBR introduced, to support a wider range of text-editing capabilities than the existing multi-line INFLD. XTEXT, as its name might suggest, is similar in design and parameter structure to XTREE, and like XTREE, is wrapped around a commercial control that is housed in TER13.DLL (which must be in the same directory as ASHW32.EXE). The documentation is currently available separately from microsabio.com. A sample program, XTX1, is included in the release and in the SOSLIB in [908,40]. 2. --- (WINDOWS/ATE) AUI_EVENTWAIT supports a new flag: EVW_EXCDINOUT (&h40000) which is similar to EVW_EXCDFOCUS but just causes any incoming EXITCODE value of -100 or less to be "passed through" (i.e. returned directly) to the application. This is useful (in conjunction with EVW_EXCDFOCUS) for responding to button clicks that occur while INFLD has the focus. For example, you might have a structure like this: do xcall AUI,AUI_EVENTWAIT,CTLID,PARENTID,EXITCODE,OPFLAGS if <exitcode to exit dialog> exit else call <field handler based on exitcode> loop With just EVW_EXCDFOCUS alone, if the use clicks on a button while INFLD has the focus (in the "field handler" above), the subsequent EVENTWAIT would put merely put the focus on the button without triggering it. (The first click would trigger an exit from the current INFLD, but it would take a second click on the button to invoke the "field handler" for the button, using the logic above.) With EVW_EXCDINOUT added to the OPFLAGS, the button click would cause the "field handler" to exit, as before, but now the EVENTWAIT would also exit, so that the new "field handler" for the button could be called. (This is not an issue when clicking on an INFLD field, because the combination of EVW_INFLD+EVW_EXCDFOCUS would cause any attempt to put the focus on an INFLD field to just exit from the EVENTWAIT so that INFLD could be called.) Note that one situation where you might not want EVW_EXCDINOUT is if you want to explicitly put the focus on a button by specifying its EXITCODE, without forcing the button to get clicked. 3. --- (WINDOWS/ATE) XTREE now supports three-state checkboxes. To specify, add column code "3" to the existing "t" (display only) or "T" (editable) check column code, and use the value "2" in the array to indicate the indeterminate state (instead of "0" for unchecked or "1" for checked.) 4. --- (ATE) Fix a bug in the ATE wrapper for XTREE which allowed memory after the XTRCTL parameter to be overwritten if the mapped XTRCTL was smaller than the internal defined structure size. ============================================================================ A-Shell Development Notes Version 4.9.950.4 (13 February 2006) ============================================================================ 1. --- INFLD now supports a new CMDFLG flag (8) which causes the field to be disabled. 2. --- Invalid printer init commands are now traced (if TRACE=LP) or logged. 3. --- Remove an excess tracing ATE tracing message ("return xxxxx") from ashlog. ============================================================================ A-Shell Development Notes Version 4.9.950.3 (03 February 2006) ============================================================================ 1. --- PUTBYT.SBR now supports channel 0 to output to the terminal device. This can be useful (mainly under UNIX) if you need to output raw binary data to the terminal and want to be sure there is no filtering and don't want it to corrupt the screen map. Otherwise, typically you get TAB expansion (unless OPTIONS=RAWTABS), and CR is always prepended to line LF chars. ============================================================================ A-Shell Development Notes Version 4.9.950.2 (01 February 2006) ============================================================================ 1. --- If running in CGI mode, don't bother querying the IP address (not worth the potential delay). ============================================================================ A-Shell Development Notes Version 4.9.950.1 (31 January 2006) ============================================================================ 1. --- MSGBOX.SBR is now implemented as an internal subroutine (effectively replacing MSGBOX.SBX). There should be no other change in the behavior. If, for some reason, you want to keep using the MSGBOX.SBX, then rename it to something else (e.g. MSGBXX.SBX) and then create an ALIAS: ALIAS=MSGBOX:MSGBXX That way, when your application does XCALL MSGBOX, the ALIAS will convert this to XCALL MSGBXX, which will find the SBX. ============================================================================ A-Shell Development Notes Version 4.9.950 (29 January 2006) ============================================================================ 1. --- GET.SBR now disables Control-C when in raw mode (see item 6 for edit 949). 2. --- (ATE) ATE sessions may now share a node license (with server-based node licensing), provided that they have the same Ethernet hardware (MAC) address. 3. --- (Windows/ATE) INFLD no longer shifts a field to the left to make it fit within the current number of columns if operating in a dialog. (This was causing confusion in virtually all the cases where it happened, since no one is thinking in terms of maximum columns in a dialog. But it is still a good idea to use TAB(-6,cols) in the main window to establish the maximum column count before trying to use such columns in a dialog.) 4. --- (Windows/ATE) When creating a checkbox within an SBX, it doesn't make much sense to use the FUNC parameter (to XCALL AUI, AUI_CONTROL) to associate the checkbox with a binary variable, unless it will only be used within that SBX. (Otherwise, if the checkbox remains after returning from the SBX, it will be linked with a variable that no longer exists.) To avoid this problem, you can now specify a null string, e.g. "", in place of the FUNC argument in such a case. 5. --- Enhancement to SEND.SBR to allow sending a message to all other jobs. XCALL SEND, JOB, STRING {,OPTIONS {,STATUS}} If JOB is mapped as B,1 or B,2 (i.e., to specify the target via its job number), then you can set it to -1 to indicate all jobs. If JOB is mapped as a string (i.e. to specify the target via its job name), then you can set it to "ALL" to indicate all jobs. When sending to all jobs, the return value of STATUS takes on a new meaning. With one job, a return STATUS of 0 means success. But when sending to all jobs, STATUS returns the number of jobs sent to. ============================================================================ A-Shell Development Notes Version 4.9.949.3 (24 January 2006) ============================================================================ 1. --- (ATE) Additional minor adjustements to the ATE protocol to improve the interoperability between mismatched versions of ashell on the server and ATE on the client, particularly as it relates to the auto-update and auto-licensing feature. The goal is to allow you to put the latest version of ashell on the server, along with the latest ATE install package in the atesetup directory, and then be able to connect to it from older clients and perform the auto-update. ============================================================================ A-Shell Development Notes Version 4.9.949.2 (23 January 2006) ============================================================================ 1. --- (ATE) ATE now supports local licensing (tied to the MAC address of one of the ethernet interfaces on the local machine). 2. --- (ATE) Minor adjustment to server startup logic to avoid hanging older ATE clients. ============================================================================ A-Shell Development Notes Version 4.9.949.1 (20 January 2006) ============================================================================ 1. --- (AIX) Fix bug in GETVER.SBR handling of special program header flags on big-endian systems. 2. --- (ATE) Minor improvement in auto-update logic over slow connections. ============================================================================ A-Shell Development Notes Version 4.9.949 (20 January 2006) ============================================================================ 1. (ATE) Implement "node" licensing model for ATE. This model permits licensing of a block of ATE nodes independent of the number of A-Shell licenses. Requires LICENS.LIT 2.2(114)+ and ABOUT.LIT 2.2(104)+. 2. --- (ATE) A-Shell now automatically attempt to issue license to ATE client on startup if client does not have a license and server either has the ATS/ATE license flags (i.e. is licensed for unlimited ATE clients) or has a "node" license. 3. --- The STOP command in Basic was sometimes causing a segmentation fault. 4. --- (ATE) XCALL AUI,AUI_ENVIRONMENT,0,FLAGS{,ATEVER$} now returns ATE version if fourth parameter specified and client is ATE. 5. --- (Windows) XCALL MIAMEX,MX_AMOUSEXLT,OP,... now supports 3 new opcodes related to disabling/enabling the AutoMouse doubleclick feature: 4) disable intelligent doubleclick 5) restore doubleclick to state it was prior to last OP 4 or 6. 6) enable intelligent doubleclick This is primarily of interest for eliminating the situation in which doubleclicking on an empty part of a form sends a CR, which is treated the same as clicking on the currently focused button. 6. --- New parameter added to XCALL GET to facilitate raw input: xcall GET, buffer {,chan {,bytes'req {,bytes'rcvd {,timeout {,flags}}}}} Setting flags to a non-zero value activates 'raw' mode input, which eliminates all input processing and filtering (such as function key support, terminal driver input translations, and the ability to input null bytes). Otherwise, null bytes are stripped out of the input stream before your application gets a chance to see them. Note the following restrictions: A. Under UNIX, setting flags=1 and bytes'req=0 (in order to check if any chars are available without inputting anything) will properly return bytes'rcvd=1 if anything is available to input, but if the first byte available is a null, it will be lost. (So it is best to just set bytes'req to the number of bytes you want, and use timeout to avoid getting stuck in an input wait.) B. Under Windows, input processing occurs asynchronously as characters arrive, not as they are requested by the application. So the raw flag will only be useful if the XCALL GET occurs before the characters in question arrive. 7. --- (ATE) Host-initiated FTP transfers can now be made silent by using direction codes A-D in place of the normal 0-3, i.e.: 0=host to PC, binary, with msg/dialog 1=PC to host, binary, with msg/dialog 2=host to PC, ascii, with msg/dialog 3=PC to host, ascii, with msg/dialog A=host to PC, binary, silent B=PC to host, binary, silent C=host to PC, ascii, silent D=PC to host, ascii, silent This applies both to TAB(-10,22) and to the ZTERM-style ESC sequence: ? TAB(-10,22);DIRECTION$;HOSTPATH$;"~";LOCALPATH$;chr(127); or ? chr(27);chr(1);chr(127);DIRECTION$;HOSTDIR$;chr(0); & HOSTFILE$;chr(0);LOCALPATH$;chr(0); HOWEVER: codes A-D are not ZTERM-compatible, so should only be used when you know the client is ATE. Note that with ATE, the msg/dialog is hardly noticeable (unlike with ZTERM, where it looks just like the standard interactive FTP dialog), so the silent feature isn't that much of an improvement. Still, some people prefer to have their file transfers be invisible to the user. 8. --- (Windows) GETMAC.SBR updated to be more reliable across a wider range of Windows platforms. 9. --- SYSTAT.LIT 3.0(155) supports a /E switch which displays the client MAC address if known. (In practice, this will only be known when the client is ATE.) This could be useful for distinguishing between clients that share an IP address due to some kind of proxy server, and those that are really from the same PC. 10. --- (ATE) Correct client IP address is now registered on server (as shown in SYSTAT/I), including when using the SSH tunnel and other kinds of proxies. 11. --- (ATE) The standard setup file naming convention has been changed slightly, to eliminate the ATE version number and just use the A-Shell version number, e.g. instead of ate-3.0.170-949.exe, we will now use ate-4.9.949.exe. Although ATE is technically a standalone module of which ASHW32 is just one part, and thus may deserve its own version number, in 99% of the cases, it is being used hand-in-hand with A-Shell and thus the only version number that seems to matter to anyone is the ASHW32 version number. This will also simplify the server-based ATE updating system (see next item). 12. --- (ATE) A server-based auto-updating system is now available for keeping ATE clients updated. As a background, one problem with intelligent clients such as ATE is that they are typically installed independently on multiple clients, thus creating a logistical challenge to keep them updated. Many commercial programs are moving to an Internet-based model for doing this, whereby the client queries the developer's website each time it executes to see if there are any updates, and if so, offers to download and install it. Although we considered this model, there are two problems which seem to make it less than ideal for our circumstances: A) not all clients have Internet access, or if they do, it may be blocked by their VPN software. B) It may or may not be appropriate for the end-user to update to the latest ATE level. That decision should be left to the dealer to make, and it should be made relative to the software level running on the application server. (In general you want the client version to match the server version, although in some cases it might be desirable to update the client or the server to a higher level than the counterpart.) Since much depends on the level of the software on the application server (both A-Shell and the application itself), and since updating the server is much more difficult to automate (due to the need to coordinate with many users at once), we decided that the best way to manage the client update process is for the dealer or site administrator to place the desired version of ATE in a special place on the server, from which the clients can be updated on an as-needed or as-wanted basis. This eliminates the connectivity issue (since the client must necessarily have connectivity to the application server) and it allows for site-based control of the update process. Here's how it works: A. Create a directory atesetup underneath the directory where the miame.ini resides (e.g. /vm/miame/atesetup). B. If you want to make an ATE update available to the clients connected to this server, put the ATE setup executable file in that directory. It should be named as follows: ate-a.b.c{.d{-optional stuff}}.exe where a,b,c and d are the major, minor, edit and patch levels. Examples: ate-4.9.949.exe ate-4.9.949.1.exe ate-4.9.949.1-madics-1.2.3.4.exe In the last example above, everything after the second dash (-madics...) is ignored. You can have multiple files in the directory, as it will locate the one with the highest version number. C. Optionally, you can also put a message file in the directory, which will be displayed in a message box that presents the user with a YES/NO option of whether to update. The file must be named ate.txt and can contain up to 1024 characters, on one or more lines. For example: A new version of your client connection software is available, and your dealer, ACME TECHNO, recommends that you update. The process will only take a minute, during which your client window will close and you will be prompted thru the installation program. At the end, you will be able to just launch the connection again. If you have a problem during the update, call us at 800-555-1212. Do you want to proceed? If you do not supply your own ate.txt file, a generic message will be displayed asking the user if they want to update. D. When a new ATE session is launched, the server queries the ATE client to get its version, and then checks the atesetup directory to see if there is an update later than that version. If not, is just proceeds normally. If so, it prompts the user to update, and if the user agrees, it proceeds to FTP the setup file from the server to the client (ATECACHEDIR), close down the client, and launch the setup program. There are probably a number of refinements that will be needed or desired in this process, so dealers are encouraged to start experimenting with it. A simple way to experiment is to first install the 4.9.949 ATE update, then copy that setup module (or any later one) to the atesetup directory. Even though the version of the server may be the same as on the client, you can fool it by just naming the file accordingly (i.e. call it ate-4.9.949.1.exe even though it is really 4.9.949.0). The three most likely things that can go wrong are: A) a problem with the FTP transfer (bad login, firewall, etc.); B) the ATECACHEDIR is invalid (see the Misc tab on the connection properties); C) there are other instances of ATE or ASHW32 running on the client, preventing the installation from completing. We want to implement hooks or standard dialogs or other strategies for helping the users deal with these issues. But in any case, a failed update should be no worse than no update, and thus the user is unlikely to be left worse off than before. ============================================================================ A-Shell Development Notes Version 4.9.948 (05 January 2005) ============================================================================ 1. --- Random files are no longer limited to 2GB in either the WIN32 version (not the "C" version), and the UNIX/LINUX versions. The new limit is too large to worry about. Note, however, that sequential files (as well as old ISAM files) remain limited to 2GB. Also BASORT remains limited to 2GB. (You can, however, use the external "optech" sort routine, which is much faster anyway - contact us for details if you have large files to sort, or complex sorting requirements not handled by BASORT.) 2. --- ISAM-A (formerly known as ISAMPLUS) updated to version 6.11h across all platforms, supporting all of the features recently introduced in A-Shell/Windows: - Removal of 2GB limit (new limit is 2 billion records) - Push / Pop position in index - Compressed keys - Compressed (variable length) data - Transactions 3. --- ISMUTL.LIT 1.4(131) eliminates the 2GB limit on the dump/load file, and also adds improved lifesigns (for long dumps/loads). NOTE that this version requires A-Shell edit 948 or higher. 4. --- Implement a runtime option to allow random files to grow record by record (sort of like sequential files, or like ISAM-A files). The motivation for this was initially just to get around the 2GB limit on sequential files for ISMUTL dump/load operations, but it may be useful in a variety of situations. Notes: - Enable the mode by setting bit GOP_EXTFIO (&h02) in the first bank of options and GOP2_AUTOX_RAN (&h01000000) in the second bank, using MIAMEX,MX_GETOPTIONS and MIAMEX,MX_SETOPTIONS: xcall MIAMEX,MX_GETOPTIONS,OPTIONS1,OPTIONS2 OPTIONS1 = OPTIONS1 or GOP_EXTFIO OPTIONS2 = OPTIONS2 or GOP2_AUTOX_RAN xcall MIAMEX,MX_SETOPTIONS,OPTIONS1,OPTIONS2 Once set, the mode is available to all random files. (You can also set EXTFIO using SET EXTFIO or OPTIONS=EXTFIO.) - Since files grow record by record, you must use span'blocks mode to open the file, i.e.: OPEN #1, FNAME$, RANDOM, RECSIZE, RECVAR, span'blocks - To create the initial file, you can use CREATE.LIT or ALLOCATE (to create a 1 block file) or MAKE.LIT to create a 0 block file. Or you can open the file for sequential output, then close it (also creating a 0 block file). - To write to the file, use the normal random file WRITE statements. If you attempt to write past the current end of the file, the file will be extended as needed (on a record by record basis). - To read from the file, use the normal random file READ statements. If you attempt to read past the end of the file, you will get the normal illegal record error (#31). - To determine exactly how many records are in the file, use XCALL SIZE,FILE,BYTES and divide the size in bytes by the record size. (Using LOOKUP may be misleading since it returns the size as an integer number of blocks, although the actual size may not be an even multiple of 512 bytes.) - Since fundamentally (from the OS point of view) there is no difference between our "random" and "sequential" files, there is nothing preventing you from later accessing the file as a sequential file. However, you cannot change from random to sequential access without closing and reopening the file. - See the test program AUTOX.BP in [908,39] for an example. 5. --- (Windows) Disk full and record not locked errors were incorrectly being reported as device errors. Fixed. 6. --- (Windows/ATE) Host initiated FTP transfers (using the ZTERM ESCAPE sequence or TAB(-10,22)) now use SFTP mode if so selected in the ATE profile. (SFTP is a secure form of FTP that uses the SSH service to encrypt the transfer. 7. --- (Windows) XCALL MIAMEX,156,INSTNUM returns your "instance number". This is the count of how many A-Shell/Windows sessions are running on your PC. 8. --- (Windows) XCALL MIAMEX,157,HANDLE,TITLE{,CLASS} may be used to search for a windows with the specified window TITLE and/or CLASS and/or HANDLE. TITLE is a string which can be loaded with the window title (as shown on the title bar) of the window to search for. CLASS is a string which can be loaded with the window class to search for. If both CLASS and TITLE are both non-blank, it will only locate a window matching both. HANDLE is numeric variable (B,4 or F) which returns the window handle if the window is found (or zero if not found). If both CLASS and TITLE are blank and HANDLE is non-zero, then it searches for the window by its window handle, returning the TITLE and CLASS. 9. --- (Windows) Fix bug in MIAMEX,99 (MX_REGISTRY) in which it was not zeroing out the returned numeric value if the item was not found. 10. --- (Windows/ATE) Static text and button controls now treat an "&" followed by a space as a literal character, rather than as the leadin to underline the accelerator character. (Otherwise, causes the following character to be underlined and treated as the accelerator character.) 11. --- (UNIX) SUBMIT/W was not waiting properly for submitted task when using SBR=SUBMIT2 switch in miame.ini. (Actually, it was always waiting 5 seconds.) ============================================================================ A-Shell Development Notes Version 4.9.947.7 (15 December 2005) ============================================================================ 1. --- Fix a problem in which certain kinds of disconnects would leave zombie processes running on the server using up a lot of CPU time. 2. --- (Windows) Fix a problem introduced in 947.5 causing the keyboard to be left in a locked state after certain operations. ============================================================================ A-Shell Development Notes Version 4.9.947.5 (13 December 2005) ============================================================================ 1. --- (Windows) ISAMPLUS files may now grow larger than 2GB. (There remains a limit of 2 Giga-records though.) There is no change in the format of the files, so there are no compatibility issues or need to dump/reload/convert. 2. --- ISMUTL.LIT 1.4(129) now supports an option to create compressed indexes. There are three types of compression which can be used individually or in combination: - Leading duplicate characters. Here, a single byte is used to represent the number of leading characters that have been duplicated from the prior key. This is beneficial when the average number of leading duplicate characters is greater than one. - Trailing blanks. A single byte is added to the key to represent the number of blanks on the end. This is beneficial when the average number of trailing blanks is greater than one. - Duplicate keys. This only makes sense when duplicate keys are allowed. A two byte duplicate key flag is used to replace duplicate keys. Combining all three gives you "maximum" compression. Compressed keys do add some processing overhead, but since file access is usually disk bound rather than CPU bound, the decrease in the size of the index generally more than makes up for any increase in CPU activity. They only make sense, though, with string keys, longer than about 6 bytes. To change the compression on a secondary index, you delete the key and then add it back, using the DELETE and ADD2ND options in ISMUTL. To change the compression on the primary index, you need to dump the file and then recreate and reload it. Note that the compression option has been appended (somewhat cryptically) to the "Duplicates allowed?" question in ISMUTL. This way it does not change the sequence of prompts and will not break an existing command files the execute ISMUTL. The ISMUTL STAT function will display output a new line indicating if the index is compressed. 3. --- (ATE) Fix a problem in which the PAGE command stopped working in build 946. 4. --- Introduce two new ISAMPLUS statements: ISAM'PUSH #CH ISAM'POP #CH PUSH #CH saves the current index number and position within the index, while POP #CH restores the previously saved index and position. Together, these make it easier to scan an index, then interrupt the scan to do some other kind of scan, then return back to the original position to resume scanning. For example, let's say that you want to scan through the open items file by date, looking for overdue items. When you find one, you want to then list all of the open items for that customer (by scanning on the customer number index). After listing the open items for the customer, you want to resume scanning the data index where you left off. Previously, this was hard to do because there was no convenient way to restore your position with an index containing duplicate keys. Now, you can just execute PUSH #CH before changing to the customer number index scan, and later POP #CH to go back to the date index scan. Note that despite the implication of the names PUSH and POP, the "stack" in this case is only one item deep, so you cannot nest PUSH operations. (A second PUSH will just overwrite the previous PUSH.) You must use COMPIL /X:2 to to enable support for the PUSH and POP statements. Attempting to run a program containing PUSH and POP statements on a previous version of the runtime system will cause an illegal syntax error. A sample program, ISPUSH.BP, has been added to the SOSLIB as a test/demo. 5. --- (Windows/ATE) Add an XTREE feature to facilitate the display and removal of a some kind of in-progress display during the loading of an XTREE. The basic problem is that for very large XTREEs, it may take several seconds for your application to acquire the data, possibly transmit it to the ATE client, and then for XTREE to load and display it. Since part of this delay is under the control of your application, it is not very practical for XTREE to initiate an in-progress display. However, since only XTREE knows when the tree is fully built and display, it ought to be the one to delete the in-progress display. So the concept is that the application can optionally create a progress display (perhaps just a static "Processing please wait" message in a dialog, or maybe an animated AVI) when it starts gathering the data for the XTREE display. It then puts the control ID of the display control into a new field in XTRCTL (XTR'DELCTLID - see updated XTREE.MAP). When XTREE sees a valid control ID in that field, it deletes the associated control immediately before displaying the fully-build XTREE control. Notes and Warnings: - If the XTREE control has no explicit parent (i.e. it's parent is the main window), then if you create a modal dialog to contain your <processing> or <in progress> display, the XTREE will by default become a child of that dialog. This won't work, because when XTREE deletes the dialog, it will end up deleting itself. Fortunately, there are multiple workarounds: A) Make your <processing> dialog be modeless by adding the MBF_MODELESS flag. Since modeless dialogs do not automatically become the parent of controls with no explicit parent of their own, the XTREE will remain independent. B) Don't use a dialog for your <processing> display. Instead, just use an ordinary control without a parent, just like XTREE is, so that they become siblings. (You can even put it right where the XTREE would normally display.) C) Put the XTREE in a dialog of its own. - When XTR'DELCTLID is specified and XTR'PARENTID is zero, you must take care that there are no controls (aside from the XTR'DELCTLID control) that would be overlapped by the XTREE screen area. Normally, in this situation, XTREE will save, hide, and later restore any such controls. But doing this would cause the <processing> control to be restored on exit from XTREE (if it was overlapping). - XTR'DELCTLID is mapped as a B,4 instead of B,2 to allow for a possibility (not yet implemented) of referencing an arbitrary control by its window handle rather than its control ID. 6. --- Fix a problem with the MIAMEX MX_DEFTABXYZ (see 947 item 1) not working properly when used within an SBX. 7. --- ISMUTL.LIT 1.4(130) now supports an option for compressed data records (which are very similar to variable length data records). Such records are made up of two parts: a fixed length, uncompressed part, and a variable length, compressed part. The fixed length part must be the first part of the record, and it must be long enough to accommodate all keys. From an application statement, both parts are combined into a normal fixed length record map, and read/write operations behave as if you were dealing with fixed length records. Internally, the fixed length first part of the record is stored in the DAT file, and the remainder of the record is compressed and stored in the IDX file. (The IDX file was used because it already has solid and efficient infrastructure for dealing with variable-length chunks of data.) The compression algorithm is a simple run length encoding scheme which condenses contiguous runs of ASCII 0 (null), 32 (space) or 48 ("0") bytes. (By filling the unused trailing bytes of the record with one of these characters, you get the effect of a variable length record.) To specify this type of data record, at the record size prompt in ISMUTL, enter the total record size (as normal) followed by a slash and the size of the fixed length portion of the record. For example, if you have a 512 byte fixed record, with a 7680 byte variable length message area on the end, you would specify it as: 8192/512 As with the compressed key options, this cryptic format was chosen to preserve compatibility with existing command files that execute ISMUTL. There is not yet a corresponding way to specify compressed records using ALLOCATE'INDEXED. 8. --- (Windows) ISAM PLUS now supports "transactions". These are groups of logically connected file operations, on one or more files, which you want to perform on an all-or-nothing basis. Currently, to do this, you have to either make a backup before starting the transaction, or maintain a lot of conditional logic to allow you to back out the individual operations if the entire set cannot be completed. Five new Basic statements have been added to support transactions: TRANSACTION'LOG'OPEN logname TRANSACTION'BEGIN TRANSACTION'COMMIT TRANSACTION'ROLLBACK TRANSACTION'LOG'CLOSE TRANSACTION'LOG'OPEN opens a log file with the specified name (default extension is ITL for ISAMPLUS Transaction Log). Typically you would use a single logfile name for your entire application, although you could use individual logfiles for any logical reason. Once the transaction log file is open, any subsequently opened ISAMPLUS files will have transaction support enabled. TRANSACTION'BEGIN must be executed at the start of a transaction. It essentially just marks the spot in the log file so that if necessary, we can rollback to that state. TRANSACTION'COMMIT should be executed at the successful completion of the transaction. TRANSACTION'ROLLBACK should be executed if the transaction cannot be completed. It will discard all changes to all files since the start of the transaction. TRANSACTION'LOG'CLOSE closes the logfile. This can be done while ISAMPLUS files are open (although it would disable further support for transactions). It will be done automatically at the end of a program if you fail to do it explicitly. Notes about transactions: - All records involved in the transaction remain locked until either the TRANSACTION'ROLLBACK or TRANSACTION'COMMIT statements. For this reason, you probably want to minimize the time spent in the transaction. - The log file keeps a record of every ISAMPLUS operation that alters data, whether a transaction is in progress or not. (See discussion of the recovery feature below for an explanation why.) Thus, it can grow rather quickly, so you will need to develop a strategy for deleting it (preferably just after making a complete data backup). - If a transaction has started and the program ends without executing the TRANSACTION'COMMIT or TRANSACTION'ROLLBACK, then TRANSACTION'ROLLBACK will be executed automatically (on the assumption that your program aborted and you failed to trap the abort). This does not apply to SBXs; only to main programs (RUN and LIT modules). - There will be a slight delay until transactions are supported under UNIX. 9. --- (Windows) Implement ISAMPLUS recover from log file feature. The logfile discussed above in conjunction with transactions has two purposes. One is to enable the TRANSACTION'COMMIT and TRANSACTION'ROLLBACK operations. The other is to provide a way to recover a lost or corrupted file from the combination of an earlier backup and the log file which was initialized just after that backup. The procedure for such a recovery is: A. Rename your current logfile (so it doesn't get overwritten by next step.) B. Restore your backup C. Execute: .ISRCVR <logfile> Where <logfile> is the renamed logfile from step A. Note that this re-executes ALL of the operations in the logfile, which may span many ISAMPLUS files, directories, etc. So you may want to make sure you have a complete backup just in case you make a mistake and play back the wrong logfile. 10. --- (ATE) Minor internal cleanup of ATE keyboard channel. 11. --- (ATE) Fix an INFLD problem where MAXCHRS was getting set to the larger of MAXCHRS and XMAX. 12. --- (Windows/ATE) Single character edit boxes are now widened to 1.5 columns (up from 1.33 columns) to try to avoid clipping wide characters (like "W"). 13. --- (Windows/ATE) Implement a new AUI_CONTROL ctype flag: MBF_AUTOGROW &h0800 (decimal 2048) This can be applied to text-oriented controls (primarily static text) to force them to grow large enough to avoid clipping their text when the fontscale is greater than 100%. This is now automatic for the variations of PRINT statements that create GUI text controls. For example, if you print "HELLO WORLD" in a font scaled to 200%, it probably won't fit in the space provided by the normal grid for one row by eleven columns. With MBF_AUTOGROW, the control may end up having to occupy 2 rows and 20 columns to avoid clipping the text. (Note that is is left to you to avoid trying to print text in the overflow area.) ============================================================================ A-Shell Development Notes Version 4.9.947 (03 December 2005) ============================================================================ 1. --- (Windows/ATE) XTREE supports a new flag, XTF_ENTESC (&h0100 or 256) which affects the operation of the ESC and ENTER keys when in editing mode. Normally, ESC while editing an editable cell will abort any changes to that cell and then revert from cell editing to row selection mode. With this flag set, ESC will update the cell and then exit from XTREE. Also, with this flag set, ENTER from the last editable cell will exit from XTREE, rather than wrapping back to the first cell. 2. --- Introduce a new 3D form of the Basic TAB command: PRINT TAB(row,col,Z); ... This is equivalent to the standard "2D" form, TAB(row,col), except that the third argument, Z, is used as an index into a table of text attributes which can affect the appearance of anything output with this PRINT command (i.e., color, font, size, etc.) Although this feature does not make anything new possible, it does offer a very flexible tool for migrating legacy text programs to a GUI (or perhaps just a more colorful) environment. The theory is that you would convert existing TAB(row,col) statements to the TAB(row,col,Z) format, replacing Z with one or more variables that correspond to the type of thing being displayed. Having done that, you can then define a set of display attributes for each of the types, using: XCALL MIAMEX,MX_DEFTABXYZ,STS,Z,FGC,BGC,PTYPE,FONTATTR,FONTSCALE,FONTFACE,... (MX_DEFTABXYZ is defined as 154 in ASHELL.DEF.) The above XCALL allows you to associate a variety of text attributes with the value Z, so that when you use PRINT TAB(X,Y,Z);VAR$, A-Shell will apply the specified attributes to the display of VAR$. The parameters are: STS (F,6) returns >=0 if success, else error. -1 means that the table could not be allocated (out of memory?) and -2 means that the specified Z value is larger than the current maximum table size. (See note F below.) Z (integer, 1-29) is the Z value in TAB(X,Y,Z). FGC,BGC (integer) foreground/background color palette values. As with the like-named parameters in AUI_CONTROL, -1 indicates the current color, -2 indicates the standard Windows color. Add +64 to override the XP Theme. PTYPE is a string indicating a combination of style and justification. If null, then only the FGC,BGC values matter and the output will use the normal text (fixed pitch) style of the emulator. Otherwise, the format of the string is: "SJ" where S is replaced by: T (TPRINT), D (DPRINT), or E (EPRINT) and J is the justification code (L=left/auto, C=center, R=right). The TPRINT style is the normal GUI style. DPRINT style is like that but within a sunken panel (normally used for data as opposed to labels or background text). EPRINT style is the white edit box normally used for INFLD or windows editable text. The left justification code also auto-justifies if the first character of the field is blank. In that case, if the last character is also blank, then the field is centered, else it is right justified. (This has to be done automatically because you can't manually figure out how big the display font will be in order to justify, so A-Shell does it on the fly.) Note that right justify actually leaves one trailing blank, since otherwise it looks too "cramped" when using the sunken or EPRINT style. FONTATTR,FONTSCALE,FONTFACE are as in the AUI_CONTROL call. Typically, you would issue several of these XCALLs when you first log in to your main menu (one per Z value that you actually use in the application). For example: ! Define style 1: normal text, FGC=2, BGC=0 XCALL MIAMEX,MX_DEFTABXYZ,STS,1,5,0 ! Define style 2: GUI text, standard GUI colors, TPRINT style XCALL MIAMEX,MX_DEFTABXYZ,STS,2,-2,-2,"TL" ! Define style 3: GUI text (Blue=66) in a sunken panel, extra bold XCALL MIAMEX,MX_DEFTABXYZ,STS,3,66,-2,"DL",14400 etc. Notes: A. Once the XCALL MIAMEX,MX_DEFTABXYZ call is used to define a set of attributes for a particular Z value, it remains in effect until you exit A-Shell or undefine it. To undefine a value, just use the form: XCALL MIAMEX,MX_DEFTABXYZ,STS,Z B. At runtime, referencing a Z value that is undefined will cause the TAB(X,Y,Z) to just act like a normal TAB(X,Y). This is also true if GUI not supported by the emulator. C. You must COMPIL with the /X:2 switch to enable support for 3D TABs. Otherwise you will get a syntax error, UNLESS you use /RC, in which case TAB(X,Y,Z) will compile as if it were TAB(X,Y). (This allows you to compile down for backwards compatibility.) Programs using TAB(X,Y,Z) and compiled with /X:2 will not be compatible with prior versions of RUN. D. You can also disable the 3D TAB behavior at runtime by adding OPTIONS=NO3DTAB to the miame.ini file. (This might be useful if you want to quickly revert to the old behavior even with programs compiled for the new behavior. Of course, you could also achieve the same effect by disabling your MIAMEX,MX_DEFTABXYZ calls.) E. It will be left as an exercise for the application programmer (that's you!) to come up with a user interface to allow individual users to define their own attributes for the various Z values you decide to use. F. If 19 text types is not sufficient, you can preallocate a larger table using: XCALL MIAMEX,MX_DEFTABXYZ,STS,0,COUNT Where COUNT is the desired number of text type definitions. STS will be returned with the new maximum (which may be larger than the amount requested.) Allocating a larger table will delete the current table. As an example of how to use this feature in practice, let's say that after analyzing your application, you decide that there are really only 5 main type of of text output: 1=headers 2=field labels 3=data 4=aux data (legends, helpful messages relating to data) 5=warning messages You might then define 5 symbolic constants representing these types: define TBX_HDR = 1 ! headers define TBX_LBL = 2 ! labels define TBX_DTA = 3 ! data define TBX_AUX = 4 ! aux define TBX_WRN = 5 ! warnings Then you would go through your programs converting existing TAB(row,col) to TAB(row,col,Z) depending on the nature of the PRINT statement. For example: SCREEN'HEADER: PRINT TAB(1,1,TBX_HDR);"Customer Maintenance" ... SCREEN'BACKGROUND: PRINT TAB(5,5,TBX_LBL);"Name: " PRINT TAB(6,5,TBX_LBL);"Address:" ... DISPLAY'DATA: PRINT TAB(5,20,TBX_DTA);CUS'NAME PRINT TAB(6,20,TBX_DTA);CUS'ADDR1 ... Although this could be a tedious job, there are a several advantages to this approach versus some other methods of migrating existing code, such as replacing PRINT statements with TPRINT/DPRINT/EPRINT or TAB(-10,20) or AUI_CONTROL statements: a) You might be able to write a filter program to automate the conversion, by looking at the nature of the things being printed. (Literal strings would usually be label text, unless perhaps on row 1 or 2; variables would be data, etc.) What can't be handled by your filter can probably be handled by a very junior programmer, since the cost of making a mistake is purely aesthetic. b) Until you activate the feature by defining attributes, the 3D TABs continue to work just like the old 2D TABs. c) The /RC switch will compile 3D TABs as if they were 2D TABs (ignoring the 3rd parameter), providing a path to backwards compatibility. d) With the new 3D TABs in place, you are now in a position to allow a great deal of flexibility at runtime in deciding which attributes to use. Depending on the situation (user, site, stock market, etc) you can decide to leave the display in legacy text mode but apply different colors to the different types of text. Or you can go all the way and convert them to GUI text objects using various different styles, font attributes, etc. A very simple sample program, TABXYZ, has been added to the SOSLIB in [908,38] which illustrates the feature. 3. --- DIR.LIT 3.0(137) adds two new sorting switches: /SNODEV and /SNOPPN. Normally, all sort options (/SNAME, /SEXT, /SUDATE) implicitly sort first by DEVICE+PPN. Adding /SNODEV to another sort option removes the implicit primary sort on DEVICE, and /SNOPPN removes the secondary sort on PPN. For example: .DIR ALL:[]/SNAME ; by DEVICE, PPN, NAME.EXT .DIR ALL:[]/SNAME/SNOPPN ; by DEVICE, NAME.EXT .DIR ALL:[]/SNAME/SNODEV/SNOPPN ; by NAME.EXT Note that except for these two sort modifiers, it only makes sense to specify one sort option. (Command switches are not ordered, so there is no way to distinguish, say, /SNAME/SUDATE from /SUDATE/SNAME). Also note that adding /SNODEV or /SNOPPN changes the output format slightly. Instead of providing subtotals when the DEV+PPN changes and showing the DEV:[P,PN] just for the first file of each new group, it lists the DEV:[P,PN] on every file. =========================================================================== A-Shell Development Notes Version 4.9.946.6 (26 November 2005) ============================================================================ 1. --- (ATE) Fix timing issue causing ATE to sometimes close on startup before initiating the connection. 2. --- (ATE) Support ZTERM enable/disable serial passthru feature: ? CHR(27);CHR(27);chr(3);PARAMS$;chr(0); ! enable passthru ? CHR(27);CHR(27);chr(4); ! disable passthru PARAMS$ is of the form "<port#>,<baud>,<parity>,<databits>,<stopbits>" e.g. "1,9600,E,7,2" (COM1, 9600 baud, even parity, 7 bits, 2 stopbits) When enabled, input from the serial port is merged into the keyboard channel input. Output characters are not normally sent to the serial port. To enable that, send ^X (ASCII 24); send ^T (ASCII 20) to disable. Note that these are the standard AUX PORT ON/OFF commands for the AM6x emulation, but when they are sent while serial passthru is enabled, they have the effect of sending the output to the defined serial port rather than to the printer port. ============================================================================ A-Shell Development Notes Version 4.9.946.5 (23 November 2005) ============================================================================ 1. --- (ATE) Fix problem with intermittant dropped keyboard character (usually at the start of an INFLD operation). (Does not require updating server, only ashw32.exe.) ============================================================================ A-Shell Development Notes Version 4.9.946.4 (23 November 2005) ============================================================================ 1. --- (ATE) If host-initiated FTP transfer fails due to login parameters, it now pops up a dialog allowing you to enter them. 2. --- (ATE) Fix problem with ATE client using up 100% if the CPU time; fix problem with ATECTL/S not working reliably. *NOTE: Both client and server sides should be updated to 946.4 at same time. ============================================================================ A-Shell Development Notes Version 4.9.946.3 (21 November 2005) ============================================================================ 1. --- (Windows/ATE) Clean up various glitches in the new ATE internal protocol. Reinstate reverse channel support. Fix a bug with large XTREE responses (as with multi-select and editable cell.) 2. --- (Windows/ATE) Y/N and 1/0 were not working with INFLD checkboxes. 3. --- (Windows/ATE) TAB(-1,160) is now supported by ATE (to set cursor shape). However, it is preferable to use the new TAB(-10,50);code;chr(127); command, as it is follows the standard ATE extended command syntax and protocol. The code is a single byte, whose ASCII values can be one of the following: 32 (space) white arrow 40 "(" hourglass 48 "0" I-beam For example, while performing an operation that may take a few seconds, like building a list of customers to load into an XTREE, you can set the cursor to an hourglass by: PRINT TAB(-10,50);chr(40);chr(127); ! set cursor to hourglass 4. --- (Windows/ATE) The abbreviated TAB(-10,20);string;",DL";chr(127); format now strips trailing blanks (except for 1) before right justifying. ============================================================================ A-Shell Development Notes Version 4.9.946.1 (17 November 2005) ============================================================================ 1. --- (Windows/ATE) A new (and improved!) internal protocol for communication between the application and GUI front-end has been implemented, which may eliminate the motivation for the reverse channel. Indeed, the reverse channel has been disable while this is being studied. (ATECTL/C will return a failure code immediately, so the application will just revert to using the standard keyboard channel.) Briefly, the new protocol tries to address the problem of typeahead getting mixed in with GUI command reponses by putting the client side into a keyboard "hold" at the start of a sequence of GUI operations and leaving it there until the server side of the application requests actual input (e.g. INPUT LINE, XCALL ACCEPT, XCALL INFLD, etc.) During the "hold", local keyboard operations are handled normally but just held on the client side (not transferred to the server side of the application). The only known difficulty with this scheme is that it exposes a more likely possibility that some unexpected sequence of events will leave the application waiting for input while the keyboard hold is still active. This appears to the user as if the keyboard is just locked, and can be manually fixed by clicking on the Settings|Keyboard Locked menu toggle. (The hold shares the "keyboard locked" menu toggle with a true keyboard lock, but unlike a true keyboard lock, in this case keyboard characters are still accepted and buffered so that typeahead and can be forwarded to the application in a coherent manner when the appropriate time comes.) Note that although this is mainly an issue for ATE, where the GUI client and application side are on separate computers, the paradigm still applies even in the standalone Windows case whenever you use TAB(-10,x) commands (and sometimes you may not realize you're using them because they are internal to some XCALLs and LITs). 2. --- (Windows/ATE) Related to the new keyboard buffering system, there is a new MIAMEX call: xcall MIAMEX,153{,op} If op is zero or omitted, this releases the keyboard hold, otherwise it sets it. In theory you should never need this command, since A-Shell should take care of it automatically, but it might be useful in some exotic situation. 3. --- A minor bug in the non-GUI INFLD SETDEF display, in which the list of choices started with some apparent garbage characters, has been fixed. 4. --- (Windows) Fix a printing problem introduced in 944 in which specifying copies > 1 and using the printer selection dialog could lead to the actual number of copies being the square of the requested number. (This was caused by both A-Shell and the printer driver both implementing the copies.) 5. --- (Windows/ATE) The right justification logic for static text controls has been refined to avoid the appearance of the right-justified text being jammed too closely to the end of the control. (This was really just an aesthetic issue with the MBF_SUNKEN style.) 6. --- (Windows) When a SUBMIT'ed job runs into a :K (command file keyboard wait) it no longers aborts the process, and instead just ignores it. It makes no sense for a background job to wait to stop and wait for keyboard input, so this is mainly a convenience for controls files that indirectly execute START.CMD or other command files that use :K to allow the operator to see a message before continuing. (This actually restores the way it worked under 4.8). Note that under UNIX, SUBMIT'ed jobs use the redirected standard input in place of the keyboard, so a :K will pick up the next line from the standard input. 7. --- (Windows/ATE) Fix a problem introduced in 945 in which radio buttons would change into checkboxes when selected within EVENTWAIT. ============================================================================ A-Shell Development Notes Version 4.9.945.6 (06 November 2005) ============================================================================ 1. --- (Windows/ATE) Highlighting of the current default button in AUI_EVENTWAIT is now more like "typical" XP themed applications. 2. --- DEVICE= path sizes increased from 50 to 80 characters, and some internal compiler allocations for filename paths (such as ++include files) increased to 256 bytes (fixing at least one GPF problem.) 3. --- (Windows/ATE) Go back to displaying dates using the Combo box control rather than the date picker, mainly because the date picker makes it difficult to discern where the focus is. (In the case of the Combo box, it is quite obvious, because the field with the focus changes to a date picker while being edited.) 4. --- (Windows/ATE) Fix problem with focus and context when the window is minimized and restored while XTREE has the focus. 5. --- (Windows/ATE) Various minor adjustments to AUI_EVENTWAIT with EVW_EXCDFOCUS and with clicks being dropped when using a very short TIMER option. 6. --- (Windows/ATE) Fix bug relating to MX_WINPTR (wasn't always returning the status or the selected printer name). ============================================================================ A-Shell Development Notes Version 4.9.945.3 (23 October 2005) ============================================================================ 1. --- (Windows/ATE) Fix bug introduced in 945 causing combo boxes to display as buttons when inactive. 2. --- (Windows/ATE) Work around limitation of date and time pickers not offering a blank display option by using a combo box for display of blank dates and times. 3. --- When launching a new instance of A-Shell via xcall HOSTEX,"$ASHELL...", put quotes around the miame.ini spec if it contains spaces. 4. --- (Windows/ATE) Clean up and improve some aspects of the FONTATTR parameter to the AUI_CONTROL (MIAMEX,119) call. The font weight values were incorrect and also conflicted with some other flags, so they have been adjusted to be 16 times the following (values taken from the latest ashell.def): FW_THIN = 100 FW_EXTRALIGHT = 200 FW_LIGHT = 300 FW_NORMAL = 400 FW_MEDIUM = 500 FW_SEMIBOLD = 600 FW_BOLD = 700 FW_EXTRABOLD = 800 FW_HEAVY = 900 In addition, a new flag, 32768 may be added to FONTATTR to tell the font matcher to try to match the average character width to the grid cell width. This probably only makes sense when specifying a fixed pitch font, in which case it should make the selected font match pretty closely in width to the standard non-GUI text. ============================================================================ A-Shell Development Notes Version 4.9.945 (19 October 2005) ============================================================================ 1. --- (Windows/ATE) INFLD TYPE ||] (which stifles the automatic widening of small fields to help ensure that proportional characters will fit) now works on output as well as input. But, for fields that are only 1 character wide, the actual display with is more like 1.33 columns, so that most upper case characters will fit. 2. --- (Windows/ATE) Date/Time pickers now allow direct keyboarding of times and dates, using the /, -, or : characters to jump from one sub-field to the next. 3. --- (Windows) The UCS() and LCS() functions, as well as the case folding functions in INFLD, now take into account the locale when folding accented characters. 4. --- XCALL MIAMEX,MX_GETTIME (75) now optionally returns microseconds (in addition to seconds) under Windows and Linux. This is probably not useful in itself but could be useful for measuring the amount of time that a very short operation takes (by calling MIAMEX,MX_GETTIME twice, once before and once after). The MIAMEX.BP sample program in [908,30] has been updated to do just that, showing the time to execute a FOR/NEXT loop of 10000 iterations. The new syntax is: XCALL MIAMEX,MX_GETTIME,SECS{,USECS} As before, SECS will be returned as the number of seconds since the "epoch" 00:00:00 January 1 1970, and thus should be a B,4 or floating point variable. USECS will be set to -1 if the feature is not supported (e.g. AIX, SCO) or else the number of microseconds to add to SECS. Note that under Windows, the actual resolution is only milliseconds, so USECS will always be a multiple of 1000. Also note that if you are using this function to measure an interval, keep in mind the possibility that the system clock might get updated during that interval, rendering your results meaningless. 5. --- Fix a compiler bug that failed to report DIMX as a duplicate label if the variable created by the DIMX had previously been seen by the compiler (and was auto-mapped). This could have led to programs that compiled without error, but in which DIMX variables failed to work as intended. 6. --- (Windows/ATE) All GDI printing commands (//SETFONT, etc.) now support both the symbolic named parameter values and the hex format values as defined in the Development Guide. (This doesn't add any new capability but makes it easier to write and understand GDI commands.) For example, where previously you had to use numeric integer params such as: //SETFONT, 120, Arial, 34, 0, 512, 1 now you can use symbolic names and/or hex values, e.g.: //SETFONT, 120, Arial, &h022, ANSI_CHARSET, FW_EXTRABOLD, FW_ITALIC You can also drop the prefixes (FW_, FS_, etc.) and suffixes (_CHARSET, _PITCH) which are mainly used to organize the symbols in ashell.def to shorten it to: //SETFONT, 120, Arial, &h022, ANSI, EXTRABOLD, ITALIC Furthermore, for parameters that are actually made by combining two or more symbolic values, like the &h022 (Pitch-And-Family) parameter above, you can use the pipe to combine two symbolic values: //SETFONT, 120, Arial, VARIABLE|SWISS, ANSI, EXTRABOLD, ITALIC See the Development Guide for the definitive list of symbolic parameter values which apply to each GDI command. 7. --- (Windows/ATE) The Control+Shift+DoubleRightClick command now brings up a small dialog rather than going direct to the control dump, in order to allow a new option to change the default parameters for subsequent static text output. This is mainly intended as an design tool for experimenting with different colors and font attributes while thinking about converting legacy programs to GUI. Note that unlike changing the default GUI font, making changes here doesn't affect text already displayed. As an example of how you might use this in conjunction with a legacy text file maintenance program, you would start by invoking SET AUTOTPRINT (so that all plain text was turned into static text controls), then just before displaying the main screen, you could set up some text attributes. Then, cause your program to actually output the background labels, which will now be in the color/font/style selected. Now, try changing the attributes again, perhaps using a different color and maybe DPRINT instead of TPRINT, and then cause the program to display data fields. If you end up with something pleasing, you can capture and record all the field data, with the attributes you applied, by generating and saving the control dump. 8. --- (Windows/ATE) The "manifest" system has been revived for a second go. This is a scheme by which external files named <prog>.MFT can be used to automatically adjust the display characteristics of the program without making any changes to the program. It isn't known yet if this is a practical technique for GUIfying programs for production use, but it can be useful for experimenting. In this latest reincarnation, you must activate the manifest mode using MFT.LIT (MFT ON or MFT OFF). (If not activated, the MFT files are ignored.) To create a MFT file, generate a control dump when you have all the fields that you might want to adjust on the screen. (You'll probably need to use SET AUTOTPRINT so that the program generates controls when it uses PRINT statements.) Delete columns M-Q. Delete any rows that you aren't interested in altering. With the remaining controls, you can change the row, column, type, fgc, text, fontattr, fontscale, fontface, command, and tooltip fields. Since controls are identified in the manifest by matching the output row/col to the csrow and cscol parameters in the manifest, if you want to adjust the position, change the srow and scol parameters which are at the far right end. For adjusting the type flags, consult the MBF_ symbols in ashell.def. To adjust the text, you must also add 16 to the fontattr field. (This is a special flag indicating you want to override the control text. Obviously this would be a bad idea for any data field, but might be useful for certain screen labels.) Save the file in CSV format, but using the name of the program, and then copy it to a version with an MFT extension, in the same directory where the RUN file is. For programs that have more than one screen layout, you'll need to insert this command into the program so that the manifest logic can know which "form" to look at it: PRINT TAB(-10,48);FORM$;chr(177); You'll also have to manually change the form name in the first column of the manifest spreadsheet accordingly. (The column is initialized to the name of the program when you create the control spreadsheet.) Note that in the ATE environment, the MFT files are to be placed on the workstation in the %ATECACHE% directory. Thus, any manifest operations are strictly relative to the individual workstation. (If this all sounds confusing, don't worry, since it only meant to be useful in a narrow set of design circumstances.) 9. --- (Windows/ATE) A new XTREE column type code, \ (backslash) may be used to declare that a backslash within the column should be treated as a normal character, rather than as the start of hidden text (as would otherwise be the case when in file mode). Note that using the \ type on any column effectively turns it on for all columns 10. --- (Windows/ATE) Date/Time fields now retain their form when becoming inactive (instead of turning in combobox controls). The down side of this is that when you click on the field to activate it, it will still always start with the focus on the first part of the date (or the checkbox) regardless of where you clicked on it. (This was true before but less obvious since the entire control changed from a combo box back to a date when you clicked on it.) Depending on how this is received we might extend it to the UP/DOWN control type, or revert back to the combo box for the DATE/TIME. ============================================================================ A-Shell Development Notes Version 4.9.944.1 (10 October 2005) ============================================================================ 1. --- IEEE floating point format (F,4 and F,8) now supported. Note that due to the differing levels of precision between them, testing for equality between types is an even worse idea than it is when testing between two F6 variables (unless you use SET FPROUND). 2. --- (Windows/ATE) Fix a few problems related to multiline edit fields. One was that the height of the field would be 2 rows higher in edit mode than in display mode when millirows were used. Another was that when in insert mode, there was an artificial limit of about 460 characters. (The actual limit should be 4 times that, or about 1840 characters.) 3. --- (Windows/ATE) Using ^V (paste) in an INFLD field with TYPE |K (Windows keyboard conventions) now processes the clipboard characters as if they had been typed, rather than just feeding them directly into the edit control. This allows INFLD to apply its normal rules for field size, character type, etc. 4. --- (Windows/ATE) Since INFLD treats ^C as paste clipboard when using Windows keyboard conventions (TYPE |K), it now supports SHIFT+CONTROL+C as a way of getting the traditional ^C behavior (i.e. aborting the field if SET CTRLC enabled or returning EXITCODE 10 if TYPE V used). ============================================================================ A-Shell Development Notes Version 4.9.944 (09 October 2005) ============================================================================ 1. --- (Windows/ATE) The internal implementation of the INFLD-related control types has been restructured in an effort to make it easier to maintain. Hopefully this should not have any undesirable side-effects and does solve a few minor problems. 2. --- (Windows) Two improvements related to running A-Shell from the system tray (using the -zi command line switch): a) TAB(-10,1);mintitle;chr(127) now sets the tip (floating title) instead of the minimized title if the session is running from the tray. b) Clicking on either the minimize or "X" buttons when the window has been normalized will make it return to the tray. (Previously, once made visible, minimizing would only return it to the Task Bar.) 3. --- New INFLD TYPE ||T causes ENTER to act like TAB (returning EXITCODE 7). This might help simplify dialog logic, particularly when using EVENTWAIT with the EVW_EXCDFOCUS option (which see below), by eliminating the need for special treatment of the EXITCODE 0 case. 4. --- (Windows/ATE) Accelerator key display logic has been improved and made more "Windows-like". In general this means that the underlines will appear if the last input event was a keyboard event, and not appear if the last input event was a mouse event. (As a practical matter for operators, the rule is simply that if in doubt, and no underlines are visible, hit the ALT key to make them visible, if present.) 5. --- (Windows/ATE) Accelerator keys are now supported for the tab labels in TAB controls. Note that you must include the MBF_KBD flag when creating the TAB control in order for accelerator keys to work. 6. --- (Windows/ATE) Fix a problem occuring in complex programs in which the A-Shell font cache became corrupted, causing the font in some controls to change unexpectedly. 7. --- Fix a potentially serious bug in XCALL MIAMEX, MX_FLSET in which calling it twice for the same file in the same SBX would interfere with the normal automatic reset of the file control variables when returning to the parent program that originally opened the file. 8. --- Fix a problem with INFLD SETDEF matching logic when the SETDEF entries were longer than the MAXCHARS parameter. 9. --- (ATE) XCALL MIAMEX,MX'GETOFD (Get OpenFile Dialog) is now supported from UNIX via ATE, allowing the server to request the name of a Windows file to open or save. Alternate extended TAB syntax: ? TAB(-10,47);Path;",";Filter;",";Title;",";Flags;","; & DefExt;",";Type;chr(127); The parameter formats and values are the same as in XCALL MIAMEX,95. The return data (sent into the keyboard channel) consists of Files,Flags,FileTitle<CR>. The Files parameter contains one or more complete filespecs, separate by chr(10) characters. 10. --- (Windows) When a printer is selected from the printer selection dialog, A-Shell now uses the printer state as set up in the dialog (including "exotic" settings such as duplex, watermarks, stapling, etc.) Previously, the only options in the printer setup dialog that had any effect were copies and orientation. 11. --- I (signed integer) variables are now supported in XCALLs. 12. --- (ATE) XCALL AUI_MENU and MIAMEX,71 (traditional form) now support the option to forego receiving status, using the same concept as for AUI_CONTROL. That is, if the STATUS parameter is omitted, or passed as a null string (if mapped, must be S,1), then no status will be returned. This might provide a slight speed improvement when setting up a lot of menu items, and is recommended especially if you aren't evening bothering to check the returned STATUS anyway. 13. --- (A-Shell/FAX) Confirm/clarify a conflict between the A-Shell/FAX @@NOTIFY command and the Windows XP Fax drivers. The problem is, quite simply, that if you use the @@NOTIFY command, you may get no output at all (no fax, no notification, no error message). This has been confirmed by Microsoft to be a problem with current versions of XP, so until notified otherwise, or you are using the W2000 Fax Server with the email interface enabled, it is best to not use the @@NOTIFY option. 14. --- (Windows/ATE) The END and HOME keys in XTREE now move the focus to the last or first item in the tree, in addition to scrolling the view. If the XTREE is single-select, then the last or first item is selected as well. (This matches the behavior of PCKLST.) ============================================================================ A-Shell Development Notes Version 4.9.943.2 (10 September 2005) ============================================================================ 1. --- (Windows/ATE) ALT+ accelerator commands now work in XTREE. Also, hitting the ALT key should cause any accelerators to be highlighted (if they aren't already). 2. --- Various minor improvements in the tracing details for ISAM, MALLOC, and XCALL traces. ============================================================================ A-Shell Development Notes Version 4.9.943.1 (20 September 2005) ============================================================================ 1. --- (Windows/ATE) Restore operation of left arrow and down arrow in EVENTWAIT (broken in edit 943). 2. --- (Windows/ATE) Fix bug (introduced in 943) in MIAMEX,MX_GETOFD in which it would terminate the returned FILE argument at the first space in the filename. (Fix is in server side of connection, not client side.) 3. --- Fix problem with MIAMEX,82 not exiting all the way out to the dot prompt when called from within a nested SBX. ============================================================================ A-Shell Development Notes Version 4.9.943 (19 September 2005) ============================================================================ 1. --- (WINDOWS) You may now specify an overlay file in the calling arguments to SPOOL (EZSPL). This has the same function as setting OVERLAY= in the printer init file, but any overlay specified in the XCALL statement will override an overlay in the printer init file. You may also specify the total number of pages in the printout. If specified, any occurrence of "%#" in the printfile will be replaced with the total number of pages. For example, a string in the printfile of the form "Page 1 of %#" would be converted to "Page 1 of 100" (assuming that the total pages had been set to 100). Obviously you could have done this directly in your application, but it is often difficult to know in advance how many pages you are going to generate, whereas it is easy to count them as you generate them (and then pass the total to SPOOL/EZSPL). The calling syntax for SPOOL/EZSPL is now: Old format: xcall SPOOL, file {,printer {,switches {,copies {,form {,lpp {,width {,prefix {,suffix {,overlay {,totpages}}}}}}}}}} New format: xcall EZSPL, file, table This format hasn't changed, but two new fields have been added to the end of the TABLE structure: MAP1 TABLE MAP2 PRINTER,S,64 ... MAP2 HOSTROWS,F,6 MAP2 EZCOLORS MAP3 EZFG'TXT,B,1 ... MAP3 EZBG'BRF,B,1 MAP2 OVERLAY,S,28 ! (new) overlay file MAP2 TOTPAGES,F,6 ! (new) total pages 2. --- The AUI_EVENTWAIT OP flag EVW_EDIT (aka EVW_INFLD) now applies to all editable fields. Currently this means INFLD and XTREE (previously it was just INFLD). The concept is that when the focus would have been set on an editable field, AUI_EVENTWAIT will trigger the click sequence for the field, which will cause it to exit with the EXITCODE for that field. (Otherwise EVW_EVENTWAIT ignores editable fields.) 3. --- A new OP flag has been added to AUI_EVENTWAIT: EVW_EXCDFOCUS (65536 or &h10000 as defined in ashell.def) When set, AUI_EVENTWAIT gives preference to the incoming EXITCODE value in deciding which control to initially set the focus on, using the following rules: - If EXITCODE < 0 and not -35 thru -42 (often used for SHIFT-TAB and SHIFT arrows) then it is interpreted as if the CTLID parameter had been set to the control whose click-string generates the specified EXITCODE. (Provided that the control is of a type that is normally allowed to retain the focus by EVENTWAIT. If, for example, you define both a static text label and an INFLD field with the same EXITCODE click string, EVENTWAIT will skip over the label and activate the INFLD field.) - Else if EXITCODE is 2, 3, -35, -36, -37, -40 or -42 (left arrow, up arrow, shift-left, shift-up, shift-tab and shifted XTREE up/left) then the EVW_PREV flag is automatically set. - Else if EXITCODE is 5, 7, 12, -38, -39 or -41 (down arrow, tab, right arrow, shift-right, shift-down, shift-right in XTREE) then the EVW_NEXT flag is automatically set. - Else it acts as if the EVW_EXCDFOCUS flag had not been set. An example will make it clear why this is handy. Imagine a dialog containing some buttons and also several INFLD fields, where you are going to use AUI_EVENTWAIT. Previously, to start you might have set CTLID to the ID of a particular button. You can still do that, but since the logic of your application is probably built on the EXITCODE values rather than the control IDs, it will be easier to just set EXITCODE to the value corresponding to the desired control and use EVW_EXCDFOCUS. That's a minor improvement. But consider if you wanted to start on one of the INFLD fields. You wouldn't call AUI_EVENTWAIT at all, rather you'd call INFLD. But this complicates your logic. If you just set EXITCODE to the value corresponding to the desired field (and specify EVW_EDIT) then AUI_EVENTWAIT will immediately return to you with the desired exitcode (which accomplishes nothing but simplifies your code since you don't have to have special logic for handling the initial focus.) The main improvement comes as you return to the AUI_EVENTWAIT after calling INFLD (or XTREE). If the user exits from the INFLD operation by hitting up arrow (returning EXITCODE 3), previously you would have had to figure out what the control ID was for the control prior to that INFLD control (or at the very least, have logic to set the EVW_NEXT or EVW_PREV flags). Now, with the EVW_EXCDFOCUS flag, you can just go right back to the AUI_EVENTWAIT operation and let it decide what the next control to get the focus should be. In other words, your dialog loop can probably now be simplified down to something like: do xcall AUI,AUI_EVENTWAIT,CTLID,PARENTID,EXITCODE,OPFLAGS if <exitcode to exit dialog> exit else call <field handler based on exitcode> loop 4. --- (Windows/ATE) INFLD and EVENTWAIT now support the use of ALT+? (where ? is the designated accelerator key for a control which has a click string associated with it) as another equivalent to clicking on the control with the mouse. To specify an accelerator key for a control, preceded the desired letter with & in the text field. For example, a button whose text is "E&xit" will fire when ALT+x is input (and will display with the "x" underlined). 5. --- (Windows/ATE) MIAMEX,MX_GETOFD (95, or Get Open File Dialog) now supports ATE. 6. --- (Windows/ATE) Fix a bug with querying controls whose text contains CRLF. ============================================================================ A-Shell Development Notes Version 4.9.942 (15 September 2005) ============================================================================ 1. --- XCALL EZTYP now optionally returns the exitcode (INFLD-compatible) which caused the preview session to exit. The new calling syntax is: XCALL EZTYP,FSPEC{,TOFFSET,LOFFSET{,EXITCODE}} (If not using the TOFFSET and LOFFSET feature, set them to 0). EXITCODE should be a floating point since many of the return values are negative. The typical EXITCODE would be 1 (ESCAPE). 2. --- (WINDOWS/ATE) When creating dialogs without the MBF_ALTPOS setting, by default the reference point for the upper left corner is relative to the parent dialog (or main window if this is the first dialog). This causes successive nested dialogs to "creep" down and to the left. This might be a good thing, or it might be annoying, depending on the situation. If you don't like the "creep", you can use MBF_ALTPOS. But if you don't like MBF_ALTPOS either, then a new option is to specify MBF_DLGNOCREEP (2048 or &h800) along with MBF_DIALOG when creating a nested dialog. (Note that MBF_DLGNOCREEP has the same value as MBF_SEP.) 3. --- (Windows/ATE) Fix a problem with getting "micro-mini" fonts, when using font scaling and creating controls while the main window is minimized. 4. --- (Windows/ATE) Fix an obscure problem in which all the INFLD/EDIT controls in a dialog or window would seem to turn into empty, sunken static text controls after launching a new dialog. 5. --- (Windows/ATE) XCALL AUI,"ENVIRONMENT",OP,FLAGS now supports a new OP (2) which is like 0 (get flags) but doesn't query the ATE client to find out if it has XP theme support or not. This is probably only useful within a repetitively-called SBX where you need to determine whether you can use ATE/GUI methods or must stick with text methods, but for performance reasons you want to avoid excessive communication with the client and it doesn't make any difference to your logic whether themes are active. ============================================================================ A-Shell Development Notes Version 4.9.941 (10 September 2005) ============================================================================ 1. --- (ATE) Misc. improvements in FTP support for AMOS systems. The syntax for the filespecs passed to ZTXFER or TAB(-10,22) or the ZTERM ESCAPE sequences is now considerably more forgiving. Also, you can now create a low-level FTP debug logfile (c:\debug.log) by setting the environment variable ASHFTPDEBUG=1. 2. --- (ATE) Fix a problem in which the trace log would automatically be turned back on whenever you went into the Misc tab of the configuration dialog if the trace file was not blank. 3. --- (ATSD) Fix problem where INFLD operations were causing the ATSD server console currently active window to lose focus. (This was rather annoying for anyone trying to use that console as a workstation!) ============================================================================ A-Shell Development Notes Version 4.9.940.2 (08 September 2005) ============================================================================ 1. --- (Windows/ATE) GUI version of INFLD now supports TYPE |2 to force SHIFT-TAB to return EXITCODE 2 (like left arrow would if TYPE 2 was specified). (Otherwise SHIFT-TAB acts exactly like up arrow, meaning it will exit with EXITCODE set to 3 if TYPE 3 specified). Unlike left arrow, SHIFT-TAB does not require that the cursor be in the home position in order to be treated as an exit key. Note that TYPE |2 neither requires TYPE 2 nor implies it. In other words, TYPE |2 by itself will enable SHIFT-TAB exits (setting EXITCODE 2) but will not enable the LEFT ARROW exit. Use TYPE 2|2 or |22 to allow both methods of exiting. ============================================================================ A-Shell Development Notes Version 4.9.940.1 (08 September 2005) ============================================================================ 1. --- (ATE) Fix encryption of FTP password. ============================================================================ A-Shell Development Notes Version 4.9.940 (05 September 2005) ============================================================================ 1. --- (ATE/Windows) XCALL MIAMEX,149,OP,ID,VALUE can now be used to get or set a number of options currently associated with the Misc Settings and Dialog Sizing dialogs. Set OP to 0 to retrieve a value or 1 to set it. The ID codes and associated range of values are as follows (the AWS_xxx symbols have been added to ashell.def): ID Symbol ID # Meaning/Values -------------------------------------------------------------------- AWS_LEADING 1 Leading (pixels between rows) AWS_LEADCLR 2 Leading color fill (color # or -1,-2) AWS_LEADCLR_AUTO (-1) AWS_LEADCLR_PASSIVE (-2) AWS_FONTSCALE 3 Font scale factor AWS_MINMAXMARGIN 4 Min margin when maximized AWS_FIXEDPITCHEDIT 5 Use fixed pitch in edit boxes AWS_WININFCLR 6 Use std Windows colors in edit boxes AWS_EDITLEADING 7 Extend edit boxes into leading area AWS_CBEDITMATCH 8 Set edit boxes to combo height AWS_DLGGRIDBASIS 9 Dialog size based on... AWS_DLGGRIDBASIS_FONTSIZE (0) AWS_DLGGRIDBASIS_WINDOWSIZE (1) AWS_DLGGRIDBASIS_PROGCTL (2) AWS_DLGGRIDHEIGHT 10 Dlg grid height (% of fontsize) AWS_DLGGRIDWIDTH 11 Dlg grid width (% of fontsize) AWS_BEEPCODE 12 Default beep sound w/ chr(7) AWS_BEEPCODE_DEFAULT (0) AWS_BEEPCODE_HAND (16) AWS_BEEPCODE_QUESTION (32) AWS_BEEPCODE_EXCLAM (48) AWS_BEEPCODE_ASTERISK (64) As an example, to change the default beep code to the system "asterisk" sound: xcall MIAMEX,MX_WINSETTINGS,1,AWS_BEEPCODE,AWS_BEEPCODE_ASTERISK Note that all of the options listed above, other than beepcode, may be set via the dialogs directly. In the case of the beepcode, the command changes the code that is used when a chr(7) is output, but you can still determine what waveform is associated with that code in the Windows Control panel Sounds applet. Also note even though the beepcode may not be seen or edited in the dialogs, it is still saved and retrieved along with the other settings (File..Save). 2. --- (Windows/ATE) Fix problem with new Dialog Sizing options not being saved. 3. --- (ATE) Fix a problem that prevented INFLD (when called via ATE) from exiting on left arrow even if TYPE 2 was specified, if MAXCHARS was > XMAX (i.e. if horizontal scrolling was allowed.) 4. --- (Windows/ATE) Fix bug in vertical positioning of images (output with either IMAGE.SBR or AUI_IMAGE), that caused them to appear approximately one row too high in the main window when there was a top status line. (Problem did not affect images in dialogs and probably wasn't noticeable in the main window if there was no top status line.) 5. --- (ATE) ATE creates a new environment variable, ATECACHEDIR, which is currently set to the same value as ATELOCALDIR (which is set to match the FTP Local Directory specified in the ATE configuration). The idea is to start using this directory as the standard place to store files needed locally (like images) and to decouple it from the FTP Local Directory (which might be used for some other purpose, such as exporting data). Also, it is now permissible to define the FTP Local Directory in terms of another environment variable (such as %TEMP%\ftp). 6. --- (Windows/ATE) Fix bug which allowed non-children controls to be deleted (improperly) when clearing all children controls from within a parent. 7. --- (ATE) Allow DNS names for telnet target address. Previously the length was limited to 16 chars total (allowing for ###.###.###.### or short names like "linux1", but not "ashell.acme-products.com"). Note that the fix requires an update of ATE also (to edit 162). ============================================================================ A-Shell Development Notes Version 4.9.939.1 (01 September 2005) ============================================================================ 1. --- (Windows) If -o <ash file> not found, then don't immediately complain but instead look for default.ash in the MIAME directory. If that isn't found, then complain. In edit 939, it complained immediately if the specified ash file wasn't found. Prior to that, it looked for default.ash in the directory specifed by the -o parameter. The new plan is meant to allow installations to put the default.ash in the standard location, but to allow an alternate ash file and directory to be specified in the command line to accommodate cases where the default ash file is not appropriate. The alternate ash file can be hard coded in the command line for the shortcut, without it mattering if the file exists or not (since it will fall back on the normal default.ash). 2. --- Fix a loophole in the hangup (SIGHUP) recovery logic that caused the job to abort when attempting to run a new program. To review, under normal circumstances, if the client workstation is disconnected (e.g. modem or telnet disconnect), the job will become a daemon and continue to run until it stops for keyboard input on its own accord. At that point it will get a Basic error 250, and will be allowed to run until it either shuts itself down or stops for another keyboard input. However, this was only working as long as the job remained in the current program. Now it should be able to continue to chain (or xcall AMOS) new programs while it remains a daemon. (The point of all this fancy business being to allow a critical process, like a posting run, to either complete or shut itself down gracefully in the case of an unexpected disconnect.) ============================================================================ A-Shell Development Notes Version 4.9.939 (30 August 2005) ============================================================================ 1. --- (Windows/ATE) The MBF_ALTPOS scheme for dialog sizing has been revamped, and a new Settings dialog added for adjusting the dialog sizing options. The options are: A) Dialog size is based on font size, i.e. MBF_ALTPOS is automatically turned on for all dialogs. B) Dialog size is based on the grid size of the main window, i.e. MBF_ALTPOS is ignored on dialogs. C) Program control, i.e. the MBF_ALTPOS bit continues to work as before with regards to dialogs. (This is the default.) As explained before, we believe that the MBF_ALTPOS scheme for dialog sizing (in which the dialog grid size is based on the system font size, and thus is immune to the size of the main window, but adjusts for the resolution and font size of the Windows desktop) is superior to the old scheme (based on the grid of the main window). But, it seemed that no one agreed with us, mainly because when they switched to the new scheme, existing dialogs "looked funny". After some study, we have determined that we can correct for this by allowing you to adjust the horizontal and vertical scale factors to match the implicit aspect ratio of your assumed working environment. Originally, we had hard-coded those scale factors as 120% of the combobox height and 120% of the average character width. The new defaults are 100% of the combobox height and 160% of the average character width. But if you find that this results in dialogs that are too short and wide, or too tall and narrow, then you can adjust accordingly. The other difference noticed when switching to the MBF_ALTPOS scheme was that there was approximately one additional row of space at the bottom of the dialog. We've removed the extra row, so that in most cases, the amount of extra space at the bottom of a new-style dialog is pretty close to what it was before. (Only now it is more consistent, regardless of the dialog size or resolution, whereas before it was affected by both, such that a dialog of 400x600 may have had just the right amount of bottom margin, whereas if you displayed the same dialog at 1024x768, it would have had too little or too much. WARNING: THIS MEANS THAT IF YOU WERE USING MBF_ALTPOS TO SIZE YOUR DIALOGS, YOU NOW NEED TO ADD 1 TO THE ENDING ROW COORDINATE!!!! (WE NORMALLY TRY TO AVOID THESE KINDS OF CHANGES, BUT IT APPEARS THAT VIRTUALLY NO ONE WAS USING MBF_ALTPOS IN THIS WAY AND THUS THE EFFECT CHANGE WOULD NOT HARM ANYONE.) With the new ability to experiment with the settings without touching the program source code, it is hoped that developers will give this issue another round of consideration and ultimately arrive at the same conclusion that we did, that sizing the dialogs based on the system font size rather than on the grid size of the main window makes much more sense and will result in dialogs that "work" in a much wider range of display environments. 2. --- ATE now shows kbd locked status properly on the Settings menu even when locked internally during an ATE command. (Previously it didn't, and if such a command aborted, it would leave the kbd locked but confuse the operator by not showing it locked.) Also, fix a problem in which hitting a "D" as the first character after connecting to certain systems could cause it to disconnect. (This was related to the fact that the kbd sequence "|D" will normally disconnect.) 3. --- (Windows/ATE) EPRINT controls are no longer protected from erase by TAB(-1,9) and TAB(-1,10). 4. --- (Windows/ATE) INFLD combo box now reduces the height of the dropdown list when font scaling is used, in order to avoid overlapping the dropdown button. (Otherwise the default is to show 30 items.) ============================================================================ A-Shell Development Notes Version 4.9.938 (25 August 2005) ============================================================================ 1. --- VUE now supports a COLOFFSET command (both at the command level and in INI.VUE) to adjust the starting column number. By default, VUE calls the first column #0, but if you want the first column to be numbered 1, then use >COLOFFSET 1 (or add COLOFFSET = 1 to the INI.VUE). 2. --- (Windows/ATE) XTREE cell editing now treats SHIFT+LEFT/RIGHT arrow like most other Windows programs (i.e., selects characters). You must use CTRL+LEFT/RIGHT arrow to move to an adjacent cell. You can also now hold down the CTRL key and use all arrow directions to move between editable cells. (Previously CTRL+arrow only worked with non-checkbox editable cells and only for left and right.) 3. --- (Windows/ATE) Close loophole in INFLD which allowed a left arrow exit (setting EXITCODE=2) when MAXCHARS>XMAX even if TYPE 2 not specified. ============================================================================ A-Shell Development Notes Version 4.9.937.6 (23 August 2005) ============================================================================ 1. --- (Windows/ATE) Improvements in the ability to override the XP Theme colors of static text controls. To do so, add +64 to either or both of the FGC and BGC parameters when creating the control. This applies to both the foreground and background color set, so the range from 0-15 would be offset to a range of 64-79. Previously, it always used the reduced color palette, and you could not override the foreground without the background. Overriding the background is useful for making a simple header line, while overriding the foreground is useful for making a particular text label stand out. ============================================================================ A-Shell Development Notes Version 4.9.937.5 (23 August 2005) ============================================================================ 1. --- (Windows/ATE) Misc. XTREE fixes/improvements: a. Editable cells were not being limited to the maximum number of characters in the column. b. Editable cells no longer allow entry of alphabetic characters if the column type is numeric. c. When using column type X (instant validation of each editable cell), clicking on another cell no longer bypasses the validation logic. 2. --- Fix minor bugs in INMEMO character wrap logic when lines are full and have no spaces to facilitate word wrap, and/or when all the rows are full (preventing the insertion of a new line to accomodate the wrap). 3. --- Fix a problem with ATE autologin to AMOS whereby it would confuse the TDV prompt for the login prompt. ============================================================================ A-Shell Development Notes Version 4.9.937.4 (18 August 2005) ============================================================================ 1. --- The compiler now reports the line number of the FOR statement corresponding to a missing NEXT (when in BasicPlus mode). Previously, it reported the last line of the program (where it finally decided that the NEXT statement was missing). ============================================================================ A-Shell Development Notes Version 4.9.937.3 (18 August 2005) ============================================================================ 1. --- (Windows/ATE) Adjust auto-expansion of small EPRINT fields to only expand from 1 to 2 (and not 2 to 3) to avoid problem with INFLD displays expanding from 1 to 3 columns. 2. --- (Windows/ATE) INFLD no longer requires that the SHIFT and CONTROL keys be released in order to be reactivated. (In other words, you can now hold down the SHIFT and hit TAB repeatedly to back up through multiple fields, assuming your app supports the corresponding EXITCODE.) ============================================================================ A-Shell Development Notes Version 4.9.937.2 (11 August 2005) ============================================================================ 1. --- (Windows/ATE) Fix problem with string quoting logic that caused strings which started and ended with quotes but also contained an embedded quote to be truncated at the embedded quote. This was mainly an issue for the GDI //TEXTOUT command, which would have treated something like this: //TEXTOUT,100,200,"There are 12" in a foot" as if it were: //TEXTOUT,100,200,"There are 12" 2. --- (Windows/ATE) Various problems with the up/down (spinner) control have been fixed: A. It was not starting out with the initial value selected, so you couldn't just type over the value. B. If the field allowed exit via up or down arrow, those keys were not able to be used to adjust the value. Now, in this case, the up/down keys are used by the control (same as clicking on the up/down buttons) and to exit the field you have to us SHIFT or CTRL with the arrow keys. C. "Magic spinners" (which converted buttons to spinners when the mouse was moved over them) have been disabled. D. It was not possible to use left/right arrows or the DEL key. 3. --- (Windows/ATE) INFLD now treats the shifted left and right arrows like Windows does (i.e. selects text) when TYPE |K is specified. In that case, if the ordinary left/right arrows are used internally by the control, you have to use CTRL with the left/right arrows to exit the field. Note that you can use CTRL in place of SHIFT with the arrow keys to get the exitcode action, regardless of whether |K was specified. 4. --- (Windows/ATE) EPRINT now adds one to the width of the control if the width was otherwise going to be only 1 or 2 columns. This should elimiante most of the cases where upper case text is truncated, without causing too much havoc with screen layouts. 5. --- (Windows/ATE) Context menus (aka "right click menus" or "popup menus") can now be displayed under direct application control (rather than waiting for the user to right click). To define such a context menu, use the same exact commands as are described below under edit 934 for defining a context menu that will pop up when the user right clicks. The range of legal menu IDs is -1 to -16. Then, to display the menu, use the AUI_MENU call with opcode 4 as follows: xcall AUI, AUI_MENU, 4, MENUID, "", ROW, COL, "", "", STATUS The ROW and COL parameters mark the position of the upper left corner of the popup menu, and replace what would otherwise be the MSTATE and MTYPE parameters. The ROW and COL parameters are interpreted as relative to the current dialog (if there is one) or else to the main window. The TABDLG program has been modified to display the standard right-click menu when you hit F9 while in the AR tab. ============================================================================ A-Shell Development Notes Version 4.9.937 (10 August 2005) ============================================================================ 1. --- (Windows/ATE) Implement an Up/Down (aka "spinner") control as an INFLD field type. Up/Down controls are like regular numeric edit controls except they have a pair of up/down buttons which can be used as an alternate way of advancing through the choices. The up and down arrow keys can also be used, and act just like clicking on the up/down arrow buttons. Regular keyboard input can also be used. To create an Up/Down control, use the field TYPE ||U along with a numeric TYPE such as #. By default the increment is 1, and the range extends from 0 to 100, with the down arrow increasing the value of the field. You can change the range by specifying a string in the SETDEF parameter, formatted as follows: /n1/n2// or /n1/n2/n3// where n1 and n2 are the low and high limits of the range, and n3, if specified, is the increment (the amount of change you get with each arrow/click). Normally, the down arrow increases the value of the field, but if you want to reverse this, reverse the n1 and n2 values in SETDEF so that the high value is first. If the preloaded value you specify in ENTRY does not fit in the range, it will be changed to the nearest range limit. Increment values must be positive integers, but the either or both of the range limits may be negative. Note that the increment value only affects the amount of change when you click on the arrow; it does not prevent numbers that are within the range but not multiples of the increment from being entered. For example, if SETDEF = "/-20/50/10//", the range is from -20 to 50, and the increment is 10. But the user may keyboard in a value such as 13. In that case clicking on the up/down arrows will increment/decrement the field by 10 (i.e. to 3 or 23 in this case). Up/Down controls revert to the form of a regular edit control when not active. Note that the Up/Down control is internally separate from the edit control. This is probably of no concern to anyone except that it will show up in a control dump, independent of the associated edit control. 2. --- (Windows/ATE) Preliminary support for playing AVI files (sometimes called "animated" controls). Use the standard AUI, AUI_CONTROL subroutine, except for the following: - Set the CTYPE parameter to 0 - Set the CLASS parameter to "SysAnimate32" - Set the WINSTYLE parameter to 4 (for auto play) or 0 to just show the first frame. The SROW and SCOL parameters define the upper left corner, as with other controls. But the EROW and ECOL parameters have no effect; the height and width of the control is determined by the AVI framesize. For example: xcall AUI,AUI_CONTROL,CTLOP_ADD,ID,"clock.avi", MBST_ENABLE, & 0, "","",STATUS,SROW,SCOL,EROW,ECOL,-2,-2,0,0,"","",0, & "SysAnimate32",4 If you specify WINSTYLE=4 (last parameter in example above), then it will start playing automatically. You can stop and start it using the change opcode with the special CSTATE flags MBST_PLAY (&h4000) and MBST_STOP (&h8000), for example: xcall AUI,AUI_CONTROL,CTLOP_CHG,ID,"", MBST_STOP or xcall AUI,AUI_CONTROL,CTLOP_CHG,ID,"", MBST_PLAY Note: this is a preliminary implementation and may be subject to change. One concern is that the control does not always display initially unless the auto play option is specified. Another is that there is currently no way to specify a starting or ending point in the sequence of frames. Still another is that there is no way to scale the images. 3. --- Fix a bug in INMEMO MMO_OTX operation where it would truncate the output at the end of a line that was completely filled. 4. --- (Windows/ATE) The time picker control now bases its format on MAXCHARS rather than XMAX, allowing you to use XMAX to set the physical display width of the field. Note that in this case you may want to use TYPE ||] to defeat the automatic widening of the field to accomodate the extra formatting features of the time picker. (This behavior matches the date picker and other field types as well.) ============================================================================ A-Shell Development Notes Version 4.9.936.3 (09 August 2005) ============================================================================ 1. --- Fix a problem with DIMX generating an "out of memory" error when a program or SBX is re-executed without loading a fresh copy from disk. 2. --- XCALL MIAMEX,MX_SCRNPIC,FLAGS (screen picture, MX_SCRNPIC=65) now supports a new flag value, 64, which causes the trailing blanks to be stripped from each line of the output file. 3. --- Fix a problem with DIMX not working when a program or SBX re-executed from a previously loaded copy. (Because DIMX modifies the map table in memory, the module needs to be reloaded; this is accomplished automatically be removing the module from memory on exit. The only downside to this is that any SBX which uses DIMX will always get reloaded on each XCALL, which will slow it down a bit.) 4. --- (Windows/ATE) INFLD time picker, when TYPE O or XMIN=0, now starts with the checkbox checked unless the preload value is blank. 5. --- (Windows/ATE) Clear up a window of opportunity for poorly timed typeahead to interfer with ATE commands. (Requires updating both server side and ATE to get full effect, although either side can be updated individually without breaking the interface.) ============================================================================ A-Shell Development Notes Version 4.9.936.2 (08 August 2005) ============================================================================ 1. --- (ATE) Fix a problem which caused corruption of the typeahead buffer when the number of characters in the typeahead buffer was more than was being returned as a response to the current ATE command. Most likely this resulted in replication of characters actually typed, rather than random garbage. 2. --- MIAMEX,147 (count lines and max line length in file) now has an optional argument to return the longest line length not counting trailing blanks: XCALL MIAMEX,MX_FLINES,CHAN,LINES{,LINELEN{,SLINELEN}} CHAN is the file channel that the file is open for sequential input on. LINES returns the number of lines. LINELEN returns the length of the longest line, including trailing spaces. SLINELEN returns the length of the longest line, without trailing spaces. 3. --- EZTYP was throwing an exception when you tried to use it on a non-existent file. 4. --- (WINDOWS/ATE) XCALL IMAGE (or XCALL AUI,AUI_IMAGE) now supports millirows. Note that as before, and unlike the case with normal controls, the ending row or millirow includes the leading. So, for example, an image with EROW = 4000 will touch an image with SROW = 4000. Also, removing an image from a dialog now causes the dialog to be repainted immediately. Previously, the image would appear to remain until some other event caused the dialog to be repainted. 5. --- (WINDOWS/ATE) INFLD time picker enhancements: A. If TYPE O (optional) or XMIN=0, the time field will have a check box allowing you to select whether the field is to be valid or not. B. The format of the time in the active time picker control now more closely matches the format of the time returned (and of the time display when not active). Previously, the active display always used HH:MM:SS A/PM format. Now, for example, TYPE t and XMAX=5 will use military HH:MM format. ============================================================================ A-Shell Development Notes Version 4.9.936 (03 August 2005) ============================================================================ 1. --- Fix scrolling problem in INMEMO with memo widths > 96 columns 2. --- Fix bug in MIAMEX,96 (ShellExecute) relating to environment variables. 3. --- EZTYP now treats a 0 byte file same as an ordinary blank file (previously it said it could not display it). 4. --- DIMX now works as you would expect in the context of SBX calls. That is, a DIMX in a main program is not affected by calls to SBX routines, and a DIMX in an SBX routine is automatically freed when that SBX returns. Previously, DIMX allocations were getting cleared on return from an SBX, even when they weren't created in that SBX. 5. --- (Windows/ATE) A new GDI printing directive is available for passing raw ESC codes to the printer in the midst of GDI output: //ESCAPE,B1,B2,B3,B4,... (up to B14 max) The parameters B1 each should be a decimal value representing the value of a single byte. Parameters B2 thru B14 are optional. This command is most useful for passing PCL commands to a PCL-compatible printer when you can't figure out how to accomplish the same thing using GDI commands. For example, laser printers normally have a built-in physical margin of 0.25 inches around the outer edit of the paper. But there is a PCL command to adjust this so that the first column printed is closer or farther from the edge of the paper. (This is useful for calibrating a printout to a form.) The PCL to move the left margin 300 decipoints to the right is: <ESC> &l300U If you try to just embed this command in a GDI printout, it will probably be ignored by the driver. But using the //ESCAPE command, you can embed it as follows: //ESCAPE,27,38,108,51,48,48,55 6. --- (Windows/ATE) XTREE wasn't supporting F7 as an exitcode. 7. --- (Windows/ATE) TYPE ||S (combo box where you can only select from the list, rather than being able to type your own value) now allows you to clear the entry with the DEL key if TYPE O (optional) is specified. 8. --- FOR/NEXT was not being allowed within an IF/ENDIF block if the /RC compil switch was specified. 9. --- (Windows/ATE) //TEXTOUT with a null string was causing the //TEXTOUT command to be printed rather than just the null string (i.e. nothing). 10. --- VUE.LIT was trying to execute the GO command even when it failed to load the file (i.e. due to file locking or some other error). 11. --- (Windows/ATE) A new variation of the PRINT command has been added: EPRINT. EPRINT is similar to DPRINT, except that it uses an EDIT control to display the string, rather than a sunken static text control. As with DPRINT and TPRINT, they will compile as if they were PRINT statements if you use the /RC switch. ============================================================================ A-Shell Development Notes Version 4.9.935 (20 June 2005) ============================================================================ 1. --- (Windows/ATE) The reset option on the Settings menu now closes the ATE reverse channel if it is open. (This should revert communication back to the keyboard channel.) Note: this requires A-Shell 4.9.935+ on the UNIX side as well. 2. --- (UNIX) Standalone compiler now looks in the current directory for ++include files if not found in the specified directory. (This is mainly useful for bootstrap compiling when you don't have a working A-Shell environment to support ppn's and ersatz directories.) 3. --- Setting the DEBUG flag in an SBX now affects the calling program. Previously, the flag was passed down to SBXs but any changes made there were not passed back up. 4. --- (ATSD) The IP address (shown in SYSTAT/I and returned by MIAMEX,128) is now the IP address of the client workstation. Previously it was the IP address of the server. This also affects the way the licenses are counted, since ATS permits up to 5 clients with the same IP address to share a node license. 5. --- (ATSD) Certain kinds of aborts (related to inactivity timeout or telnet disconnect) were not always completely shutting down the A-Shell job, which was leaving unwanted job entries in the job table and also unwanted ashw32.exe processes still running. Note that if you set TRACE=SIGNAL in the miame.ini (as you probably should), the ashlog.log file will note occurrences of timeouts and disconnects and indicate whether they shut down properly or not. ============================================================================ A-Shell Development Notes Version 4.9.934.5 (17 June 2005) ============================================================================ 1. --- (Windows/ATE) Fix bug related to the internal millirow conversion causing controls to disappear. 2. --- Fix bug with processing coname.dat if there was no LF at the end of the line. (Was reporting bad company name.) 3. --- (Windows/ATE) Back out a very recent change in the way dialogs were related to the main window that was making it too easy to get the dialog separated from the main window. 4. --- (Windows/ATE) MIAMEX,96 (MX_SHLEXC) now supports embedded environment variables (using the %env% notation, e.g. %temp%\test.doc). 5. --- (Windows/ATE) Close a loophole where a really screwed up COLDEF in XTREE could cause a GPF. ============================================================================ A-Shell Development Notes Version 4.9.934.3 (14 June 2005) ============================================================================ 1. --- (Windows/ATE) Fix further problems with displaying icons and bitmaps due to millirows. 2. --- (Windows/ATE) Dialogs created with the MBF_DLGNOPARENT style (explicitly or implicitly because the main window was invisible) now contain the application icon. This is needed to visually identify the application in the Alt-Tab list. ============================================================================ A-Shell Development Notes Version 4.9.934.2 (14 June 2005) ============================================================================ 1. --- (Windows/ATE) Clean up various internal issues related to millirows. All controls are now converted to millirow coordinates automatically. The only effect this will have on existing programs is that MBF_ALTPOS no longer affects buttons like it used to. Previously, it made them a bit shorter in an attempt to make the fit underneath a groupbox at the bottom of a dialog. Now, you can accomplish the same thing more easily by adjusting the millirow coordinates of the button. 2. --- (Windows/ATE) Fix an obscure problem which was causing INFLD to go into edit mode in some cases where it should have merely been displaying a control. 3. --- (Windows/ATE) AUI_EVENTWAIT flag EVW_VAREXIT was causing left arrow to exit when it should have had no effect on left arrow. 4. --- (Windows/ATE) Fix a problem with the backspace (rubout) key having a double action in INFLD. 5. --- (Windows/ATE) Fix a problem with right-click clearing a marked area, making it difficult to use the Copy option on the popup menu. Also fix problem in which clicking on window to activate it would sometimes leave a mouse mark. 6. --- (Windows/ATE) Fix an XTREE problem with inability to set the initial row via XTR'XROW if XTR'XCOL=0 and there were editable cells. Also, if the first column is editable, setting XTR'XROW=n and XTR'XCOL=0 should put the selection bar on the row (or first cell, depending on the SELECTSTYLE option) but it will not initially be in edit mode. You would need to click on it or navigate to next editable cell and back. If you want to start in editing mode, set XTR'XCOL to >0. 7. --- (Windows/ATE) When a dialog box is created and the main window is invisible (e.g. was launched with -z or made invisible by an AUI_WINDOW call), the dialog box is made into a top level window so that it shows on the task bar. You can also force a dialog to have the top level property by adding the flag MBF_DLGNOPARENT (32, same as MBF_LFTEXT) when it is created. But in that case, both the main window and the dialog will appear on the task bar. Currently there no way to convert an existing standard dialog to a top level one. 8. --- (Windows/ATE) Fix problem with using millirows to display fields in INFLD (position was getting rounded to nearest row). 9. --- OPTIONS=LONGDIR can now be added to the miame.ini to force SET LONGDIR (which just causes DIR.LIT to use the 10.3 format by default). Note that you need DIR.LIT 3.0(135)+ and SET.LIT 1.2(145)+ for the LONGDIR option to work correctly. 10. --- (Windows/ATE) Clean up some XTREE issues with exiting from an editable cell using a key that exits both the cell and the XTREE in one step. Currently, only Fx (function keys, assuming FLAGS contains XTF_FKEY) and Control-HOME (XTF_HOME) and Control-END (XTF_END) support this. Previously, the function keys would exit but the cell was not updated. Note that Control-HOME and Control-END will return XROW & XCOL pointing to the cell that you exited from, but the XTR'NAVCOD and XTR'NAVMASK will cause the inter-cellular navigation operation (i.e. move to first or last cell of the XTREE) to be performed on re-entry. To defeat that, set XTR'NAVCOD to 0. =========================================================================== A-Shell Development Notes Version 4.9.934.1 (10 June 2005) ============================================================================ 1. --- Fix a memory overflow condition leading to an exception when using MX_FLSET in a main program. Problem has been around for awhile; not sure what else was affected. ============================================================================ A-Shell Development Notes Version 4.9.934 (9 June 2005) ============================================================================ 1. --- (Windows/ATE) INFLD now supports millirows for the ROW parameter. Note that this only allows changing the vertical position of the control, not its height. 2. --- (Windows/ATE) XTREE Popup menus now support separators. The syntax is to set the text part of the definition to a string of dashes (e.g. "-----") and the command part of the definition to null. (It doesn't matter how many dashes, as long as no other characters are included.) The updated XTRA5 program offers this example: COLDEF = COLDEF + "0~0~ ~S~PopupMenu=" & + "Try On,%VK_xF501%;Backorder,%VK_xF502%;Discontinue,%VK_xF503%;" & + "-----,;Shoplift,%VK_xF504%~~" ! [116] add separator This defines a popup menu with 4 items (Try On, Backorder, Discontinue, and Shoplift), with a separator bar between the last two. Note that there should be no space between the dashes, comma, and semicolon in the separator part of the definition string. 3. --- (Windows/ATE) XCALL AUI,AUI_MENU (or MIAMEX,71 or TAB(-10,21)) now support the creation of popup menus (aka "right-click" or "context" menus) for the main window and for dialogs. The syntax is the same the same as for the "traditional" method (where you use separate XCALLs for each menu item) rather than the "simplified" or "file-based" method, with the following differences: A. There can be only one context menu for the main window and one for each dialog. When the menu is created, if there is a dialog active, then it becomes associated with the dialog; otherwise it becomes associated with the main window. B. The menu ID of the context menu must be negative (typically -1 for the main window, -2 for the first dialog, etc.) C. To add clipboard operations copy and paste to the popup menu, use the MBF_CMDLIN format with the special commands "$COPY" and "$PASTE". ($CUT doesn't really apply in this context. D. Defining a context menu does not automatically change the cursor to an arrow, but you can do that with the TAB(-1,160);chr(32); command and TAB(-1,160);chr(48) to set it back to an I-beam. E. You can delete the context menu with a single xcall AUI,AUI_MENU with OPCODE=3 and TEXT="*". F. The context menu will be active when the cursor is over the window or dialog, but not over a control which has its own click processing. Two sample programs from SOSLIB have been updated to illustrate this feature: ASMENU.BAS adds a context menu to the main window, and even illustrates disabling a selection on the menu. TABDLG shows a context menu attached to the dialog. ============================================================================ A-Shell Development Notes Version 4.9.933.1 (8 June 2005) ============================================================================ 1. --- (Windows/ATE) Fix problem with TAB(-1,0) not actually deleting controls. (It cleared them, but they weren't really gone and would come back at inopportune times.) ============================================================================ A-Shell Development Notes Version 4.9.933 (7 June 2005) ============================================================================ 1. --- (Windows/ATE) New field added to XTREE XTRCTL parameter: SKEY,S,10 If non-null, and the current XTREE is in single-select mode, and the XTR'COLUMNACTIVE parameter is not zero, then the initial selection is established by searching the active column for the specified string (overriding the ANSWER parameter, which normally sets the initial selection.) XTREE.MAP edit [112] has been updated to map the new field, which was added to the end (reducing the FILL size by 10). The last several fields of XTRCTL are now: ... MAP2 XTR'PARENTID,B,2 ! ID of parent control (e.g. TAB) MAP2 XTR'SHOW3D,B,1 ! 1=use 3D style [105] MAP2 XTR'HIDEHEADER,B,1 ! 1=hide header [106] MAP2 XTR'XNAVCOD,B,1 ! [109] cell editing navigation code MAP2 XTR'XNAVMASK,B,1 ! [109] internal use MAP2 XTR'XROW,B,4 ! [108] current row MAP2 XTR'XCOL,B,1 ! [108] current col MAP2 XTR'EXPANDLEVEL,B,1 ! [110] 1=all level 0, 2=all levels MAP2 XTR'SKEY,S,10 ! [112] search key MAP2 XTR'UNUSED,X,8 ! unused [112] was 18 The latest XTREE.MAP is available in [907,16] of the SOSLIB release 111. The XTRA3 sample program (in [908,21] of the SOSLIB) has been updated to allow you to set the SKEY field. Notes: A) SKEY does not require a trailing null B) A match will succeed as long as the contents of SKEY matches the start of the data in the column (i.e. "Ab" will match "Abbey Road"). C) SKEY is not cleared or set by XTREE 2. --- (Windows/ATE) XTREE column sort for dates now supports the SBR=CCYY:## parameter in the MIAME.INI for determining the century if only YY is specified. The default value is equivalent to SBR=CCYY:60, meaning that any YY value of 60 or higher is assumed to 19YY; otherwise it is assumed to be 20YY. The XTRA3 sample program has been updated to show a mixture of YY and CCYY values to confirm the new sorting logic. 3. --- (Windows/ATE) A-Shell command line switch -zt is similar to -z (hide window) except that the task appears in the Alt-TAB list. 4. --- (Windows/ATE) Millirows system has been altered so that the EROW and SROW coordinates are more logically consistent with each other. (WARNING: this will affect existing programs using millirows!!!) In the new system, in order for a control to occupy a single "row", its EROW coordinate should be 1000 millirows higher than the SROW coordinate. (In the old system, millirows were like standard rows in that SROW=EROW was interpreted to mean that the object was one row high.) Some examples will make this clear: SROW=2 : EROW=2 : Control is one row high. SROW=2000 : EROW=3000 : This is equivalent to the previous example. Note that when converting EROW from standard rows to millirows, add 1 and then multiply by 1000. When converting SROW, just multiply by 1000. SROW=2100 : EROW=3100 : This is equivalent to the previous example, except that it is shifted down by 1/10 of a row (100 millirows). SROW=2400 : EROW=2400 : This control is only 1 millirow high, which only makes sense except in the case of rectangles, i.e. (SZCLASS="STATIC", DWSTYLE=SS_BLACKRECT or SS_GRAYRECT or SS_WHITERECT). This new system makes millirows more logically analogous to pixel coordinates, except for the fact that the external leading is still subtracted from the bottom coordinate of the control. For example, consider two controls in adjacent rows. The first is specified as SROW=3000 : EROW=4000 and the second is SROW=4000 : EROW = 5000. Do the two controls touch? Normally, no. This is because we subtract the external leading from the resulting bottom coordinate. So if the external leading was 6, the two controls would still be separated vertically by 6 pixels, even though the bottom coordinate of the top control matches the top coordinate of the bottom control. This is a bit strange perhaps, but is very handy if you purpose in using millirows is simply to shift an object up or down by a small amount. To cancel the automatic adjustment of the bottom coordinate to account for the external leading, specify the MBF_ALTPOS flag in the CTYPE parameter. When used in conjunction with an EROW specified in millirows, the usual interpretation (i.e., causing an "aesthetic adjustment" to the size or position of certain control types) is changed to simply disable the automatic subtracting of the leading from the bottom coordinate. The 1.0(103) update of the GUILIN sample program in the SOSLIB illustrates this the difference by drawing a pair of columns made up of lines 1000 millirows high (in the lower right corner of the screen). The first column has gaps between the lines due to the leading; the second column uses MBF_ALTPOS to eliminate them. Note that we could also have eliminated them by just adding more to the EROW coordinate; this is less convenient though since we don't have a good way of knowing the leading or converting it from pixels to millirows. (Overlapping wouldn't matter for lines but it might for some other controls.) NOTES ON MILLIROWS: A. Millirow 1000 is the top of the usable area of a dialog. It might have been more logical for millirow 0 to have been the top, but this offset does provide some advantages. One is that it seems more consistent with the fact that the first row in standard coordinates is 1, not 0. This makes it somewhat easier to mentally convert from ROW x to the equivalent millirow (1000x), and dovetails nicely with the fact that static text is currently aligned at the top of the control area. Consequently, if you want to shift a text label up by 1/4 row, just multiply the SROW by 1000 and subtract 250. Another advantage is that it eliminates the ambiguity that would otherwise arise if trying to position a control within 200 millirows of the top of a dialog. (If you needed to use a millirow value of between 1 and 200 to do that, it would intepreted as a standard row.) B. In the main window (i.e. not a dialog), there will be left, top, right and bottom margins which are made up of the pixels left over after determining the largest integer grid size that will accommodate the rows and columns required. Thus, millirow 1000, just like row 1, will not necessarily be the very top of the window. You can specify a millirow value of between 200 and 1000 to shift the control up into that margin space, although it may get clipped if your adjustment is more than the margin. 5. --- (Windows/ATE) XTREE wasn't returning XTR'XROW and XTR'XCOL values for editable checkboxes with validation if you clicked on them. (It was only returning the information if you navigated to them by keyboard.) Also, it now returns XTR'XROW set to the selected row if you exit from an XTREE containing editable cells by some means other than validating an editable cell. You can distinguish between the cases by the value of EXITCODE. (If EXITCODE=-48, then it exited to validate a cell; if EXITCODE=0, then it exited because user selected a row.) Also, fix a problem in which the XTR'XROW returned during editable cell validation was correct after using horizontal navigation keys to wrap from one row to another. 6. --- (Windows/ATE) INFLD wasn't redisplaying a combobox control correctly after removing characters with the Rubout (aka "Backspace") key. ============================================================================ A-Shell Development Notes Version 4.9.932.1 (2 June 2005) ============================================================================ 1. --- (Windows/ATE) Fix a annoyance with combo boxes positioned just slightly above an XTREE disappearing while the XTREE is visible. 2. --- (Windows/ATE) Checkbox controls created with INFLD may now contain more text in the label portion than would otherwise be allowed by the number of columns. (This allows you to squeeze longer labels into a shorter space, but increases the risk of them being truncated when displaying in a lower resolution or DPI.) ============================================================================ A-Shell Development Notes Version 4.9.932 (31 May 2005) ============================================================================ 1. --- (Windows/ATE) Introduce another new GDI printing command: //TEXTRECTANGLE,left,top,right,bottom bla bla bla bla bla bla bla bling bla bla bla bla bla bla //TEXTRECTANGLE This command is similar to the //TEXTINDENT command, both in what it is used for and also in the fact that it consists of a starting and ending command (the ending command has no arguments), with any number of lines of text in between the two. //TEXTRECTANGLE formats the text (up to the ending //TEXTRECTANGLE) to fit in within the rectangular coordinates provided, applying word wrap to the lines as needed. Note that any existing CRLF line terminators will be respected (so in the example above, the word "bling" will mark the end of a line, no matter how the rest of it formats). If the text does not all fit in the rectangle, the last word will be printed with an ellipsis (...) following it. See MIAMEX,MX_GDICALC below for information on calculating in advance how much text will fit. See the SOSLIB program MMOGDI for an example. 2. --- (Windows/ATE) A new MIAMEX function (148 or MX_GDICALC) performs various calculations on the length and/or height of a string as it will appear when printed. In the case of a rectangle, it will also break the string into two parts, the first of which will fit within the rectangle (leaving the second part to be printed in another space or on the next page). Syntax: XCALL MIAMEX,MX_GDICALC,OP,HANDLE,STATUS{,params} The HANDLE variable (F6 or B4) is returned by the open operation (OP 1) and must be specified to all the others. STATUS will be returned from each operation, with 0=success; all others are errors, with the most typical being: -1 = unable to open printer context (bad printer name or failure to first open printer) -2 = bad map mode -3 = error setting font -4 = insufficient number of parameters passed -5 = illegal opcode others are the negative of the system error number OP 1 (MXGDI_OPENPTR) Open a printer device context. XCALL MIAMEX,MX_GDICALC,MXGDI_OPENPTR,HANDLE,STATUS,PRINTER,MAPMODE PRINTER (string) may be any form of printer name allowed by SPOOL.SBR (e.g. a null string for the A-Shell or Windows default; a printer init file name, a printer share name, or a printer local driver name). MAPMODE must be one of the map modes allowed in the GDI //SETMAPMODE statement (LOENGLISH, HIENGLISH, LOMETRIC, HIMETRIC, TEXT, TWIPS, DECIPOINTS). OP 2 (MXGDI_SETFONT) Choose a font XCALL MIAMEX,MX_GDICALC,MXGDI_SETFONT,HANDLE,STATUS,POINTSZ, {,FACE,PITCHFAM,CHARSET,WT,STYLE} This is equivalent to the GDI //SETFONT statement (which see in the Development Guide for parameter information). Once the font is set, it remains set until changed with another OP 2 call. OP 3 (MXGDI_CALCRECT) Calculate rectangular text metrics XCALL MIAMEX,MX_GDICALC,MXGDI_CALCRECT,HANDLE,STATUS, & LFT,TOP,RGHT,BTM,MEMO$,HEIGHT,OVERFLOW$ OP 3 calculates how much of the text in the MEMO$ variable will fit inside the rectangle defined by LFT,TOP,RGHT,BTM. If it all fits, then HEIGHT will be returned set to the height needed. Otherwise, MEMO$ will be truncated at the length that will fit, and the remainder will be returned in OVERFLOW$. HEIGHT will be set to BTM-TOP (i.e. the height of the specified rectangular area.) This command is useful in conjunction with //TEXTRECTANGLE for determining in advance how tall the rectangle must be (either for drawing a border rectangle with //RECTANGLE, or for breaking a long memo in half, putting the remainder on another page.) OP 4 (MXGDI_CALCLEN) Calculate length of a string XCALL MIAMEX,MX_GDICALC,MXGDI_CALCLEN,HANDLE,STATUS, & MEMO$,LENGTH OP 4 is similar to OP 3, but just tells you how long the specified string will be when printed in the current printer/font. MEMO$ is assumed to be a simple string with no embedded CRLF characters. OP 5 (MXGDI_CLOSEPTR) Close printer context XCALL MIAMEX,MX_GDICALC,MXGDI_CLOSEPTR,HANDLE,STATUS OP 5 closes the printer context, and MUST be done before printing to it. See the sample program MMOGDI.BP and the updated sample text file TSTGDI.TXT in the SOSLIB for examples of using XCALL MIAMEX,MX_GDICALC and /TEXTRECTANGLE. 2. --- (Window/ATE) TAB(-10,23);<windows-command>;chr(127); now supports a new macro $DEL to delete a file. For example: ? TAB(-10,23);"$DEL %ATELOCALDIR%\myfile.dat";chr(127); input "",A This would delete the file myfile.dat from the directory specified by the environment variable ATELOCALDIR (which is set by ATE to point to its FTP Local Directory). The return code is CR for success or ^C for failure. Note that a non-existent file is treated as success, so the only error would be if the file existed but could not be deleted. ============================================================================ A-Shell Development Notes Version 4.9.931.4 (26 May 2005) ============================================================================ 1. --- INMEMO now (properly) supports the EXTOTH flags for defining alternate exit keys when in normal memo mode. Previously, it worked properly in menu mode, but in normal memo mode, the keys would exit but not set the EXTCOD field. ============================================================================ A-Shell Development Notes Version 4.9.931.3 (25 May 2005) ============================================================================ 1. --- (Windows/ATE) The CMDFLG=4 option (described below as item 4 under 931.1) was not working as described. Now, you can use either CMDFLG=4 or TYPE ||b to get the described effect. Note that neither one has any effect on INFLD controls other than checkboxes, so you could add them indiscriminately, although note that doing so would defeat your ability to display new data in existing checkboxes. (You'd have to first delete the checkboxes and let them be recreated.) 2. --- (ATE) The above logic (CMDFLG=4) now works over ATE. ============================================================================ A-Shell Development Notes Version 4.9.931.1 (24 May 2005) ============================================================================ 1. --- (Windows/ATE) Millirows were not working for controls inside of groupboxes, or in INFLD. Note, however, that millirows can only be used with GUI mode. (Don't try them with text mode INFLD.) 2. --- (Windows/ATE) XTREE opcode 4 (re-select) was not collapsing the multilevel rows when XTR'EXPANDLEVEL=0. Note that this "fix" eliminates the ability to preserve the existing expand/collapse levels when re-selecting from an XTREE (unless you use the new XTF_NOREDRAW flag). 3. --- (Windows/ATE) A new INFLD CMDFLG option (4) causes checkboxes to ignore the contents of the ENTRY parameter if the checkbox already exists. (This simplifies the application logic needed to deal with clicking on checkboxes that generate exitcodes.) ============================================================================ A-Shell Development Notes Version 4.9.931 (22 May 2005) ============================================================================ 1. --- (WINDOW/ATE) Introduce a new GDI printing command: //SETPENEX,<style>,<thickness>{<r>,<g>,<b>} //SETPENEX is an EXtended version of the existing //SETPEN, to which it is identical except for the following: A) Contrary to the documentation, the <thickness> parameter in //SETPEN was not based on the units established by //SETMAPMODE. Instead, //SETPEN always uses units of pixels. (Although that was really a mistake, changing it now would no doubt have undesirable consequences for existing programs.) //SETPENEX does interpret the <thickness> parameter as being of the units established by the previous //SETMAPMODE statement. B) //SETPENEX supports additional <style> arguments to specify the type of endcaps and line joining options. The complete list (now defined in ashell.def) is: PS_SOLID = 0 ! (existing) solid pen PS_DASH = 1 ! (existing) ------- PS_DOT = 2 ! (existing) ....... PS_DASHDOT = 3 ! (existing) _._._. PS_DASHDOTDASH = 4 ! (existing) _.._.._ PS_ENDCAP_ROUND = 0 ! (new) round endcaps (default) PS_ENDCAP_SQUARE = &h0100 ! (new) square endcaps PS_ENDCAP_FLAT = &h0200 ! (new) flat endcaps PS_JOIN_ROUND = 0 ! (new) round joins (default) PS_JOIN_BEVEL = &h1000 ! (new) bevel joins PS_JOIN_MITER = &h2000 ! (new) miter joins A new sample print file, SETPEN.TXT is now available in the SOSLIB to illustrate the new options. Note, however, that the join options do not appear to have any effect (or at least I don't know what they do.) They have been implemented and documented to match the underlying Windows ExtCreatePen() function, but it isn't clear what they are for. The endcap options are quite useful though. By default, line segments have rounded endcaps consisting of a semicircle with diameter equal to the width of the line, making them more significant as the line thickness increases. The square option makes the endcaps square, which is equivalent to extending the lines by half their thickness, on each end. This may seem illogical at first (i.e. why not just ask for a longer line?) but is actually useful for making complete corners. If you don't want any endcaps, then use the flat option (which is probably what you were expecting in the first place). 2. --- Implement an enhanced version of the DIM statement, called DIMX, with the following syntax: DIMX <id>(<subscripts>){,type{,size}} e.g.: DIMX XTDATA(COUNT),S,XTLEN DIMX is nearly the same as DIM, except: A) It accepts optional type and size rather than being limited to F6 and string with size determined by STRSIZ. B) It allocates the memory needed out of the system memory pool, rather then from the user partition. *** WARNING: DIMX creates a runtime token that will not be recognized by earlier version of the runtime system, so if you compile a program using DIMX in 4.9.931 or higher, then run it under a previous version of A-Shell, you'll get an "invalid syntax code" (basic error 34) when you hit the DIMX statement. There is no statement to "UNDIM" an array, although the memory used will be automatically freed when the current RUN program terminates. Also, you cannot redimension an array. 3. --- New MIAMEX function MX_FLINES (147): XCALL MIAMEX,MX_FLINES,CHANNEL,LINES{,WIDTH} For a file opened for sequential access, this returns the number of lines in the file, and optionally the width of the longest line. LINES will be set to a negative number on error (-1 = file not open, -x = system error # x). The internal file pointer is left at the start of the file. LWIDTH includes line terminator characters (CR,LF) so may be one or two characters larger than the actual number of printable characters on the long line. This operation could be useful in conjunction with DIMX to first get the dimensions of a file and then DIMX and array to hold it. The MIAMEX sample program (in [908,31] of the latest SOSLIB) illustrates the two operations when you select function 147. 4. --- Fix another ancient but minor/obscure bug in FLOCK.SBR. This one occurred if a request to release a record (Action 5) was issued when there were no queue blocks in use at all in QFLOCK.SYS. The operation didn't fail, but it generated a rebuild of the QFLOCK.SYS, which wasn't harmful, but under slow LAN environments, could have caused a noticeable slowdown. 5. --- (Windows/ATE) Fast mode (TYPE "F") checkboxes now treat mouseclicks the same as a spacebar (i.e. toggles the checkmark and exits). 6. --- (Windows/ATE) New XTREE flag (added to XTREE.DEF): DEFINE XTF_NOREDRAW = &h08000000 ! disable redraw on opcode 4 When used with opcode 4 to reselect from an existing XTREE, it disables the normal redraw operation, thus preserving the scroll position, column alignment, etc. This makes for a "cleaner" re-entry into the control, but only be used when you haven't changed any of the XTREE parameters which would affect the display. The sample program XTRA3 (in [908,21] of the SOSLIB) has been updated to illustrate this. To test, start by creating a control (opcode 0), load in the full 47 items, and toggle the Modeless option. Once in the control, adjust the column sizes, scroll down and select an item(s) and hit ENTER or doubleclick to exit. Then use opcode 4 (select) and check the box with the option to disable the redraw. 7. --- (Windows/ATE) Control coordinates now support "millirows". When the start row or end row coordinate to AUI_CONTROL or TAB(-10,20) commands is greater than 200, it is assumed to be in units of "millirows" (1000 to the row) rather than rows. This allows the vertical position and size of a control to be more finely adjusted than is possible with integer rows or even with the MBF_ALTPOS option. Notes: a. This option applies only to the row coordinates, not the column coordinates (where such fine tuning is generally not necessary). b. To avoid confusion, millirows should probably not be used in conjunction with the MBF_ALTPOS on the same control. c. In general you will get the same results whether you specify a row value in units of rows or multiply it by 1000. There are some exceptions, though, where the default position of a row is adjusted up or down based on some internal logic, and in such cases, switching to millirows may defeat the internal logic, causing the line position to change more than expected. For example, with single row horizontal line controls, the default position is in the middle of a row. If you switch from, say, row 5 to millirow 5000, the second line will be half a row higher than the first. In general though, if you want to move a control up or down by a slight amount, multiply the srow or erow value by 1000 and then offset it by some fraction of 1000. The sample program GUILIN has been updated to show some examples of this. 8. --- (Windows/ATE) Fix a problem in which controls using the MBF_ALTPOS style were not always being resized properly when the window was resized. 9. --- (ATE) Fix a problem with the TAB(-10,45) command not working if the reverse channel was active. ============================================================================ A-Shell Development Notes Version 4.9.930.1 (19 May 2005) ============================================================================ 1. --- (WINDOWS) Adjust message box so that by default, it stays on top of other modal dialogs without being on top of all applications. Previously, it was possible for the message box to become hidden underneath another A-Shell dialog as a result of various ALT-TAB or clicking actions. 2. --- (UNIX) Fix a problem which has crept into the preemptive ITC subsystem, interfering with CHAT messages. Also requires update to CHAT.LIT 1.2(120). 3. --- XCALL MIAMEX,MX_LASTLNO,LAST'LINENO returns last line number (MX_LASTLNO defined in ashell.def as 146). 4. --- (ATE) TAB(-10,45);ENV$;chr(127); will return (in the kbd buffer) the definition of the specified environment variable as defined to the ATE client. In addition to the proper environment variables, the command will also recognize two special ones that are only understood by this command within the ATE client: %ATEEXE% (the full filespec of the client executable, e.g. "c:\Program Files\MicroSabio\ATE\bin\ashw32.exe") and %ATEVER% (the version string for the client executable, e.g. "4.9(930)-1"). 5. --- Fix two compiler bugs: A. A defined symbol with a trailing $ was not always getting recognized. B. Mapping a variable DEBUG was not disabling the new DEBUG keyword. New version is 1.1.299 for which an update of COMPIL.EXE for the A-Shell Editor has also been released. 6. --- (Windows) Eliminate a stack overflow situation when certain kinds of errors occurred during startup before the main window was visible. This was most noticeable when the miame.ini or ash file was on a network device that was not accessible. 7. --- (UNIX) Fix problems with CHAT operation; also requires Pshell 1.4(157) and CHAT.LIT 2.2A(120) or higher. ============================================================================ A-Shell Development Notes Version 4.9.930 (16 May 2005) ============================================================================ 1. --- (XTREE) XTREE parameter XTR'EXPANDALL (see 928 item 9) has been renamed to XTR'EXPANDLEVEL and the meaning has changed slightly. 0 still means that none of the items are expanded (unless needed to display the preselected item). But any other value (1-9) now causes XTREE to expand just those levels. For example, if the XTREE has 4 levels, and you set XTR'EXPANDLEVEL to 2, it will expand levels 0, 1 and 2. 9 expands all levels (equivalent to the previous meaning of 1). A new sample program, XTRA2A (variation of XTRA2) illustrates this feature by creating a 4 level tree and prompting you for the XTR'EXPANDLEVEL value to use. 2. --- (XTREE) Fix bugs relating to use of column type "O" (merge with column to the right) and "o" (allow column to left to merge into this one). They were not working when used together, and either one was also interfering with some other column flags. The new sample program XTRA2A also illustrates the use of columns that combine both "O" and "o" flags. 3. --- (XTREE) A new column type, "f", has been added to allow specification of font attributes on a row-by-row basis. The concept is similar to the color column "c" (and doesn't need to be defined prior to other columns). The "f" column should be 1 character wide, and contain a space, 0, 1, 2, 3, or 4. Space or 0 causes the default font to be used for that row. 1 - 4 causes the row to use the corresponding, previously defined font. (Note that a row font will override any column fonts.) To define the fonts use for special rows, just use the normal COLDEF Font={face},{attr} and Scale=<percent> attributes with dummy columns (defined with position and size 0). For example: COLDEF="0~0~x~H~Font=Playbill~~" ! row font #1 COLDEF=COLDEF+"0~0~x~H~Font=,2048~Scale=200~~" ! row font #2 COLDEF=COLDEF+"1~1~x~fH~~" ! font column The above column definitions define 2 fonts, plus a font definition column. When that column contains a "1", that row will use the Playbill font. When it contains a "2", that row will use the bold, double-sized font. Otherwise it will use the default font. The sample programs XTRA2 and XTRA2A both illustrate the use of special row fonts. 4. --- (XTREE) A new FLAGS option, XTF_TOTALS (&02000000) may be used to tell XTREE that the last row of data is a totals line. The only purpose of this at present is to prevent that row from being sorted in with the other data. The combination of this flag and the ability to apply special fonts to individual rows allows you to create a totals line that stands out visually from the other data. (But it is still up to your application to supply the contents of the totals line.) The sample program XTRA2 has been enhanced to demonstrate this. 5. --- (Windows/ATE) Double-clicking on the title bar when the -m (maximize) startup switch is used no longer changes the window to normal size. 6. --- (UNIX) XCALL HOSTEX,CMD,STATUS was returning the raw process termination status rather than the return value of the CMD executable. This wasn't a problem if you were just checking for zero/non-zero, but non-zero values were generally shifted by a factor of 128. 7. --- (Windows/ATE) TAB(-10,20) statements will now use the default parent ID (as set by XCALL MIAMEX,MX_AUTOPARENT) if the parent ID parameter is not specified. 8. --- (Windows/ATE) FTP transfers (via ATE or via FTPXCALL) were not working properly in some cases with AMOS FTP servers. 9. --- (ATE) TAB(-10,44);chr(127); may now be used from the host to trigger an immediate disconnect from an ATE client. 10. --- Fix a bug introduced in 928 in which the automatic closing of files when a program ends was broken - it was only closing every other file. ============================================================================ A-Shell Development Notes Version 4.9.929 (03 May 2005) ============================================================================ 1. --- (ATE) SBR=INFLD_KEEPALIVE now supported by ATE (sends null packets back to server while waiting for GUI input). 2. --- Fix obscure ISAM bug introduced in 928; symptom was that in certain rare circumstances, you could build an IDX file which seemed ok but which had keys out of order. (Direct lookup would fail to find such keys, and get next operations would return them out of order.) 3. --- (WINDOWS/ATE) XTREE now returns the XTR'XROW and XTR'XCOL values whenever a right click menu (aka context menu) is used to exit a session. Previously, with non-editable controls, the row was available in the ANSWER parameter, but not the column. And in the case of editable controls, ANSWER was not available and the XTR'XCOL / XTR'XROW parameters were not being returned unless the option to exit for validation on each field was being used. The sample programs XTRA2 and XTRA5 have been updated to illustrate this. 4. --- (WINDOWS/ATE) Fix problem with control save/restore operations in which controls with text longer than 32 characters were truncated on restore. 5. --- (Windows) New command line switch, -nm (stands for "No Menu") eliminates the A-Shell menu bar. This may be useful in conjunction with -m and/or -mx to limit the end-user possibilities for getting themselves into things they shouldn't. Note that to eliminate the status lines also, add the following code to your startup program: ? tab(-10,34);"1,0";chr(127); ! turn off top status line ? tab(-10,34);"2,0";chr(127); ! turn off bottom status line 6. --- (Windows/ATE) Fix complication surrounding use of the VK_BACK virtual key in which it would translate into two characters, chr(127) and chr(8), instead of just chr(127). ============================================================================ A-Shell Development Notes Version 4.9.928 (25 Apr 2005) ============================================================================ 1. --- (wINDOWS/ATE) A new, more adaptable, coordinate system is now available for use with dialogs, by adding the MBF_ALTPOS flag when creating the dialog. In this case, the meaning of the row/col coordinates is adjusted. Normally, these units are based on the row/col grid of the main window. So, for example, if the main window is 800 x 520 and is currently configured as 80 columns by 26 rows (24 + 2 status lines), then the grid size is 10 pixels by 20 pixels, and a dialog starting at row 5 col 7 would start 5x20=100 pixels down and 7x10=70 pixels over from the upper left corner of the main window, give or take adjustments for the size of the menu and title bars and borders. The main problem with the above system is that it is directly proportional to the size of the main window. Sometimes that is just what you want, but a more typical "Windows" approach to dialogs is to design them for a certain "logical" size , and then expect them to appear approximately in that size regardless of the physical size of the main parent window. The MBF_ALTPOS flag gives you this "constant logical size" effect by basing the dialog grid on the current standard GUI font size. In addition to being independent of the size of the main window, it also adjusts to the "DPI" of the Windows desktop. When MBF_ALTPOS is specified when creating a dialog, the grid size is computed to be 120% of the height of the standard combobox, and 120% of the "average" character width for the current GUI font. This grid automatically adjusts itself based on the current GUI font, screen resolution, DPI, etc. and thus gives you a dialog which is "logically" the same size on all desktops. As with "standard Windows dialogs", the only problem you need to worry about when designing them is that you allow enough room for the variability in character widths of variable text, since capital letters are on average twice as wide as lower case in the typical GUI font. So you can't count on a 20 character string fitting in 20 "columns" of the dialog. But if you use mostly lower case, it should be a rough approximation, and if you allow a little extra space, your dialogs should be pretty resilient to local environment settings. As an added bonus, this coordinate system is reasonably compatible with the old one, meaning that adding MBF_ALTPOS to an existing dialog will probably not break it, and may improve it. There is one significant difference that must be noted when using the MBF_ALTPOS option, involving the way the height of the dialog is calculated. In the original dialog implementation, the total dialog height was based on multiplying the row height of the main window by the number of requested rows in the dialog coordinates. But this calculation included the dialog border and title bar, which reduced the usable number of rows of the dialog. A margin was added to the bottom, but the net effect is that normal dialogs have one less usable row than they ought to. And when the dialog gets too small, even that last row may be truncated. Arguably this should be fixed since it is confusing, but doing so now would probably affect too many programs. However, when the MBF_ALTPOS flag is specified, the dialog height is calculated to take into account the border and title bar, so that you always get the full number of rows specified. For example, if a dialog was coded to start at row 5 and end at row 15, you get 11 usable rows. (In addition, there is a half-row margin at the bottom, which gives buttons placed on the bottom row of a dialog a little breathing room.) TRMCHR.SBR is aware of this distinction, and returns the full number of rows in WINROWS when the MBF_ALTPOS flag was used to create the dialog. Otherwise, it returns one row less, which generally works but is still an approximation since the amount of space lost due to the border and title bar could amount to more than one row if the rows are short enough. This "correction" to the height calculation of dialogs may cause your existing dialogs to appear to have an extra row at the bottom (or, if you used the BTNMNU.SBX option to put buttons on the bottom row, then the extra space will appear above that.) The TSTEVW sample program has been upgraded to deal with this by subtracting one from the height of the dialogs if you select the MBF_ALTPOS option. Another minor difference when using the MBF_ALTPOS option, is that the starting row/col coordinates of the dialog are interpreted as relative to the main window, and not to the parent dialog. This only matters for nested dialogs, and allows you more flexibility in positioning such nested dialogs (which otherwise can't start up or to the left of the previous dialog.) But since dialogs can be dragged around the screen by the user, it probably won't have any significant deleterious effect on existing dialogs that are converted to the new grid system. Note that a nested dialog will automatically inherit the ALTPOS grid size from it's parent dialog (if the parent dialog had the ALTPOS option). But it will not automatically inherit the alternate positioning logic or height calculation. That is, if the parent dialog uses MBF_ALTPOS, then any nested child dialog will automatically use the same spacing. But unless the child dialog also uses MBF_ALTPOS, its upper left corner will be positioned relative to its parent, and its bottom row usability will be related to the relationship between the row height and title bar height. Otherwise, if the child dialog does use MBF_ALTPOS, then its upper left corner will be relative to the main window and use the same height logic, and thus if it has the same coordinates as the parent dialog, it will exactly overlay it. 2. --- (IMAGING) The image library (VIC32.DLL) is now somewhat more tolerant of an apparently common problem in JPG files in which the file size does not match the internal file header. Most programs seem to display these files without complaint, whereas some will warn of potentially bad data. Previously the IMAGE subroutine would return error -62 and refuse to display the image. 3. --- (WINDOWS/ATE) Multi-line buttons are now highlighted more appropriately by the EVENTWAIT routine when they get the focus. (Previously they were switching back to single-line mode when they had the focus, which didn't look very good.) 4. --- Fix bug in XTREE "c" column type (introduced in edit 927). It wasn't always looking at the right column to pick up the color value. Fix bug in XTREE DspWid column setting, where it was sometimes being ignored, particularly in file mode. This was actually making it appear as if the merge column types ("O" and "o") were not working, since the first column width was being set to the maximum to contain all the data so that merge was not needed. 5. --- (WINDOWS/ATE) ASHICO.DLL 1.0.0.3 adds 5 new icons: lightbulb_on, lightbulb_off, text, text_find, and text_tree. See updated ICODLG sample program in SOSLIB. 6. --- (WINDOWS XP) A problem in which A-Shell would "disappear" immediately upon launching under versions of XP without the service packs installed has been worked around. It is still highly recommended that you install Service Pack 2, but not absolutely required for A-Shell. 7. --- (WINDOWS/ATE) It is now possible to show a dialog without showing the main window, using one of the following techniques: 7A. You can launch a new session of A-Shell with the -z or -zi switch (both of which make the main window invisible) and use a startup command that launches a program which shows a dialog. Note however, that the dialog should be created with MBF_ALTPOS flag or else it will likely be sized inappropriately. 7B. You can hide the main window on demand using the XCALL AUI,AUI_WINDOW,0 and then proceed to create a dialog as noted in 7A above. 8. --- (Windows/ATE) Save and restore screen operations now handle graphic control lines just like other controls. (Previously they were being ignored by the save/restore.) 9. --- (XTREE) New field added to XTRCTL (XTR'EXPANDALL) to control whether a multi-level list is displayed initially in collapsed or expanded form. By default (0), the list is collapsed, unless an item is selected, in which case that branch is expanded so that the item is visible. When you set XTR'EXPANDALL to 1 or above, all items are expanded. (At some point, we may be able to offer a choice between expanding just the level 0 items and expanding all the items, in which case 1 would be used to expand just the level 0 items; for now any value above 0 expands all items.) XTREE.MAP edit [110] has been updated to map the new field, which was added to the end (reducing the FILL size by 1). The last several fields of XTRCTL are now: ... MAP2 XTR'PARENTID,B,2 ! ID of parent control (e.g. TAB) MAP2 XTR'SHOW3D,B,1 ! 1=use 3D style [105] MAP2 XTR'HIDEHEADER,B,1 ! 1=hide header [106] MAP2 XTR'XNAVCOD,B,1 ! [109] cell editing navigation code MAP2 XTR'XNAVMASK,B,1 ! [109] internal use MAP2 XTR'XROW,B,4 ! [108] current row MAP2 XTR'XCOL,B,1 ! [108] current col MAP2 XTR'EXPANDALL,B,1 ! [110] 1=all level 0, 2=all levels MAP2 XTR'UNUSED,X,18 ! unused [110] was 19 The latest XTREE.MAP is available in [907,16] of the SOSLIB release 108. ============================================================================ A-Shell Development Notes Version 4.9.927.2 (12 Apr 2005) ============================================================================ 1. --- Two new flags added to EVENTWAIT: EVW_HAREXIT &h00002000 ! exit on horizontal arrows; exitcodes: ! Left=2, sLeft=-36, right=12, sRight=-38 EVW_VAREXIT &h00004000 ! exit on vertical arrows; exitcodes; ! Up=3, sUp = -37; down = 5; sDown = -39 ============================================================================ A-Shell Development Notes Version 4.9.927 (06 Apr 2005) ============================================================================ 1. --- A-Shell startup command line command can now be a virtual command file, consisting of multiple commands separated by '\n'. For example: ashw32.exe -e LOG BAS:\n:T\nJOBALC\nTIME\nEL -CFG The above command line (after the -e) is equivalent to the following command file: :R ; (this is automatic) LOG BAS: :T JOBALC TIME EL -CFG Note that the \n is case sensitive (must be lower). Also note that if using this technique under a UNIX shell, you'll need to 'escape' the backslashes by preceding them with a backslash, i.e.: ashell -e LOG BAS:\\n:T\\nJOBALC\\nTIME\\nEL -CFG 2. --- (WINDOWS/ATE) MBF_ALTPOS can now be used with horizontal line controls (WINCLASS="STATIC", WINSTYLE=SS_GRAYRECT) to shift their position from the middle of the cell to the bottom of the cell. (See GUILIN for example.) 3. --- (Windows/ATE) A new XTREE column code, lower case "c" works just like upper case "C" to define a color definition column, except that it takes effect starting from the first visible column even if the color definition column is not the first column. This is a workaround for a limitation in which trying to make the first defined column invisible doesn't always work. (XTREE seems determined to make the first column reappear.) 4. --- XTREE, PCKLST, and INMEMO, all of which use tilde as a delimiter in the title (or column definition) parameter, now support the use of "%7e" to allow a literal tilde to appear in the title. (%7e is the HTML-style encoding of the tilde.) ============================================================================ A-Shell Development Notes Version 4.9.926.1 (05 Apr 2005) ============================================================================ 1. --- (Windows/ATE) Fix problem with TAB(-10,23) "$ATE" feature (see below) when ini file spec contained spaces. ============================================================================ A-Shell Development Notes Version 4.9.926 (04 Apr 2005) ============================================================================ 1. --- (Windows/ATE) INFLD combo box now allows editing with arrow keys. 2. --- (ATE) A special symbol, "$ATE", may now be used with TAB(-10,23) to make it easier to launch another ATE session. For example: ? TAB(-10,23);"$ATE";chr(127); ? TAB(-10,23);"$ATE ";cmd$;chr(127); The first example above ($ATE with no other argument) launches another ATE connection to the current server using the current profile, without suspending the current connection. The second example ($ATE following by additional arguments) launches a another A-Shell/Windows session on the local ATE client and passes it the command line cmd$. You could use this format to launch a connection to some other server, assuming you knew the profile name, for example: ? TAB(-10,23);"$ATE telnet ";CFG$;chr(127); Since ATE connections are established with the telnet command, the above command would launch a new ATE connection using the profile CFG$. Note that by default, TAB(-10,23) suspends the current session until the child session completes. If you don't want that, you must append the special suffix characters used by HOSTEX.SBR. For example, to not suspend the current session, the above command could be amended to add " $", i.e.: ? TAB(-10,23);"$ATE telnet ";CFG$;" $";chr(127); Or you could execute any valid A-Shell command in the child session, for example: ? TAB(-10,23);"$ATE VUE %MIAMEFILE%";chr(127); This would launch VUE to edit ATE's copy of the miame.ini file. Or: ? TAB(-10,23);"$ATE VUE %MIAME%\ashlog.log";chr(127); The above command would VUE ATE's log file. 3. --- (UNIX) Increase the number of sessions from the same client that can share a node license, from 2 to 3. 4. --- (WINDOWS/ATE) Enhancement to XTREE editable text columns: you can now tell XTREE to ignore individual cells within an otherwise editable text column by setting the corresponding answer field to "|". To visually clarify which cells are being ignored, you can also add a new column definition parameter, "RGBignore=r,g,b". This acts just like "RGBbg=r,g,b" except that it only applies to those cells that are to be ignored. The program EL.LIT takes advantage of this technique to use XTREE as a sort of dialog box for selecting COMPIL switches. All but one of the switches can be represented with a simple checkbox, but the -w:#### requires a numeric parameter (the amount of memory to allocate). To accomodate this, an editable text column was defined, with all cells set to ignore except for the one associated with -w:####. (The source to EL.LIT will be available in the SOSLIB on the BBS.) ============================================================================ A-Shell Development Notes Version 4.9.925 (30 Mar 2005) ============================================================================ 1. --- (Windows/ATE) BIN command in printer init files may now specify an actual bin name as displayed by the driver Properties of as listed in the Registry. The generic names (LOWER, UPPER, etc.) and "User" names are still supported also. This should make it easier to determine which is the correct bin specification now. See the sample program REGPTR.BP for an example of retrieving the BIN information for the default printer. 2. --- (Windows/ATE) When searching for the printer init file, it now first looks in the %TEMP% directory. The complete search path is now: %TEMP%\<printer>.PQI ASHCFG:<printer>.PQI SYS:<printer>.INI This change simplifies the dynamic creation of temporary printer init files. 3. --- (Windows/ATE) XCALL MIAMEX,138 has been enhanced to provide an option for more friendly delimiters when retrieving (or setting) REG_MULTI_SZ values. This value type is used for lists of names (like bin names or paper size names), and consists of strings separated by a null byte, with the last string terminated by two null bytes. This format makes sense in C, but in Basic, it is difficult to deal with the embedded nulls. The new option replaces the null terminators (except for the very last one) with chr(128) characters. For the set opcode, you may optionally use these same chr(128) characters to build your value string. The option is activated by adding 64 (REGOP_DELIMS) to the opcode. (Applies to opcodes 4 and 6.) See the sample program REGPTR.BP for a working example. 4. --- DIR.LIT 3.0(135) and SET.LIT 1.2(145) resolve a conflict between the LONGDIR option bit and the OPTIONS=MSYNC_MAP bit. This probably has no effect on anyone not using OPTIONS=MSYNC_MAP. Note that the fix is actually based on updating ASHELL.DEF to edit 116 and then recompiling. (The GOP2_ symbols in ASHELL.DEF didn't match those used by A-Shell.) ============================================================================ A-Shell Development Notes Version 4.9.924.2 (29 Mar 2005) ============================================================================ 1. --- New compiler switch /RC allows A-Shell and BasicPlus extensions but preserves RUN Compatibility with AMOS. To be effective, you must use with COMPIL.LIT/OCMPIL.LIT 1.0(117)+ (not COMPLP) and without any of the /X:# switches. The idea is to accomodate people who want to compile under A-Shell and use as many A-Shell features as possible, but still retain the option of copying the RUN files to AMOS for execution there. The features which /RC adds to COMPIL or OCMPIL are: DEFINE hex, octal and ASCII constants IF / ENDIF DO/WHILE/LOOP/UNTIL (but not EXIT) Use of underline in identifiers Max source line length of 3070 instead of 512 ++PRAGMA (all) Comment may follow an & on a continuation line ++INCLUDE nested 3 deep ============================================================================ A-Shell Development Notes Version 4.9.924.1 (29 Mar 2005) ============================================================================ 1. --- (Windows/ATE) TAB(-1,9) and TAB(-1,10) now obey the MIAMEX,141 setting (for auto-parent); i.e. when the auto-parent is set, TAB(-1,9) and TAB(-1,10) are limited to the parent dialog. (This worked in 4.9.924 under Windows but you need 924.1 or higher on both sides for ATE.) 2. --- (Windows/ATE) Fix XTREE problem in which editable cells didn't hold their changed contents unless the program was exiting for validation on each cell. ============================================================================ A-Shell Development Notes Version 4.9.924 (29 Mar 2005) ============================================================================ 1. --- (WINDOWS/ATE) New EVENTWAIT flag, EVW_ACCEL, allows alphanumeric "accelerator" keys to automatically select and click a control based on matching the keyboard character to the associated control. EVW_ACCEL is defined in ASHELL.DEF as: define EVW_ACCEL = &h00000800 ! [115] allow accelerator keys You can associate an accelerator key with a button or other clickable control by preceding it with "&", for example: BTNTXT$ = "&Close" BTNTXT$ = "Choose &Printer" Windows does not display the "&" but instead underlines the following character to indicate that it is an accelerator. In the above example, if the EVW_ACCEL flag was passed to AUI_EVENTWAIT, and the user hit "P", the EVENTWAIT would act as if you had clicked on button "Choose &Printer". 2. --- (Windows/ATE) Another new EVENTWAIT flag, EVW_RAW, causes nearly all keystrokes to be returned as raw ASCII values in the CTLID parameter (with EXITCODE=0). The only exceptions are the TAB, Shift-TAB, and arrow keys, which continue to act locally to move the focus around. For example, hitting 'D' will return EXITCODE=0 and CTLID = 3. --- (Windows/ATE) BTNMNU.SBX 1.0(106) automatically uses the EVW_ACCEL flag if any of the defined buttons contain "&". 4. --- (Windows/ATE) TSTEVW.BAS 1.0(106) Sample program updated to illustrate accelerator and raw keys. (Note, however, that when using the raw option, the returned CTLID value will generally be invalid as input to the next call, and thus lead to EXITCODE 99. Thus after testing with the raw flag set, you need to go back to the options dialog and clear it.) 5. --- (Windows/ATE) A problem with XTREE editable field mode was causing the first cell to appear editable, even when not. 6. --- Fix compiler problem with defining negative constants. ============================================================================ A-Shell Development Notes Version 4.9.923.3 (25 Mar 2005) ============================================================================ 1. --- (WINDOWS/ATE) Define new CSTATE flag which can be added to BTST_CHANGE when using opcode 2 to change the attributes of a control, so that only the text is considered. This eliminates the 'flash' that might otherwise appear, particularly when updating the title bar of a dialog. The flag is defined in ASHELL.DEF as: define MBST_TEXTONLY= &h00000200 ! [115] change text only (512) 2. --- (WINDOWS/ATE) INFLD no longer deletes and re-creates the control when outputting data using OPCODE 2. This should reduce the amount of screen flash when display many fields at a time. 3. --- (WINDOWS/ATE) Fix a problem in XCALL HOSTEX in which the reverse channel would be unnecessarily closed and not re-established when the XCALL returns. ============================================================================ A-Shell Development Notes Version 4.9.923.2 (19 Mar 2005) ============================================================================ 1. --- (WINDOWS/ATE) Fix a bug causing characters with ASCII values 128-255 to be be stripped when sending them from the workstation back to the server. This was mostly noticeable with INFLD, where the server could preload a field and display it with high-bit characters, but they would disappear when saving the updated field on the server. 2. --- (WINDOWS/ATE) Define a new virtual symbolic key string, "VK_NULL", that does nothing. The main use for this would be to allow a tooltip to be associated with a static text control, which is only allowed if the control has a key-click action. 3. --- Fix a newly introduced bug in which the compiler would complain about unmapped control variables used in a FOR / NEXT statement even if /M was not used. (Not that we recommend ever compiling without /M, but if you are so imprudent as to do so, it probably shouldn't complain then about unmapped variables.) 4. --- (WINDOWS/ATE) Shift-TAB now exits from XTREE with EXITCODE -35 (if the VK_TAB bit is set in the FLAGS parameter). ============================================================================ A-Shell Development Notes Version 4.9.923.1 (16 Mar 2005) ============================================================================ 1. --- Fix compiler bug with expansion of multiple defined symbols on one line. 2. --- (WINDOWS/ATE) Deal with problem of embedded quotes in INFLD fields and also in AUI_CONTROL text strings. These strings are now "escaped" by replacing literal quotes with %22 (22 is the representation for the ASCII quote character.) If you wish to manually output such a string using TAB(-10,20), you must replace the quotes with %22 sequences yourself. (Yet another reason to let XCALL AUI,AUI_CONTROL do the work for you.) 3. --- Fix INFLD bug with not beeping when rejecting characters. ============================================================================ A-Shell Development Notes Version 4.9.923 (15 Mar 2005) ============================================================================ 1. --- COMPIL/X:2 (and above) now supports hex, octal, and ascii radix notation for numeric literal values, i.e.: &h100 ! hex 100 (256 decimal) &o100 ! octal 100 (64 decimal) 'A' ! ascii A (65 decimal) These can be used in expressions where you would otherwise be able to use numeric literal values. 2. --- COMPIL/X:1 (and above) now supports the DEFINE statement for defining constants, for example: DEFINE TCRT'REVON = 32 DEFINE XTF'CTRLC = &h01000000 DEFINE MY'NAME$ = "JACK" The names following the DEFINE must conform to the normal rules for variable names (start with an alphabetic character and contain alphabetic, numeric and "'" characters plus an optional $ or % suffix). The definition must either be a literal numeric value (as in the first two examples above), or a quoted string value. These definitions act like macros, substituting the definition into the source code before each line of the program is compiled. Because of this, compiler error messages will usually display the line after macro expansions (which may look strange at first, but since the error messages also show the line number, it allows you to compare your source code to the result after the macro replacements.) From a logic standpoint, the result is equivalent to using MAP statements, i.e.: MAP1 TCRT'REVON,B,1,32 MAP1 XTF'CTRLC,B,4,&h01000000 MAP1 MY'NAME$,S,4,"JACK" The main advantages of DEFINE over MAP statements are: - You cannot assign a value to a DEFINEd symbol; thus, they act like true constants. - DEFINEd constants take up no space in the RUN file unless they are used. Thus it now becomes practical to create ++include files which define constants for virtually every situation, without worrying about the overhead. (They do create some compiler overhead, but is that really something we need to worry about?) - Even for constants that are referenced in the program, constants generally save space in the RUN file. A non-subscripted MAP statement with an initial value takes 16 bytes, and then it takes another 2 or 3 bytes to reference it in the code. A constant takes zero bytes to define, and generally only 2 bytes to reference. (Depending on the number of significant binary digits in the constant, it may take 4 or 6 bytes to represent. But in the vast majority of cases, DEFINEd constants are small integers or powers of 2 and can be represented in only 2 bytes. Strings require 2 bytes plus their length to reference as constants, so in that case, the use of constants may actually increase the size of the RUN, assuming they are referenced multiple times.) - Because of the above, converting MAP statements to DEFINEd constants (assuming they are never assigned more than one value) will result in smaller RUN files, with a very slight bonus in performance, at the cost of a slight increase in compile times. But the main advantage comes in programming clarity when you use meaningful symbolic names for constant values in place of literal number or mapped variables. NOTE: Including a file containing an unknown set of DEFINEs is generally safe and should have no side effect on an existing program (unless you deliberately use the defined constants). Some scenarios to be aware of though: A. If a DEFINE precedes a MAP statement for the same identifier, the MAP statement will generate a syntax error, because the MAP statement identifier will be replaced by the value of the DEFINEd symbol before it gets compiled. For example: DEFINE CTLOP'ADD = 1 MAP1 CTLOP'ADD,B,2,1 Since the CTLOP'ADD in the MAP statement will be replaced by 1, it will be compiled (and a syntax error generated) as if it were: MAP1 1,B,2,1 B. If a DEFINE conflicts with an unmapped variable, a similar thing will happen when you try to assign a value to the variable: DEFINE CANADA'VAT = .15 CANADA'VAT = .16 ! assignment to unmapped variable This will also cause a syntax error, because it will look to the compiler as if it were: .15 = .16 (If the unmapped variable is never referenced, you won't get a syntax error, but then again it won't matter to your program operation either.) C. The one case where you might have a problem is if you reference an unmapped (and unassigned) variable in an IF statement, i.e.: IF CANADA'VAT = .16 THEN ... This will compile as if it were: IF .15 = .16 THEN ... That is a perfectly legal statement, and won't be what you expected (although your test of an unmapped/unassigned variable probably won't be what you wanted either, unless you were counting on it being zero). To eliminate this possibility, compile your programs with /M !!! D. If you attempt to DEFINE a symbol that has already been MAPPED, you will get a duplicate label error. So it doesn't really matter whether you DEFINE all your symbols first or do all your MAPs first, or mix them together; any conflict between the two will generate a compilation error. 3. --- COMPIL/X:2 and above now supports nesting of ++INCLUDE files up to three levels deep. (The limit is arbitrary, but was chosen based on the belief that beyond three levels, things are probably just going to get too confusing to be practical.) As a visual aid to helping you keep track of the nesting level of lines with errors, they now include "+", "++", or "+++" in front of the line number, depending on the nesting level. (Previously, the line number was always preceded by "++" for includes.) Also, the "Copying from" message is now indented to show the nesting. When an ERSATZ specification is used with ++INCLUDE, it becomes the default for any ++INCLUDEs nested below it. So for example, if the main program contains ++INCLUDE ASHINC:ASHELL.BSI and ASHELL.BSI contains ++INCLUDE ASHELL.DEF, then the default location for ASHELL.DEF will be in ASHINC:. If not found there, or if the ++INCLUDE includes an explicit ersatz or dev:[p,pn] specification, the the normal rules apply. (This feature allows you to split an existing .BSI into a .BSI and a .DEF, without having to hardcode the location of the .DEF) 4. --- COMPIL/X:2 and above now supports the use of the underline character in variable and constant names. The recommended use for underlines would be to use them in constants to distinguish them from variables. If you adopted this recommendation, then you would be able to instantly recognize that MBF_STATIC was a constant and not a variable. 5. --- As a first step towards taking advantage of the above compiler features, we have split out the symbolic constants from some of the common include files we release (e.g. ASHELL.BSI and XTREE.MAP) and defined two sets of them - one using apostrophes for compatibility with existing source code, and one using underlines for moving forward. We are also moving towards using the file extension DEF for include files which only contain definitions (no MAP statements or code). For example, in the case of ASHELL.BSI, all of the MAP statements that previously were used to define constants (e.g. MBF'KBD, GOP'STRICT, etc.) have been moved to ASHELL.DEF and ASHELLO.DEF. (ASHELL.DEF contains versions using the underline notation, i.e. MBF_KBD, and ASHOLD.DEF contains versions using the apostrophe notation, i.e. MBF'KBD.) Both are ++INCLUDEd in ASHELL.BSI. (ASHELL.BSI also contains some executable code, so it was somewhat wasteful to include it just for the sake of getting the symbolic constants. But for programs that do ++INCLUDE ASHELL.BSI, the nested include feature will define all of constants using both the ' and _ notation. For new development, you would be encouraged to just ++INCLUDE ASHELL.DEF. In the case of XTREE.MAP, and the symbols for any other A-Shell routine which is embedded with A-Shell, we have moved the symbols to ASHELL.DEF and ASHELLO.DEF. (There seems little point in having separate DEF files for XTREE, MSBOXX, INMEMO, etc. since they are all routines that are embedded within A-Shell.) 6. --- (Windows/ATE) Fix problem with deleting nested dialogs in non-FIFO order. This was happening if you used a clear screen to clear all controls and there were multiple dialogs on the screen. Problem was causing Invalid Window Handle errors when creating subsequent controls. 7. --- (ATE) A new checkbox option has been added to the Login Parameters dialog - "Use Password for FTP Only". When checked, the password is not sent during the initial login, forcing the user to actually type the password. However, for program-initiated FTP transfers, the password will be used. The theory here is that you might not want to allow anyone to log in to the server just by clicking on an ATE profile with an embedded password. But, once they are logged in, you don't want to have to ask the again for their password in order for the application to initiate file transfers. The user cannot initiate file transfers themselves in the pure ATE environment, and if you use the Madics interactive FTP option, it will now also force a manual login if this checkbox option is set. So the FTP option with automatic password shouldn't introduce any security loophole. (Note: the password is encrypted in the registry, and clearing the checkbox also clears the password, so there is no opportunity for the user to bypass the security by sitting down at another user's PC and trying to adjust the connection profile.) 8. --- (WINDOWS/ATE) In addition to the above mentioned symbols, the following new symbols have been added to ashell.def: ! *** AUI classes *** define AUI_CONTROL = "CONTROL" ! [112] control ops define AUI_WINDOW = "WINDOW" ! [112] window ops define AUI_ENVIRONMENT = "ENVIRONMENT" ! [112] get environment info define AUI_EVENTWAIT = "EVENTWAIT" ! [112] wait for events define AUI_MENU = "MENU" ! [112] menu ops define AUI_IMAGE = "IMAGE" ! [112] image display define AUI_HTMLHELP = "HTMLHELP" ! [112] HTML-style help ops As a notational shorthand, we will now start referring to the above routines by the symbol names, i.e. AUI_CONTROL (as opposed to the more awkward AUI,"CONTROL", or the ambiguous "CONTROL".) ! *** [112] AUI_CONTROL opcodes define CTLOP_INFO = 0 ! [112] query a control define CTLOP_ADD = 1 ! [112] add a control define CTLOP_CHG = 2 ! [112] change a control define CTLOP_DEL = 3 ! [112] delete a control define CTLOP_CLR = 4 ! [112] clear controls in area define CTLOP_QRYCB = 5 ! [112] query checkbox define CTLOP_SVA = 6 ! [112] save controls within area define CTLOP_RSA = 7 ! [112] restore saved controls define CTLOP_SBCH = 8 ! [112] start batch define CTLOP_EBCH = 9 ! [112] end batch define CTLOP_GETID = 10 ! [112] get control ID (by coords) define CTLOP_PANE = 11 ! [112] set TAB control pane ! *** Symbolic names for dummy AUI_CONTROL parameters... define NUL_CTLID = 0 define NUL_CTEXT$ = "" define NUL_CSTATE = 0 define NUL_CTYPE = 0 define NUL_CMD$ = "" define NUL_FUNC$ = "" define NUL_CSTATUS = "" define NUL_SROW = 0 define NUL_SCOL = 0 define NUL_EROW = 0 define NUL_ECOL = 0 define NUL_FGC = -2 define NUL_BGC = -2 define NUL_FONTATTR = 0 define NUL_FONTSCALE= 0 define NUL_FONTFACE$= "" define NUL_TOOLTIP = "" define NUL_PARENTID = 0 define NUL_WINCLASS$= "" define NUL_WINSTYLE = 0 define NUL_WINSTYLEX= 0 The above symbols are useful when the form of the AUI_CONTROL call requires some arguments to be specified only as placeholders so you can specify later ones. For example, when querying checkboxes, instead of: xcall AUI,"CONTROL",5,CID(I),"",0,0,"",CB(I),STATUS you can instead use the more clear: xcall AUI,AUI_CONTROL, CTLOP_QRYCB, CID(I), NUL_CTEXT$, & NUL_CSTATE, NUL_CTYPE, NUL_CMD$, CB(I), STATUS Admittedly it is longer, but much more clear and much less likely that you will confuse yourself or the next person to look at your code. !*** Symbolic names for XTREE XTR'OPCODES define XTROP_CREATE = 0 ! add define XTROP_REPLACE = 1 ! replace data define XTROP_APPEND = 2 ! append to existing data define XTROP_DELETE = 3 ! delete xtree define XTROP_RESELECT = 4 ! reselect (existing ctl, data) define XTROP_DELSEL = 5 ! delete selected rows, then resel 9. --- (WINDOWS/ATE) New EVENTWAIT options, behavior: ! *** [108] AUI,EVENTWAIT opcode flags define EVW_NEXT = &h00000001 ! start with focus on control AFTER s define EVW_NOWAIT = &h00000002 ! set focus and exit without waiting define EVW_NOWRAP = &h00000004 ! exit when hitting edge of group (in define EVW_NOFOCUS = &h00000008 ! no changes to focus (just wait for define EVW_NUMERIC = &h00000010 ! allow numeric keyboard input (16) define EVW_DESCEND = &h00000020 ! descend into subgroups of parent (3 define EVW_SIBLINGS = &h00000040 ! expand range to include siblings of define EVW_INFLD = &h00000080 ! [113] support INFLD define EVW_PREV = &h00000100 ! [113] opposite of EVW_NEXT define EVW_SQUELCH = &h00000200 ! [113] squelch radiobtn exits on arr define EVW_TABEXIT = &h00000400 ! [113] exitcode 7/-35 on TAB/ShiftTAB The TSTEVW program in the SOSLIB has been updated to illustrate these. 10. --- (WINDOWS/ATE) New INFLD TYPE ||] prevents field width from being expanded by various well-meaning logic within INFLD. For example, combo boxes smaller than 6 characters wide typically get an extra 3 characters worth of width to account for the space taken up by the drop-down button. And date fields get 1-4 extra columns worth to handle the optional checkbox, drop-down button, slashes, etc. Generally these automatic additions are a good thing, preventing the field data from being squeezed unnecessarily. But if your screen space is tight or you have some other reason to want to be precise, just add ||] to your TYPE codes. 11. --- (WINDOWS/ATE) Back out the change to the positioning of groupboxes which was implemented in 922.3. That feature is still available, but now requires the addition of MBF'ALTPOS to the MBF'GROUPBOX flag when creating the groupbox. (This preserves backwards compatibility for programs that "liked" the old layout.) 12. --- (WINDOWS/ATE) When clicking on an inactive XTREE, the row clicked on is now automatically passed to the XTREE control so that it can select that row, rather than the first row. For single-selection XTREEs, in order for this to work, you must set ANSWER=0. (Otherwise, the specified ANSWER will override the clicked row to determine the new selection.) For multi-selection XTREEs, the clicked on row will be added to the existing selections. The XTRA4 program in the SOSLIB program illustrates this. 13. --- (WINDOWS/ATE) In order to expand the support for right click actions, you may now add an "r" to a virtual key symbolic code in order to declare that right click is enabled. For example: %VK_xF201% The above symbolic sequence will send virtual extended function code 201, which results in EXITCODE -201. Right click will be ignored. But if you insert an "r" between the "x" and "F", as follows: %VK_xrF201% then both left and right click will be supported. If right click, the returned EXITCODE will be +201 (instead of -201). This is currently only designed to work with buttons and XTREE controls, but may be expanded to others. Note that you should only use this technique with F numbers higher than 50, since below that, a right click might be confused with some other internal INFLD exitcode. Also, it is no longer necessary to include the leading and trailing % symbols with the above notation. That is, you can save space by just specifying your keyboard click string as "VK_xrF201" instead of "%VK_xrF201%". (The chance of anyone wanting to output a literal string starting with VK_ has been considered not worth the extra typing of the % signs.) Also, the shortening of these strings by two characters is critical for including them in the XTR'KBDSTR field in XTREE, which unwisely only allowed for 10 characters. The XTRA4 program in the SOSLIB illustrates this - try right-clicking on the xtree controls (when inactive) or the Copy and Delete buttons. 14. --- (WINDOWS/ATE) A new XTREE column flag (for use with advanced syntax) "X" may be added to "T" (editable checkbox) or "E" (editable text) fields to cause XTREE to exit with the field is edited. The EXITCODE in this case will be -48. The application can determine the cell being edited from the new XTR'XROW and XTR'XCOL fields: MAP1 XTRCTL ! extended XTREE parameters MAP2 XTR'OPCODE,B,1 ! 0=normal (create), 1=replace data, ! 2=append, 3=delete, 4=select, ! 5=delete one row MAP2 XTR'CTLNO,B,1 ! 0=1st pcklst ctl, 1=2nd, 2=3rd MAP2 XTR'ITEMLINES,B,1 ! max # dsp lines of text per item MAP2 XTR'TREELINESTYLE,B,1 ! 0=none,1=solid,2=dotted MAP2 XTR'SHOWBUTTONS0,B,1 ! Show level 0 tree btns (0=no, 1=yes) MAP2 XTR'SHOWBUTTONS,B,1 ! Show level 1+ tree btns MAP2 XTR'SHOWGRID,B,1 ! Show grid lines (0=no,1=yes) MAP2 XTR'GRIDSTYLE,B,1 ! 0=vert, 1=horz, 2=both ! (0-2 = solid, 3-5 = dotted) MAP2 XTR'TRUNCATED,B,1 ! Show truncation indicator MAP2 XTR'SELECTAREA,B,1 ! Set to 1 MAP2 XTR'FLYBY,B,1 ! Fly by highlighting (0=no, 1=yes) MAP2 XTR'SCROLLTIPS,B,1 ! Show scroll tips (0=no, 1=yes) MAP2 XTR'COLUMNACTIVE,B,1 ! Active column (on entrance & exit) MAP2 XTR'COLUMNSORT(3),B,1 ! Columns sorted by (1=1st col) MAP2 XTR'SORTORDER(3),B,1 ! Sort order ! 0=none,1=ascending,2=descending MAP2 XTR'KBDSTR,S,10 ! kbd click string MAP2 XTR'USETHEMES,B,1 ! 1=use XP themes (if available) MAP2 XTR'PARENTID,B,2 ! ID of parent control (e.g. TAB) MAP2 XTR'SHOW3D,B,1 ! 1=use 3D style [105] MAP2 XTR'HIDEHEADER,B,1 ! 1=hide header [106] MAP2 XTR'XNAVCOD,B,1 ! [109] cell editing navigation code MAP2 XTR'XNAVMASK,B,1 ! [109] internal use MAP2 XTR'XROW,B,4 ! [108] current editing row MAP2 XTR'XCOL,B,1 ! [108] current editing col MAP2 XTR'UNUSED,X,19 ! unused [106] was 27 [109] was 26 The XTR'XNAVCOD and XTR'XNAVMASK fields are used to pass information about how the field was exited, so that when you re-enter, it can automatically select the next appropriate editable cell. If you want to reject the value which was entered (i.e. force it to be edited again) then set XTR'XNAVCOD = 0. The manner of passing the editable text data back and forth between XTREE and the application has changed slightly. Previously, the data was passed to XTREE via the main array, and on exit the data was passed back via the ANSWER array. While this is still true, if XTR'OPCODE is not zero, the contents of any editable text fields in the ANSWER array will override the corresponding value in the main array. For example, consider a 5 column list in which the 2nd column is editable text. When initially setting up the XTREE, you can load up the ANSWER array with spaces and put all of the data, editable or not, in the main array. When the user edits one of the cells in the 2nd column, if the column was defined with "EX", then XTREE will exit, returning the entire editable column, including the field just edited, in the ANSWER array. The application can locate this field by the XTR'XROW parameter. If the data is valid, then the application can just re-enter the XTREE, with XTR'OPCODE = 4. If, on the other hand, the data input was invalid, the application can compare it to the data in the main array, and reset the field in the ANSWER array back to match the main array, and set XTR'XNAVCOD = 0. Then, when it returns to XTREE, the edit focus will return to the field in question, with the original data. The XTRA5 sample program illustrates the use of editable cells and validation. 15. --- (WINDOWS/ATE) A simple form of modeless dialog is now supported. (A modeless dialog does not suspend the operation of the main program until the dialog is closed.) To create, use MBF_DIALOG+MBF_MODELESS. The ending row and column of a modeless dialog may be beyond the limits of the screen or window. These dialogs are mainly useful for displaying information that is not critical to the main window, allowing the user to push it out of the way if desired. See the TSTSCR, XTRA4, and XTRA5 sample programs in the latest SOSLIB for examples of using modeless dialogs to display scrolling status messages regarding the program operation. SCRSTS.SBX 1.1(103) supports an option to create the modeless dialog automatically (which is well used in the above sample programs.) ============================================================================ A-Shell Development Notes Version 4.9.922.3 (6 Mar 2005) ============================================================================ 1. --- (Windows/ATE) The border of group boxes has now been adjusted to allow the top and bottom lines within the box to be used. (The first usable row is 2, since row 1 is where the top border is, but the last usable row is equal to the height of the groupbox.) Previously, attempting to do this would cause the top and bottom border of the groupbox to be overwritten. 2. --- (Window/ATE) Add control flag MBF'ALTPOS (1048576) for use with buttons that are on the bottom row of a dialog just below a groupbox. This causes the position of the button to be adjust downward slightly, to take advantage of the bottom margin of the dialog box. (Otherwise the buttons will nearly touch the bottom of the groupbox just above them.) 3. --- (Windows/ATE) New EVENTWAIT opflags: EVW'EDIT (128) (or EVW'INFLD) EVW'PREV (256) EVW'EDIT causes EVENTWAIT to treat any EDIT, COMBO, or DATE/TIME control (i.e. any INFLD control) that has the MBF'KBD style as "hot", meaning that if you move the focus to it, EVENTWAIT will exit with its keyclick string as if you had clicked on it. EVW'PREV is like EVW'NEXT, but starts out on the control prior to the one specified in the CTLID parameter. This might be useful for re-entering the EVENTWAIT after an INFLD edit was exited with an up arrow. If you knew the ID of the previous control, you could specify it directly, but if you don't know it, and you do know the ID of the INFLD control, then you can specify it along with the EVW'PREV flag. (Note that you can retrieve the ID of INFLD control, or any other control, using AUI,"CONTROL" opcode 10 and specifying the coordinates. (It returns the ID in the CSTATUS parameter.) 4. --- (Windows/ATE) The EVENTWAIT operation has undergone a number of minor improvements. One change that might affect existing programs is that radio buttons with the MBF'KBD style will trigger an exitcode whenever they are set, even if just done via the keyboard arrows. (Previously, the arrows changed the selected button, but didn't trigger an exit from the EVENTWAIT, although clicking on a radio button, or hitting ENTER, would.) The new method makes the keyboard logic match the mouse logic more closely. 5. --- (Windows/ATE) XTREE now returns exitcode 10 in response to ^C, regardless of whether CTRLC has been enabled or disabled. ============================================================================ A-Shell Development Notes Version 4.9.922 (3 Mar 2005) ============================================================================ 1. --- (Windows) CGI mode now works in A-Shell/Windows. As with A-Shell/UNIX, it is designed to work with the HTML METHOD="POST", in which the form variables are passed to the CGI script in stdin. The CGI script (BAT file) should launch A-Shell with a command line similar to this: @c:\vm\miame\bin\ashw32.exe -cgi -z -e -i c:\vm\miame\miame.ini cgicmd Where 'cgicmd' is a command file that logs to a valid PPN and executes the program which processes the CGI request. That program should use XCALL CGIUTL calls to retrieve the variables form the form and output a new form to stdout. The program should then exit to the dot prompt (where the instance will be terminated automatically). Note the need for the -cgi, -e, and -z switches. (The -z switch is only needed for A-Shell/Windows CGI, and causes the window to be invisible, which is not only appropriate since no one can see it anyway, but possibly mandatory, since the attempt to generate a window may generate an error on the web server.) The -cgi and -e switches are also used with the UNIX implementation of CGI. Some minor differences to note between the Windows and UNIX implementations of CGI: A. Under Windows, PRINT statements are not automatically send to stderr; instead, they are thrown away with all other screen output due to the -z switch. (If you were using PRINT statements to debug your code, you'll have to change them to statements that output messages to a file.) B. The directories and privilege rules for launching CGI scripts under Windows may differ from those for UNIX, especially if you use the IIS web server instead of Apache. C. Precede the command in the BAT file with a @ to prevent it from echoing. (At best, echoing will cause the command line to appear at the start of the resulting web page; at worst it will cause the resulting web page to abort.) One way to test whether your Basic program and A-Shell are performing properly is to create a file that contains the expected stdin string, then just open a Command Prompt window and execute a command line which launches A-Shell with the redirected stdin file, and redirects output to another file. You can then examine the output file to see if it looks like a valid web page. For testing purposes, stdin format input format can be simplified to a list of "VARNAME=value&" pairs, e.g. NAME=Bertrand Russsel&GAME=philosophy& (The above example simulates a form with two variables, NAME and GAME.) Assuming this meets the requirements of your CGI program, and you stored it in a file called cgitst.in, you could test it with something like the following: c:\vm\miame\bin\ashw32.exe -z -cgi -i c:\vm\miame\miame.ini cgicmd < ./cgitst.in > ./cgitst.out The command is shown on two lines above but should be entered in the Command Prompt window as a single, letting it wrap as needed. Naturally you would adjust the paths, cmdfile name, and names of the input and output files as per your situation. If the process works, you should see no action whatsoever, but when you TYPE the the cgitst.out file you should see a valid web page. (Better yet, try to load it with a browser to verify that it is in a valid format.) If this test works, then the only remaining issues would relate to the configuration of the web server. Search for "CGI" in the A-Shell Development Guide and read the topic on using A-Shell/UNIX as a CGI Engine for a working example of a form and CGI program, as well as some general tips. Also see CGIUTL.SBR in the XCALL Reference. Using a default 'typical' installation of Apache 2.0 under Windows XP, I was able to implement the example form and CGI script from the A-Shell Development Guide with only the following changes: a. Add "ExecCGI" to the Options line in httpd.conf: Options Indexes FollowSymLinks ExecCGI b. Add ".bat" to the name of the script in the FORM ACTION line of the form: <FORM ACTION="/cgi-bin/cgitst.bat" METHOD="POST"> c. My cgitst.bat script was placed in the cgi-bin directory of Apache, and contained the following (all on one line): @c:\vm\miame\vc49\release\ashw32.exe -cgi -z -e -i c:\vm\miame\miame.ini tstcgi 2. --- Fix a problem with the INFLD non-GUI mode failing to output spaces as needed to clear a previously formatted version of the field. For example, a date field will expand by 2 characters when redisplayed, but when re-edited, those extra 2 characters should be blanked out so as to not confuse the operator. This was broken during the implementation of the GUI version of A-Shell (where the blanking logic doesn't apply). 3. --- (ATE) Commands to change the number of rows and columns (such as TAB(-5,x) and TAB(-6,x), or SET TERM HEIGHT x and SET TERM WIDTH x) were affecting the ATE window, but were not updating the internal screen status on the server side. This was causing a variety of problems when using non-standard numbers of rows and columns. 4. --- (WINDOWS/ATE) AUI "EVENTWAIT" now supports a timeout parameter: xcall AUI,"EVENTWAIT",PARID,CTLID,EXITCODE{,OPFLAGS{,TIMER}} If specified, and non-zero, the operation will time out in the specified number of milliseconds, returning EXITCODE 11 (like INFLD). ============================================================================ A-Shell Development Notes Version 4.9.921 (27 Feb 2005) ============================================================================ 1. --- (Windows/ATE) XTREE now supports a primitive ability to edit cells. The concept is similar to the editable checkboxes, subject to the following notes and qualifications: - The column format code for an editable text cell is "E" - The source for the editable text cells comes from the source array, just like for regular text cells, and unlike editable checkboxes. - The editable column is output to the ARRAY parameter, which must be formatted accordingly. For example, if there are 3 editable checkboxes, plus two editable text columns, one 12 characters wide and one 18 characters wide, the mapping of ANSWER should be: MAP2 ANSARY(1000) ! up to 1000 rows MAP3 ANSCB1,S,1 ! First checkbox column MAP3 ANSCB2,S,1 ! Second checkbox column MAP3 ANSCB3,S,1 ! Third checkbox column MAP3 ANSTEXT1,S,12 ! First editable text column MAP3 ANSTEXT2,S,18 ! Second editable text column Note that the editable text columns must follow and editable checkbox columns in ANSWER, regardless of their physical arrangement in the the source array. - For ATE, there can be no embedded nulls in any of the fields of the ANSWER array. This is mainly a consideration for the first call to XTREE in a program, since after that, the output will fill the arrays as needed with spaces. So at the start of a program, you should space-fill the entire ARRAY area. - Since the input for the editable text is separate from the output, you can compare the two to determine which have changed. (This is currently your only opportunity for validation logic.) If you plan to allow the tree control to be re-entered by the user, you must transfer the updated text data from the ANSWER array back to the source array. - You must set the flag XTF'EDITABLE whenever using either editable checkboxes or editable text. (This flag was previously known as XTF'CHKBOX, i.e. 33554432, but has been renamed to make it more clear.) - As with editable checkboxes, editable text is only supported in array mode. - While editing a cell, the navigation keys (TAB, Shift-TAB, arrows, HOME, END, etc.) are intercepted and applied towards moving to the next editable cell. In order to use any of these keys to trigger an exitcode, you must use the cursor to move to a non-editable cell. The XTRA5 sample program has been updated to allow the description column to be edited. Don't forget to get the updated XTREE.MAP also. WARNING: In its current state, the editing feature is rather limited and should probably be considered experimental (i.e. not suitable for integration into a production environment). 2. --- (Windows/ATE) XTREE now supports customizable context menus (i.e. right-click popup menus). Clicking on one of the choices of the popup menu is equivalent to clicking on a button that sends a command code. So as a practical matter, this just provides a way to define additional buttons (and corresponding exitcodes) that only appear when the control is right-clicked. Only one popup menu can be defined for an instance of the control, and it applies to all parts of the control (i.e. all rows and columns.) To define the popup menu, create a dummy column using the advanced COLDEF syntax, as follows: COLDEF = "0~0~X~S~PopupMenu=<text>,<cmd>;<text>,<cmd>;...<text><cmd>~~ Note that a column whose width is zero does not really define a column; it is just a way to use the flexible "advanced column definition" syntax to define parameters relating to the control as a whole. The title and type fields (X and S respectively in the example above) are ignored, but should not be null since ~~ should mark the end of the column definition. The <text> fields are arbitrary strings to display for the choices in the popup menu (may contain any character except a comma). The <cmd> fields should be coded the same as for the cmd string on a button which has the MBF'KBD type, i.e. literal keyboard characters, or more likely, "virtual key commands", such as "%VK_xF501%" or "%VK_ESC%" or "%VK_F1%". For example, in a list of transactions, you might define a popup menu like this: COLDEF="0~0~x~S~PopupMenu=" & + "Delete,%VK_xF501%;" & + "Open,%VK_xF502%;" & + "Close,%VK_xF503%;" & + "Refile,%VK_xF504%;" & + "Edit,%VK_xF505%~~" COLDEF=COLDEF+<additional real column definitions> When the user right clicks on an item, the popup menu will appear with the Delete/Open/Close/Refile/Edit choices, and if the user clicks on one of them, the corresponding virtual key sequence will be triggered, resulting in an exitcode from -501 to -505. The selection information will also be returned, as if this item had been selected in the 'normal' way, and the XTR'COLUMNACTIVE field will also be set to indicate which column the user right-clicked on. The application can take this information and do whatever it wants with it, presumably popping up another dialog to perform the requested action, followed by a return to the XTREE control to allow for another item to be selected. (This will probably work best if the XTF'MODELESS option is used.) The XTRA2 sample program has been updated to demonstrate the use of a context menu (although it just displays the exitcode and doesn't perform any other action with the information resulting from the popup menu choice). ============================================================================ A-Shell Development Notes Version 4.9.920.2 (25 Feb 2005) ============================================================================ 1. --- (Windows/ATE) XTREE.MAP updated to include XTR'HIDEHEADER, which if set non-zero, causes the XTREE column headers to be eliminated. 2. --- (Windows/ATE) INFLD now supports SETDEF parameters of arbitrary size, allowing combo boxes of arbitrary size (although 32K is probably a reasonable upper limit). To do this via ATE, you need to first send the following command: PRINT TAB(-10,42);BUFSIZ;chr(127); where BUFSIZ is the new maximum length of the ATE command buffer. (The default command buffer size is 3K). The buffer must be large enough to handle all of the arguments of INFLD, which for the purposes of combo boxes, mainly just means the maximum size of SETDEF, plus perhaps another 1K to handle the rest of the parameters. (Eventually, this technique may permit multiline edits of arbitrary size, but for now, the limit is around 1600 bytes.) ============================================================================ A-Shell Development Notes Version 4.9.920.1 (25 Feb 2005) ============================================================================ 1. --- (Windows/ATE) Fix TAB control, broken in 920. 2. --- (Windows/ATE) Implement workaround in XTREE for problem of headers being truncated vertically if HdrScale set much larger than 100%. ============================================================================ A-Shell Development Notes Version 4.9.920 (24 Feb 2005) ============================================================================ 1. --- (Windows/ATE) XTREE supports a new flag, XTF'CTRLC (16777216), which causes ^C to return EXITCODE 10. Otherwise, it acts like ESC (returning EXITCODE 1). 2. --- (Windows/ATE) Checkbox support in XTREE (in array mode only): New column cformat flags: T editable checkbox (aka 'tick') column t non-editable checkbox column If there are any columns with editable checkboxes, then the opcodes which allow selection act differently. Instead of moving a selection bar up and down and selecting one or multiple rows, instead you move just the mouse cursor around and check/uncheck checkboxes. To exit from the operation, use one of the normal exit commands (ENTER, TAB, double-click, etc.) The data in checkbox columns must consist of a 1 byte (non-null) string. For non-editable checkboxes, the column data is interpreted as: "0" - Unchecked "1" - Checked " " - Blank (no checkbox at all) For editable checkboxes, the actual value of the column is ignored. (It is just used as a placeholder for the column so that it fits more easily into the standard column format.) Instead, the initial and updated checkbox values are passed in and out via the answer parameter, similarly to the way it is done for multiple-selection arrays. However, instead of just one byte per row, the answer array must be formatted as N bytes per row, where N = the number of editable checkbox columns. The values in the array are the same as for the non-editable checkbox columns ("0"=unchecked, "1"=checked, " "=blank). For example, assume that we have an array of 1000 rows, and there are three editable checkbox columns. The format of ANSWER should be: MAP1 ANSWER MAP2 ANSARY(1000),S,3 ! S,3 for 3 columns or MAP2 ANSARY(1000) ! up to 1000 rows MAP3 ANSCB1,S,1 ! First checkbox column MAP3 ANSCB2,S,1 ! Second checkbox column MAP3 ANSCB3,S,1 ! Third checkbox column When using editable checkboxes, you must also set the flag XTF'EDITABLE (33554432). (This is needed because the xcall parameter handler needs to make decisions about how to handle the ANSWER parameter before it is able to examine the column definition string.) A new sample program, XTRA5, illustrates the use of both editable and non-editable checkboxes. Note: Since when using editable checkboxes, normal selection logic doesn't apply, you may want to specify something other than the default 1 for the XTR'SELECTAREA field (see next item below). 3. --- (Windows/ATE) Additions to the XTRCTL parameter structure. A new field, XTR'SHOW3D has been added to the end. If set to 1, a 3D-style is used for the cells. Also, the XTR'SELECTAREA field now has additional options (choose one from the 'SELECTAREA' group and one from the 'SELECTSTYLE' group): SELECTAREA options (determine where you can click to select an item) 0 anywhere on row, including tree lines, row headers 1 any cell of row 2 only first cell of row 3 only text in first cell of row SELECTSTYLE options (determine how selected items are highlighted) 0 highlight entire row 16 highlight all cells of row 32 highlight first cell only 48 same as 32 but highlight fills cell (not just text) When using checkboxes, you may want to use 3 + 18 rather than the standard 1. The XTREE.MAP file has been updated as follows: MAP1 XTRCTL ! extended XTREE parameters MAP2 XTR'OPCODE,B,1 ! 0=normal (create), 1=replace data, ! 2=append, 3=delete, 4=select, ! 5=delete one row MAP2 XTR'CTLNO,B,1 ! 0=1st pcklst ctl, 1=2nd, 2=3rd MAP2 XTR'ITEMLINES,B,1 ! max # dsp lines of text per item MAP2 XTR'TREELINESTYLE,B,1 ! 0=none,1=solid,2=dotted MAP2 XTR'SHOWBUTTONS0,B,1 ! Show level 0 tree btns (0=no, 1=yes) MAP2 XTR'SHOWBUTTONS,B,1 ! Show level 1+ tree btns MAP2 XTR'SHOWGRID,B,1 ! Show grid lines (0=no,1=yes) MAP2 XTR'GRIDSTYLE,B,1 ! 0=vert, 1=horz, 2=both ! (0-2 = solid, 3-5 = dotted) MAP2 XTR'TRUNCATED,B,1 ! Show truncation indicator MAP2 XTR'SELECTAREA,B,1 ! Set to 1 MAP2 XTR'FLYBY,B,1 ! Fly by highlighting (0=no, 1=yes) MAP2 XTR'SCROLLTIPS,B,1 ! Show scroll tips (0=no, 1=yes) MAP2 XTR'COLUMNACTIVE,B,1 ! Active column (on entrance & exit) MAP2 XTR'COLUMNSORT(3),B,1 ! Columns sorted by (1=1st col) MAP2 XTR'SORTORDER(3),B,1 ! Sort order ! 0=none,1=ascending,2=descending MAP2 XTR'KBDSTR,S,10 ! kbd click string MAP2 XTR'USETHEMES,B,1 ! 1=use XP themes (if available) MAP2 XTR'PARENTID,B,2 ! ID of parent control (e.g. TAB) MAP2 XTR'SHOW3D,B,1 ! 1=use 3D style [105] MAP2 XTR'UNUSED,X,27 ! unused [105] was 28 4. --- (Windows/ATE) You may now change the header font. (You are still limited to a single font for the entire header.) To accomplish this, two new column options have been add to the Advanced Column syntax: HdrFont=<name>{,attributes} HdrScale=<percentage> These behave exactly like the Font= and Scale= options, except that they affect the header, rather than the current column. (It may be misleading to use the column definition string to define the header font if in fact only one font can be used for the entire header, but it was a convenient place to put the feature, and perhaps someday individual column headers will be able to have different fonts. For now, it makes no difference which column you use the above options on; if you use them more than once, only the last one will apply.) In addition to changing the header font, you can now also create a multi-line header by embedding CRLF line breaks. For example: CRLF$ = CHR(13)+CHR(10) COLDEF="1~5~Five"+CRLF$+"Alarm"+CRLF$+"Chili" & + "~S~Hdrfont=MS Jalapeno~~" The above column header would display as: Five Alarm Chili and it, as well as any other column headers, would use the "MS Jalapeno" font (assuming it existed). 5. --- (Windows/ATE) A problem with INFLD passwords and XP themes in which the characters were echoed with some weird character (rather than the nice round dots) when the GUI font was sent to something other than the default, has been resolved by explicitly using the default GUI font for password fields. 6. --- (Windows/ATE) INFLD TYPE F (fast) now also applies to the date picker just like it does to combo boxes. (That is, a single click on a date in the drop-down calendar will set the date and exit the field.) ============================================================================ A-Shell Development Notes Version 4.9.919.1 (22 Feb 2005) ============================================================================ 1. --- (Windows/ATE) Buttons now support loading icon or bitmap images from within a DLL, in addition to the existing method of loading them from individual ICO or BMP files. The distinction is based on the syntax used to specify the icon, as shown in these two examples: xcall AUI,"CONTROL",1,CTLID,"stop::ashico1.dll",MBST'ENABLE, & MBF'STATIC+MBF'ICON,"","",CSTATUS, SROW,SCOL,SROW,SCOL xcall AUI,"CONTROL",1,CTLID,"stop.ico",MBST'ENABLE, & MBF'STATIC+MBF'ICON,"","",CSTATUS, SROW,SCOL,SROW,SCOL In the first example, it loads the icon whose resource name is "stop" from the ashico1.dll. In the second example, it loads the icon from the file stop.ico. 2. --- (Windows/ATE) A new flag, MBF'NODISTORT (4194304), has been added for use when displaying icons in buttons to preserve the aspect ratio of the icon. Otherwise, it is stretched to fill the button in both dimensions. (MBF'NODISTORT is the same as MBF'WRAP and MBF'PATHELLIPSIS, but given its own name just for clarity.) Note that when icons are displayed in a static (MBF'STATIC) control, they are not resized. But in the case of buttons, the icon is resized to approximately fill the button. Since icons are naturally rectangular, the MBF'NODISTORT option is most noticeable when the buttons are not very square. 3. --- (Windows/ATE) AUI EVENTWAIT now returns EXITCODE 10 for ^C (like INFLD would if TYPE V specified.) 4. --- (Windows/ATE) Fix a bug in EVENTWAIT in which it was sometimes setting and not clearing the SHIFT status (thus returning EXITCODES for shifted function keys instead of the unshifted function keys). 5. --- MAP.LIT 2.0(106) now displays the version number of program modules if the /F{ULL} switch specified. (This is particularly helpful when trying to figure out if you've got the proper version of an auto- loaded SBX or RUN file in memory.) 6. --- (Windows/ATE) The INFLD combo box now supports the "fast" mode (TYPE F) by exiting on a single click of an item in the dropdown list. (Otherwise it takes a click followed by an exit key, or else a doubleclick, but doubleclick can be tricky since if you don't do it fast enough, the second click gets delivered to whatever control was beneath the dropdown list.) 7. --- (Windows/ATE) Fix a bug in multiple XTREE controls - certain column parameters from one control would replicate themselves from one control to the next. ============================================================================ A-Shell Development Notes Version 4.9.919 (21 Feb 2005) ============================================================================ 1. --- (Windows/ATE) INFLD now uses the XP password routine (which echoes the characters as dots rather than asterisks). It also offers a way to eliminate the standard XP password warning about the CAPS LOCK being set. The trick is to specify TYPE ^ (fold upper case). This causes INFLD to temporarily toggle the CAPS LOCK key off during the password entry, then toggle it back on when you exit. (The fold upper case option will serve the same purpose as the CAPS LOCK in this case.) 2. --- (Windows/ATE) Various icon related enhancements: A. When displaying an icon in a dialog, if SROW = 0, the icon is given an automatic top margin equal to half a row. This allows for a "natural" placement of the icon in the upper left or upper right corner of the dialog. Previously, your choices were row 1, which put the icon up right against the title bar of the dialog, or row 2, which wasted a lot of space above the icon in short dialogs. B. A set of high-quality, standard icons is now included with A-Shell, packaged in an external module ashico1.dll. To display one as a dialog icon (rather than a push-button icon), use the following syntax: xcall AUI,"CONTROL",1,CTLID,ICONAME,MBST'ENABLE, & MBF'STATIC+MBF'ICON,"","",CSTATUS, SROW,SCOL,SROW,SCOL where ICONAME uses the following syntax: "<resourcename>::<modulename>". In this case, <modulename> is "ashico1", and the list of <resourcename> possibilities with this <modulename> is: about add add2 check check2 checks copy cut delete delete2 disk_blue disk_blue_error disk_blue_ok disk_blue_warning documents document_add document_chart document_check document_edit document_error document_exchange document_find document_lock document_ok document_out document_text document_view door door2 edit error exchange exit export1 find find_again find_next find_previous find_text folder folder_add forbidden garbage gear gear_error gear_ok gear_pause gear_refresh gear_stop gear_time help help2 import1 information navigate_beginning: navigate_down navigate_down2 navigate_end navigate_left navigate_left2 navigate_right navigate_right2 navigate_up navigate_up2 paste printer3 stop unknown view warning zoom_in zoom_out NOTE: ashico1.dll must be displayed in the standard Windows path, which starts in the directory where ashw32.exe is loaded from, and then includes the Windows and System32 directories. C. To help make sense of all these choices, see the new sample program, ICODLG.BP, which displays all of the above icons with their names. D. In addition to the above list, a must smaller set of standard Windows icons is now accessible directly from within A-Shell (without the need for an external DLL). These use the following ICONAMES: "#HAND" - Same as the MBICON'stop icon in MSGBOX. In XP, this appears as an X in a red circle. "#QUESTION" - Same as the MBICON'question icon in MSGBOX. "#EXCLAMATION" - Same as the MBICON'exclamation in MSGBOX. In XP, this is a yellow triangle with an exclamation mark in it. "#INFO" - Same as the MBICON'info icon in MSGBOX. In XP, this is an "i" in a white caption bubble. "#WINPTR" - A generic printer icon. Note the following distinctions between displaying an icon as a button (MBF'BUTTON+MBF'ICON) and displaying an icon as a static control (MBF'STATIC+MBF'ICON): - Icons on buttons are scaled to the size of the button, whereas icons in static controls display in their "natural" size (which in most cases is 32x32 pixels, although on an extremely low res or high res screen, or if you tinker with the Windows system parameters, it may as small as 16x16 or as big as 64x64). Although the icon size is not affected by the EROW and ECOL parameters, I recommend setting them either equal to SROW and SCOL (as shown in the example XCALL syntax above). - Buttons interpret the ICONAME parameter as a filespec, whereas static controls interpret it as a resource name, which must be one of the pre-defined names starting with "#" above (e.g. "#INFO") or be defined in a DLL and use the "resourcename::modulename" syntax as described above (e.g. "help:ashico1"). (At some point in the not-too-distant future, we will try to make the ashico1.dll icons available to be used in buttons, but for now, they can only be used as static icons. - Static controls, including icons, may have click actions defined, but they cannot get the focus while waiting in the EVENTWAIT routine. 3. (Windows/ATE) XTREE will now automatically assign the XTR'CTLNO (XTREE instance or control #) when creating a new XTREE control (i.e. XTR'OPCODE = 0), if you initially set it to -1. XTR'CTLNO will be returned with the number assigned, which must be used for any other calls to that same XTREE instance. ============================================================================ A-Shell Development Notes Version 4.9.918 (17 Feb 2005) ============================================================================ 1. --- (Windows/ATE) Wallpaper is now turned off automatically while in VUE and EZVUE, and turned back on (if applicable) on exit. (Note that in the case of VUE, the restored wallpaper doesn't re-appear until you redraw the screen.) Wallpaper is also turned off when exiting A-Shell/UNIX. 2. -- (Windows/ATE) Introduce a new TCRT sequence to allow copies of the screen to be saved and restored in any order (as opposed to in LIFO stack order as with the existing TCRTs 202 and 203). TAB(-10,40);"<cmd>,<id>";chr(127); where <cmd> one of the following: S (save screen) R (restore previously saved screen) P (pop previously saved screen without redisplay) and <id> is an arbitrary numeric identifier from (1,2,3,...) Examples: ? TAB(-10,40);"S,1";chr(127); ! save screen with ID 1 ? TAB(-10,40);"S,5";chr(127); ! save screen with ID 5 ? TAB(-10,40);"R,1";chr(127); ! restore screen saved as ID 1 ? TAB(-10,40);"R,0";chr(127); ! same as TAB(-1,203) ! (i.e. restore last saved screen) ? TAB(-10,40);"P,3";chr(127); ! pop/discard screen saved as ID 3 ? TAB(-10,40);"P,0";chr(127); ! pop/discard last saved screen Notes: This capability was implemented via a TAB(-10,x) sequence rather than by extending the existing TAB(-1,202) or TAB(-1,203) commands, because those commands to not have terminators and thus we cannot just add optional arguments. (Because TAB(-10,x) commands must be terminated with chr(127), they support variable length arg lists.) TAB(-10,x) sequences are only supported under A-Shell/Windows and under UNIX when the client is ATE. TAB(-10,40) does save and restore GUI controls. However, it is advisable that you clear the screen with TAB(-1,0) before restoring a saved screen which contains GUI controls; otherwise the restore controls will be added to any controls already existing on the screen. Unlike TAB(-1,202) and TAB(-1,203), which operate on the machine where the software is running, TAB(-10,x) sequences operate on the workstation. Thus, under Linux, the save/restore operation takes place entirely on the workstation. This reduces both network traffic, memory, and CPU usage on the server, but it should be noted that the server's copy of the screen map will not be updated. This could interfere with server- based screen pictures, and also with the operation of TCRTs 202/203 after TAB(-10,40), since those TCRTs interact with the server's screen map. (The problem is temporary though, since the server's screen map gets re-synchronized whenever you clear and repaint the screen with regular, server-based PRINT statements.) 3. --- (UNIX) New miame.ini command OPTIONS=SEQLOK enables locking on sequential files (when LOKSER is enabled). Previously, sequential files under UNIX were not subject to locking rules (other than VUE, which implements its own locking scheme). Under Windows, sequential file locking has been enabled since 4.7. ============================================================================ A-Shell Development Notes Version 4.9.917.1 (14 Feb 2005) ============================================================================ 1. --- (ATE) Fix bug in processing ZTERM ESC sequence to paste clipboard. (Was waiting for an extra character.) 2. --- (Windows) Fix bug in MIAMEX,138 opcode 4 call (query Registry) call; was not expecting the TYPE parameter as documented. Now matches documentation (see edit 908 below). 3. --- (UNIX/ATE) Fix problem with server-issued ATE license being lost when using HOSTEX to launch a child A-Shell session. 4. --- (Windows/ATE) Fix problem where maximized setting in saved settings file was being overridden on startup if workstation not locally licensed. ============================================================================ A-Shell Development Notes Version 4.9.917 (09 Feb 2005) ============================================================================ 1. --- LIT commands no longer generate an error when opening a file for output if the file already exists, unless the STRICT option is set (using OPTIONS=STRICT in the miame.ini, or SET STRICT). 2. --- (WINDOWS/ATE) Clear the default parent control setting (see MIAMEX,141) at the start of a new RUN program. 3. --- (WINDOWS/ATE) Various minor fixes and improvements in the AUI, "EVENTWAIT" operation. Define the various flags in the ashell.bsi (edit 108), including two new ones (EVW'DESCEND and EVW'SIBLINGS): MAP1 EVWAIT'SYMBOLS ! [108] AUI,EVENTWAIT opcode flags MAP2 EVW'NEXT,B,1,1 ! start with focus AFTER specified one MAP2 EVW'NOWAIT,B,1,2 ! set focus and exit without waiting MAP2 EVW'NOWRAP,B,1,4 ! exit at edge of range (instead of wrapping) MAP2 EVW'NOFOCUS,B,1,8 ! no changes to focus MAP2 EVW'NUMERIC,B,1,16 ! allow numeric keyboard input MAP2 EVW'DESCEND,B,1,32 ! descend into subgroups of parent MAP2 EVW'SIBLINGS,B,1,64 ! expand range to include siblings of parent The EVW'DESCEND switch is needed when you want to allow the focus to be moved around a dialog or group that itself contains subgroups (such as a group of radio buttons). EVW'SIBLINGS expands the range of controls that the focus can be moved among to include siblings of the specified parent. An example where this would be handy is when you have a group of buttons in a dialog, and you want to start the focus on the first button in that group (without knowing the button's control ID), but you want to allow the user to TAB out of the button group into the rest of the dialog. It can be combined with EVW'DESCEND. A new sample program, TSTEVW, is now available to help better understand both AUI,"EVENTWAIT" and BTNMNU.SBX (which is a wrapper for EVENTWAIT). 4. --- (WINDOWS/ATE) Bug fix: When checkboxes were created using the batch process (AUI,"CONTROL" opcode 8), they were always starting out unchecked. Now the initial checked state is based on the value of the control variable (as previously documented). 5. --- (WINDOWS/ATE) AUI "CONTROL" (aka MIAMEX,119) opcode 0 now returns all of the parameters relating to the actual control, rather than just the status. (It now returns the control text, type, coordinates, colors, font info, etc. The only field which is not returned is the checked status (func parameter), for which you need to use opcode 5. This is demonstrated in the TSTEVW sample. 6. --- (WINDOWS/ATE) Wallpaper is automatically turned off when in VUE. 7. --- (WINDOWS/ATE) Add a "Minimum Margin When Maximized" field to the Misc. Settings dialog to resolve the conflicts relating to adjusting the sizing of maximized windows. The normal, default setting is 0, which means that if the number of columns divides evenly into the screen width, when maximized there will be no left or right margin at all. (This happens, for example with 800x600 and 1280x1204 at 80 columns.) On some PC's however, this may cause the first and last column(s) to be clipped (due to overscan). Previously, we just subtracted a fudge factor from the screen width to prevent this problem, but now you can just set the minimum margin parameter. The margin units are pixels, but in most cases, setting the minimum margin to just 1 pixel will actually result in a considerably larger margin since font widths generally come only in integer pixel widths. For example, in the 800x600 case, the font width would be 10 pixels at 80 columns. But if you introduce a 1 pixel margin, the font width will have to be reduced to 9, which means that 80 columns only occupies 720 pixels (leaving a margin of 40 on either side). Note that in the Windows and ATE environments, you can increase the number of columns in the window grid to put some of the margin space to work. For example, in the 800x600 case, if the font width is going to be 9 pixels, you could increase the number of columns from 80 to 88 and still a 4 pixel margin on either side. The margin is ignored in non-maximized mode, because in that case, first of all, overscan is not likely to be a problem, and secondly, if it were, you could just adjust the window width with the mouse. 8. --- (ATE) When using xcall AMOS or xcall HOSTEX to launch another process on the server running A-Shell, if the ATE reverse channel socket is open, it will be automatically closed. (This allows the child process to establish its own reverse channel socket connection if it likes, and more importantly prevents messages which belong to the child from ending up going to the parent.) Upon return from the HOSTEX or AMOS call, the reverse channel is re-established, if applicable. NOTE: the parent application is responsible for saving and restoring the screen. The recommended sequence is: PRINT TAB(-1,202); TAB(-1,0); ! save screen & clear it XCALL HOSTEX,"$ASHELL run prog" ! (or XCALL AMOS,"run prog") PRINT TAB(-1,0);TAB(-1,203); ! clear and then restore it ============================================================================ A-Shell Development Notes Version 4.9.916.2 (02 Feb 2005) ============================================================================ 1. --- (WINDOWS/ATE) Fix problem with unwanted resizing of controls and relocation of dialogs when restoring from minimized. Also, we no longer resize controls within dialogs (when resizing the main window). 2. --- (WINDOWS/ATE) Support "wallpaper" for the main window background. This is really only useful at present for windows that are blank except for a dialog box, since static text controls do not currently support transparent backgrounds. To activate a wallpaper bitmap, use the following command: PRINT TAB(-10,39);BMPSPEC;chr(127) Where BMPSPEC is the filespec of the desired BMP file. To clear the wallpaper, set BMPSPEC="". Note that although the BMPSPEC may be in native or AMOS syntax, it must be relative to the PC client. (There is no automatic provision for transferring it from the server.) Only BMP files are supported. 3. --- (Windows/ATE) xcall AUI,"EVENTWAIT" now supports radio buttons, checkboxes, and also multi-generational sets of controls. Previously, it would only recognize regular button controls that were direct children of the specified parent control (or of the main window if the specified parent was 0). Now, it will recognize all controls that are desdendents of the specified parent, PROVIDED that any non-button controls are created with the new MBF'TABSTOP flag. (MBF'TABSTOP is defined in ashell.bsi [107] as MBF'TABSTOP,b,2,1024) 4. --- (Windows/ATE) Eliminate the beep which accompanied hitting TAB to exit from XTREE. ============================================================================ A-Shell Development Notes Version 4.9.916 (31 Jan 2005) ============================================================================ 1. --- XCALL MIAMEX,108 now supports an option to load a module into user memory, directly from a variable in a program (rather than just from a file). This creates a generalized memory storage/retrieval mechanism similar to COMMON but without any particular restriction on packet sizes, making it ideal for use with SBX's that may need to store data between calls and which do not want to make assumptions about the configuration of COMMON.SBR. The updated calling sequence is: XCALL MIAMEX,MX'USRLOD,IDX,NAME{,FLAGS{,VAR}} As before, IDX returns the slot number used to load the module (or 0 if not loaded, or -1 if the module was already locked in memory and thus could not be replaced.) For a standard file load, NAME should be the file spec of the file to load. For a load directly from a variable, it should just be an arbitrary name.ext that you want to name the new module (up to 10.3). FLAGS may optionally be set to any combination of the USRMEM'xxxxx flags (see ashell.bsi). You MUST specify USRMEM'NOFILE if loading directly from a variable. VAR is the name of the variable (any type, but typically an unformatted structure) to load into the module if the USRMEM'NOFILE flag is specified. For example: MAP1 LOCAL'VARS MAP2 ABC,S,20 MAP2 XYZ,F MAP2 PQR,B,1 MAP2 WXY,S,100 xcall MIAMEX,MX'USRLOD,IDX,"MYCOMMON.VAR",USRMEM'NOFILE,LOCAL'VARS 2. --- Increase the maximum command line length from 200 to 300. 3. --- SUBMIT.LIT 3.1(140) now supports command lines up to 300 characters. 4. --- SYSTAT.LIT 3.0(153) fixes a problem with the /S and /ST switches, as well as a problem in which it would hang waiting for any jobs submitted by the current job to complete. 5. --- DO.LIT 2.1(123) supports the longer command line and also supports the $+ concentation operator even when embedded within another command line argument. (This eliminates the confusion caused previously by the renumbering of the command line arguments when concatenation was used.) See notes for build 910 below for more notes on concatenation with $+. ============================================================================ A-Shell Development Notes Version 4.9.915.2 (30 Jan 2005) ============================================================================ 1. --- Implement new GDI printing directive: //TextIndent,x,y,text //TextIndent The first form of the command acts exactly like //Textout except: A) it establishes an indent value of x, so that subsequent lines output without using //TextOut will retain the same indent. B) it sets the internal printer 'cursor' to the specified x,y position so that subsequent lines (output without any explicit positioning) will appear in the expected place. C) you can set x and/or y to -1 to refer to the current x and/or y position (useful when you don't know the current position). Note that for the x position, you might need to use the technique of ending the previous output with \ to hold the position, for example: //TextOut,100,100,Our indented text starts here---> \ //TextIndent,-1,100,[Start Indented Text] [2nd line of indented text] //TextIndent The second form (without any arguments) disables the indent, restoring the original margin. This command is useful when outputting a multiline block of text, such as you would get from INFLD multiline mode or INMEMO. For example, assuming that we have retrieved the multiline text into a variable MEMO$, you might use the following code: PRINT #CH, "//TEXTINDENT,";XPOS;",";YPOS;",";MEMO$ PRINT #CH, "//TEXTINDENT" ! turn indent off Note that because the MEMO$ variable contains embedded CRLF terminators, in the printfile it would look something like the this: //TEXTINDENT,150,300,This is the first line of the memo This is the second line of the memo This is the third line of the memo //TEXTINDENT Also note that the vertical spacing for the subsequent lines (second and third lines in the example immediately above) is determined based on the last established font, and is the same you would get when outputting text without using //TEXTOUT. 2. --- Related to the above, it is no longer necessary to quote the 3rd argument of //TEXTOUT and //TEXTINDENT commands in order to prevent commas in the text from being treated as argument terminators. For example: //TEXTOUT,150,300,McGregor,Jack Previously, the above would have printed just "McGregor" and ignored the ",Jack" because it would have first parsed the line based on the commas, assigning "McGregor" to the 3rd argument and "Jack" to the fourth. Since //TEXTOUT takes only 3 arguments, the 4th argument was ignored. To avoid that, it was previously necessary to use quotes as follows: //TEXTOUT,150,300,"McGregor,Jack" The problem with requiring the quotes is that it wouldn't work with //TEXTINDENT without forcing the application to first parse the multiline string. So we've eliminated the quoting requirement for //TEXTOUT and //TEXTINDENT; everything after the X,Y parameters is considered part of the 3rd argument (up to the CRLF). 3. --- (WINDOWS/ATE) New GDI printing directive: //ResetLPP This resets the current lines-per-page value, which is used to determine the vertical line spacing, so that the line spacing will instead be based on the current font. Even when there is no explicit LPP value in the printer init file, a default LPP is established based on the paper size and default font. Once established, changing the font does not change the vertical spacing (unless you use the //ResetLPP command). For example, assume that the default LPP results in vertical line spacing of 6 lines per inch. If you then change to a 24 point font, and output multiple lines, the lines will overlap vertically because the 24 point font is taller than 1/6 of an inch. To avoid that and instead adjust the vertical line spacing to what would be natural for a 24 point font, just use the //ResetLPP command either before or immediately after the //SetFont, as shown here: //ResetLPP //SetFont,240,Arial This line output in 24 point Arial So is this line (with natural 24 point spacing) 4. --- (WINDOWS/ATE) Fix bug in which a TAB(x,y) would delete a control positioned at (x,y) even if the TAB was relative to the main window and the control was relative to some other window (such as dialog). Note that this auto- delete feature is deliberate, as it cleans up situations in which a program would expect one PRINT TAB(x,y);STRING$ to completely replace a prior output at that position. But obviously we shouldn't confuse absolute (x,y) coordinates with those that are relative to a parent control. 5. --- (WINDOWS/ATE) TYPE ")" (start cursor at end of text) in a multiline edit control now scrolls the editing window as expected, including in display mode. ============================================================================ A-Shell Development Notes Version 4.9.915.1 (28 Jan 2005) ============================================================================ 1. --- Fix non-ATE TRMCHR (broken in 915) ============================================================================ A-Shell Development Notes Version 4.9.915 (27 Jan 2005) ============================================================================ 1. --- (WINDOWS/ATE) TRMCHR.SBR now supports the WINROW and WINCOL fields in the parameter packet to indicate the usable size of the current dialog window, if any. Note, however, that in order for an application running on a server to find out the current dialog information from an ATE client, you must set the WINROW field to -1 before the XCALL TRMCHR. (This c causes the server to transfer the TRMCHR request to the ATE client.) Otherwise, the information will only be relative to the server, where there is no currently defined significance for WINROW and WINCOL. 2. --- Fix a bug in which if all licenses were in use when a new instance was launched, and the IJCFREQ parameter in MIAME.INI was set to 0, then it would mistakenly think the first job was dead and would zap it. 3. --- (WINDOWS) Implement a minor improvement in the TRACE=QOP tracing related to JOBTBL locking. 4. --- xcall AUI,"EVENTWAIT" now supports ^R (VK_PREV) and ^T (VK_NEXT) commands, generating EXITCODES 4 and 6, respectively (just like INFLD). 5. --- BTNMNU.SBX 1.0(103) (released through the Shared Open Source Library) supports several new features: - Ability to have more than one group of buttons defined at a time - Eliminate dependency on COMMON.SBR - New MFLAGS options make available the options of AUI EVENTWAIT - New MFLAG to simplify creation of a standard horizontal row of buttons along bottom of screen or dialog. - TSTBMN.BAS sample program illustrates simplified switch, dialog option. Note, however, that it still needs work to support other button configurations and text mode. 6. --- GETPRG.SBR now supports program and SBX names up to 10 characters. Previously when used within an SBX, it would truncate the name of the calling program to 6 characters. Also, the ashlog.log was in some cases outputting garbage in place of program name, and also generating more JOBTBL activity than necessary. ============================================================================ A-Shell Development Notes Version 4.9.914 (23 Jan 2005) ============================================================================ 1. --- DEBUG system variable now defined, to aid application development debugging. In COMPIL /X:2 (A-Shell extensions), DEBUG is treated as a system variable (e.g. like CMDLIN, DATE, TIME, etc.) rather than an ordinary variable. However, to avoid breaking existing programs which use DEBUG as an ordinary variable, any MAP statement for a variable named DEBUG will cancel the special interpretation of DEBUG as a system variable. (The only remaining potential for conflict with existing program would be if you used DEBUG as an ordinary variable without mapping it, in which case you should be embarrassed at your sloppy programming habits, and you will get a compiler syntax error for any statements which attempt to assign a value to DEBUG.) The DEBUG system variable can be set in three ways: The first is to use the COMPIL /DEBUG switch, in which the program is compiled as if the variable DEBUG was hardcoded to 1. When set this way, it cannot be turned off at runtime, so would probably only be useful during program development. The second way to set it at runtime, using SET.LIT (SET DEBUG or SET NODEBUG). This will cause the same effect as compiling with the /DEBUG switch, except it is not hard-coded into the program (i.e. it can be turned on and off without recompiling.) The third way is to use XCALL MIAMEX,144... xcall MIAMEX,MX'DEBUG,OP,DBGFLG (MX'DEBUG=144) Where OP=0 to retrieve the current value of the system variable DEBUG (in the ordinary variable DBGFLG), and OP=1 to set it. Regardless of how DEBUG is set, you can reference it as a read-only variable within your programs to conditionally execute debugging code, i.e.: IF DEBUG THEN XCALL MSGBOX,... 2. --- COMPIL.LIT 1.0(116) updated to support /DEBUG switch. 3. --- SET.LIT 1.2(144) updated to support the {NO}DEBUG switch: SET DEBUG {#} SET NODEBUG (SET DEBUG is equivalent to SET DEBUG 1; higher debug levels, up to 9, can be specified and interpreted as you like within your applications.) 4. --- A new subroutine, EVTMSG.SBX, has been released into the Open Source Library (available at http://www.a-shell.net/cgi-bin/ultimatebb.cgi). It is similar to MSGBOX.SBX but both simpler to use (making it more attractive for debugging messages, particularly in conjunction with the DEBUG system variable), and also somewhat more sophisticated (allowing for a severity level option and and option to output the message to a log file instead of or in addition to the screen.) Being based on MSGBOX.SBX, EVTMSG.SBX works in both GUI and text environments, Windows and UNIX. Usage: XCALL EVTMSG,LVL,MSG{,ARG1,....ARGN} Where: LVL (numeric) is a code indicating the severity or importance of the message: EVTMSG.MAP Meaning ----------- ------------------------------------ 0 (EVL'DEBUG) debugging 1 (EVL'INFO) information 2 (EVL'WARN) warning 3 (EVL'ERROR) error 4 (EVL'FATAL) fatal error It may also include one or more of the following flags: +16 (EVL'LOG) output to log file (OPR:EVTMSG.LOG) +48 (EVL'LOGONLY) output only to log file (no message box) MSG (string) is the message to output, which may optionally contain variables %s, %d, and/or %f which will be substituted by the next ARGx variable in sequence. The choice of variable syntax was chosen to match the C function printf(), where they would refer to string, decimal, and floating point arguments, respectively. But due to the automatic conversion of Basic numeric variable to string, they are all equivalent in this implementation. (By releasing this as open source, the possibility is left open for someone to implement more formatting types.) Note that there is nothing stopping you from using the traditional method of concatenation using the Basic + operator; the theory of the % variables and ARGx parameters is simply that it may be easier to type and/or read in source code. ARG1..ARGN (any type) are arguments to replace any %s, %d, or %f variables in the MSG string (applied left to right). Some examples: IF DEBUG THEN & XCALL EVTMSG,EVL'DEBUG,"Counter=%d, Sum=%f",COUNTER,SUM XCALL EVTMSG,EVL'INFO+EVL'LOGONLY,"User %s logging in",USER$ XCALL EVTMSG,EVL'FATAL,"Disk Full!" When the EVL'LOGONLY flag is not specified, EVTMSG will use MSGBOX.SBX to display the message with just an OK button and using an icon appropriate for the LVL and with the task-modal option set. The title of the message will consist of a prefix corresponding to the LVL (e.g. "DEBUG", "WARNING", etc.) followed by the current program name and version. The prefix strings can be over-ridden by defining them in SYS:SBRMSG.xxx: 022,010,Debug 022,011,Info 022,012,Warning 022,013,Error 022,014,Fatal Error When messages are logged to the file OPR:EVTMSG.LOG, they are prefixed with a time/date stamp, plus the program name, version, job, pid, user, etc. The LOG file is also automatically cycled (to 001,002,003,004) when it exceeds 3MB. The previous 004 copy is discarded. 5. --- Fix problem with "double-bounce" of keys on numeric keypad during AUI,"EVENTWAIT" operation. 6. --- New INFLD TYPE code |l forces lower case. (Don't ask!) ============================================================================ A-Shell Development Notes Version 4.9.913.3 (21 Jan 2005) ============================================================================ 1. --- (ATE) XCALL MIAMEX,91,OP,SYSBCLR,WINBCLR,WINTXTC (to set or retrieve the special Windows color associations) is now supported under UNIX/ATE as well as Windows. 2. --- (Windows/ATE) Trailing blanks on the text/label portion of an INFLD checkbox are no longer stripped (allowing you to use them for adjusting the spacing between the checkbox and the text). 3. --- (UNIX) Submitted jobs were failing to terminate when hitting the end of the CTL file (going into an infinite loop instead.) (Problem was introduced in build 910.) ============================================================================ A-Shell Development Notes Version 4.9.913.2 (19 Jan 2005) ============================================================================ 1. --- (ATE) Clean up some problems with the reverse channel. 2. --- (Windows/ATE) A new flag, MBF'WRAP (4194304; same as MBF'PATHELLIPSIS) has been defined for use on buttons to cause the text to wrap onto multiple lines if it doesn't fit on a single line (and assuming the button is tall enough to display multiple rows of text). ============================================================================ A-Shell Development Notes Version 4.9.913.1 (17 Jan 2005) ============================================================================ 1. --- Fix two INMEMO bugs. One was that under Windows, attempting to access a memo which was being edited would cause the application to get a read error abort, rather than MEMO LOCK. The other was that under UNIX, it would display the MEMO LOCK, but if you hit ^C, it would be stuck until the lock was freed. (Hitting ESC would have worked if you did it before hitting ^C.) Now, hitting ^C is treated as equivalent to ESC (i.e., it does a soft abort from the lock without accessing the memo.) 2. --- (Windows/ATE) Fix various problems in the new ATE reverse channel implementation of build 913. ============================================================================ A-Shell Development Notes Version 4.9.913 (16 Jan 2005) ============================================================================ 1. --- (ATE) ATE reverse channel now supports multiple ATE clients from same IP address connected to same server. Previously, this may have appeared to work but was prone to lockup problems. Note that the port defined in the ATE configuration is now offet the number of jobs whose clients have the same IP address. For example, if you set the port to 30000, the first client from that IP will use that port, but the next one (i.e next instance of ATE on that PC or on a PC which shares the IP address by virtue of a some kind of proxy) will use 30001, then 30002, etc. So if you need to adjust your firewall to allow outbound connections from the server, allow a range of ports to account for the maximum number of ATE connections originating from the same IP. The reverse channel listening procedure has also been changed to work better in a multi-session / multi-server environment (i.e. where one ATE client IP is running multiple ATE sessions to multiple servers.) Previously, the client would listen all the time for a request to establish a reverse channel connection. This created a potential conflict with multiple processes listening for connections on the same port at the same time. Now, it only starts listening when the ATECTL/C command is used to initiate a connection, and it stops listening as soon as the connection is accepted (typically this is an interval of a fraction of a second). So unless you managed to execute ATECTL/C simultaneously on two different servers connected to the same ATE client, there should be no conflict. (You can eliminate any possibility of a conflict by using different port numbers in the ATE configuration for different servers.) 2. --- Debug-level tracing of the A-Shell startup (when using the -trace command line switch) has been improved somewhat. First, more details have been added. Second, a problem with establishing the ashlog.log filename prior to identifying the miame.ini has been fixed. Previously, this was resulting in a log file called "tempashlog.log" in the user's Local Settings directory. (You might want to search for tempashlog.log and erase them if you have any.) Now the file is properly called ashlog.log and is in the directory defined by the user's TEMP (or TMP) environment variable. To clarify the previous paragraph, although the normal location for the ashlog.log file is in the same directory as the miame.ini (or in the directory specified by the LOGDIR= statement in the miame.ini), certain trace operations may occur before A-Shell has established either of those locations. For those traces, it uses the TEMP directory to create ashlog.log. This can be particularly useful in debugging problems relating to not being able to access the miame.ini (such as networking problems). So if A-Shell fails to launch correctly and you can't figure out why, try adding "-trace" to the command line (in the properties of the shortcut) and then look at the copy of ashlog.log that will be found in the TEMP directory for the user. For windows, this is typically: "c:\Documents and Settings\<username>\Local Settings\Temp\ashlog.log" For UNIX, it will be "/tmp/ashlog.log". Note that if the launch proceeds to the point where it starts to process the miame.ini file, subsequent log entries will go to the regular ashlog.log file in the directory where the miame.ini is (or as specified by LOGDIR=). ============================================================================ A-Shell Development Notes Version 4.9.912 (12 Jan 2005) ============================================================================ 1. --- (ATE) ATE Reverse Channel protocol optimized for responsiveness on Linux & AIX hosts. 2. --- (Windows/ATE) Fix two problems in the AUI,"EVENTWAIT" class: a. Sometimes it would leave A-Shell with one or more queued up characters in the input buffer, or in a state where every keystroke was doubled. b. It was also leaving the focus on a button after exiting. 3. --- We now keep track of the minimum amount of free memory. SYSTAT.LIT 3.0(152) can display this information (in place of the total allocated memory) using the /M switch. This can be useful to determining if your memory partition size is excessive. SYSTAT/W now also totals the memory column, for convenience it estimating total memory usage. Note that SYSTAT shows the memory allocated by each user, including dynamic allocations for programs, sorting, etc. However, it does not include the memory assigned by the OS to the process for the stack and runtime workarea for the ashell executable or any shells. This may help explain the discrepancy between the memory usage shown in some OS utilities (such as ps or top) and that shown in SYSTAT.LIT 4. --- Tracing improvements: SET.LIT 1.2(143) now supports SET TRACE ATE ON/OFF (TRACE=ATE) and SET TRACE SOCKS ON/OFF (TRACE=SOCKS). The former shows ATE-specific operations from the server perspective (must less verbose than TRACE=GUI). The latter shows TCP socket operations (such as TCPX.SBR or within ATE). 5. --- File not found errors were being reported as error 16 (file specification error) rather than 17 (file not found). ============================================================================ A-Shell Development Notes Version 4.9.911 (6 Jan 2005) ============================================================================ 1. --- Fix an obscure problem in which the DEFPT and MAXPT parameters to INFLD, when mapped as B,2 and set to -1 were not acting properly (due to a signed conversion failure.) 2. --- (Windows/ATE) Implement AUI,"MENU" class. Equivalent to the previous MIAMEX,71 except that it also supports ATE. In the case of the "simplified mode" (where you specify an MDF file), it assumes that the MDF filespec is relative to the PC client. So if you want to keep your MDF files on the server, you may need to first transfer them to the PC client (or use a file sharing technology like Samba). 3. --- (ATE) Fix three INFLD/ATE problems: Fields that normally redisplayed with extra formatting characters were not being displayed correctly. For example, a zip enter as 123456789 was displaying as 12345-789 instead of 12345-6789, even though it was being returned correctly (as 123456789). Multi-line edit fields were not displaying the line breaks properly. The CMDFLG=2 option to force the appearance of the drop-down display (combo or date picker) was not working. Note that the normal setting for CMDFLG is 0. 1 tells INFLD to accept input from a command file, but this is not applicable with ATE GUI mode, since the command file would be on the server while INFLD is operating on the client. (If you really wanted that, you should turn GUI mode off temporarily with ||g). 4. --- (WINDOWS/ATE) The AUI,"WINDOW" class now supports a flag that resets the window state and settings back to what was last saved in the settings (ash) file. See the updated item 5 under edit 910 below for more details. 5. --- SET.LIT 1.0(142) now supports an INFDEF option to display or change the list of default INFLD codes (previously only able to be set via the miame.ini SBR=INFDEF statement.) Syntax: .SET INFDEF (display) .SET INFDEF <codes> (replace current defaults with <codes>) xcall MIAMEX,143,OP,INFDEF allows the same capability from within a program. (MX'INFDEF is defined as 143 in ashell.bsi edit 103). OP is a numeric argument; if 0, the current default type codes are returned in the INFDEF parameter, otherwise the current default type codes are replaced by those in the INFDEF string. The maximum size of the default string is currently 36. This feature is of course handy for experimenting with global INFLD TYPE codes within a single job (without interfering with other jobs). It may also be useful for changing the defaults with a single program. Note that for a particular INFLD call, you can disable the default TYPE codes by adding m to the TYPE parameter passed to INFLD. 6. --- (ATE/Windows) The font cache has been expanded from 10 to 32 separate fonts. This should eliminate the problem of font cache overflow when using a lot of different sized fonts on one screen. (Some symptoms of the problem were "font cache overflow" messages in the ashlog.log, fontidx entries of -1 in the control dump spreadsheet, and controls displaying with the wrong font. Other font creation errors are also now logged to ashlog.log. ============================================================================ A-Shell Development Notes Version 4.9.910 (3 Jan 2005) ============================================================================ 1. --- (Windows/ATE) Implement a new control socket for the ATE "reverse channel". When connected, all non-keyboard communication from the ATE client to the server is sent via the socket, rather than sharing the stdin data stream with the keyboard. The objective is to eliminate interference between keyboard data (especially in the form of typeahead) and control data (such as result codes from INFLD and GUI operations). There are two steps to activating the connection. The first is to check the option "Accept Connection From Server" on the Misc tab of the ATE configuration dialog and enter an available port number that is visible by the server to the client (requires ATE build 153 or higher). (A high numbered port, above 20000, is recommended.) The second step is to execute ATECTL/C from the dot prompt of the server after connecting (see separate description of ATECTL.LIT below). Note that if there is a firewall between the server and client (or you are running a software firewall in the ATE client), you will need to open up the port you choose to connect on. Also note that use of this connection is optional, and can even be turned on and off during a session. When the connection is not available, ATE will revert to using the keyboard channel for passing control data. 2. --- (ATE) A new LIT command, ATECTL.LIT, allows you to connect, disconnect, and display the status of the ATE control socket. Usage: .ATECTL/C{onnect} (connect) .ATECTL/D{isconnect} (disconnect) .ATECTL/S{tatus} (default switch - displays status) The Help..About dialog box also indicates the status of the ATE control connection. 3. --- (ATE) Build 3.0.154 allows option of saving configuration for current users (HKEY_CURRENT_USER) or for all users (HKEY_LOCAL_MACHINE). In a security environment (such as with Terminal Server), depending on the privilege level, a user may only be able to see his own profiles, or possibly both his own and the shared profiles. Note that you still need Administrator privileges when first installing ATE. 4. --- (Windows/ATE) The AUI "EVENTWAIT" class (aka MIAMEX,135) now supports a new opcode flag (+16) which allows input of a numeric option in addition to the normal means of selecting an action by clicking on a button or other control. According to a certain Fargo native, this will be appreciated in environments where there are mixture of users that want a GUI and those reluctant to give up their keyboarding ways. If the user types a series of numeric digits followed by ENTER without any interceding mouse actions, the numeric value will be returned in the ctlid parameter and exitcode will be set to 0. 5. --- (Windows/ATE) You can now query and/or change the window size and position via a set of new optional parameters on the MIAMEX,MX'SHOWWINDOW (77) operation: XCALL MIAMEX,77,FLG{,LFT,TOP,RGT,BTM{,ROWS,COLS{,TSTS,BSTS}}} or the new equivalent: XCALL AUI,"WINDOW",FLG{,LFT,TOP,RGT,BTM{,ROWS,COLS{,TSTS,BSTS}}} FLG is a code indicating the window state (0=hide, 1=normal, 3=maximize, 6=minimize, 9=restore). A special value -1 is used to retrieve all of the other parameters without changing anything. If setting any of the other parameters, FLG should be set to one of the valid window state flags (1 for "normal", i.e. non-maximized, non-minimized). [910.1]... You may also add +64 to the FLG value to cause to first reset the window and all other associated settings according to the currently active settings file (just as if you had used the File..Load menu option and didn't change the default ash file name). Note that if you just want to reset the window and settings to the original state, then set FLG=65 and either omit all the other parameters or set them all to 0 (-1 for TSTS and BSTS). The next set of optional parameters (LFT,TOP,RGT,BTM) may be used to set or retrieve the coordinates of the Window in standardized units that range from 0,0 for the upper left corner of the screen to 10000,10000 for the bottom right. You may leave these 0 to retain the current window coordinates (if you just want to change the ROWS/COLS or status lines.) Following the window coordinates is another pair of optional parameters (ROWS,COLS) which sets or returns the number of rows and columns for the window. You may leave these 0 to retain the current number of ROWS & COLS (and just change the window coordinates and/or status lines). The last pair of optional parameters (TSTS,BSTS) sets or returns the visible/invisible status of the top and bottom status lines (1=visible, 0=invisible). These should be set to -1 to leave them unchanged. See the sample program AUIWIN for an example of changing and later restoring the window parameters. Note that within each group of optional parameters, if you must specify them all in order for any to be recognized. 6. --- Fix a bug in which opening a file within an SBX and then using the XCALL MIAMEX,MX'FLSET operation in the calling program would cause a memory fault. 7. --- DO.LIT 2.1(122) supports a mechanism for concatenating parameters on the command line (before they are bound to the $0 thru $9 formal parameters). The syntax consists of prepending $+ to the start of a parameter that you want to combine with the prior parameter. For example, consider a generic DOTHIS.DO file consisting of the following command: HOST $0 $1 $2 $3 $4 $5 $6 $7 $8 $9 If you executed it with: .DOTHIS play ina $+gada $+davida real loud The resulting host command would be: play inagadadavida real loud Note that "real" and "loud", which started out in positions $4 and $5, got shifted by the concatenation down to $2 and $3. This technique is mainly of interest in conjunction with $KBDn variables and the UCS/LCS functions (see DO.LIT edit 121 below) where you may want to concatenate some folded keyboard input with a hardcoded value, and doing so directly would interfere with the interpretation of the $KBDn and LCS() / UCS() syntax. For example: :R :<Enter command: > :K0 :<Enter ini file: > :K1 DOTHIS /vm/miame/bin/ $+LCS($KBD0) -i /vm/miame/ $+LCS($KBD1) Assuming the user input "ASHELL" to the first prompt and "MIAME.INI" to the second, then the DOTHIS.DO file would execute: HOST /vm/miame/bin/ashell -i /vm/miame/miame.ini Without the concatenation, the user would have had to enter the entire paths or do without the LCS() function. 8. --- (Windows/ATE) Fix problems with multiline edit mode (INFLD TYPE |M and ||M). 9. --- (Windows/ATE) INFLD no longer outputs spaces to clear the fringe area immediately to the left or right of the field when in GUI mode. The purpose of these spaces was to remove prior displays that may have included formatting characters and thus expanded beyond the size of the field when in editing mode. But in the GUI environment, such text would be part of a single text object (presumably created from a previous call to INFLD or output by TPRINT or and AUI "CONTROL" routine) and thus would be removed automatically along with the rest of the field. This change could, however, cause a problem in an environment where you output a formatted field using fixed-pitch text and then positioned a GUI edit field on top of it. In that kind of hybrid display environment, you may need to manually clear the area immediately surrounding the field. 10. --- (UNIX/ATE) The AM62CG driver now supports the ability to change the number of rows and columns (just like the AM75G driver and A-Shell/windows.) ============================================================================ A-Shell Development Notes Version 4.9.909.8 (20 Dec 2004) ============================================================================ 1. --- (Windows/ATE) New INFLD TYPE code ||g nullifies |G, ||G, and |g (in other words, deactivates the GUI enhancements.) This is useful when you have added |G to the global TYPE codes, but then want to disable it for a particular field. 2. --- (Windows/ATE) INFLD CMDFLG parameter may now be set to 2 to force a combo box or date picker control to start off with the dropdown box visible. 3. --- (ATE) ESC sequence for pasting text from the clipboard now works exactly like the Edit..Paste menu operation (except that the former provides an option of appending a CR). Previously there was a slight difference which may have resulted in garbage. ============================================================================ A-Shell Development Notes Version 4.9.909.7 (19 Dec 2004) ============================================================================ 1. --- (PolyShell) New MIAME.INI command OPTIONS=TRKTOPSTS causes PolyShell to save/restore the top status line when swapping screens. Otherwise it only tracks the bottom status line and allows the top status line to be used for displays relating to the terminal or user, rather than the job. 2. --- (Windows) Fix bug causing bottom status line to become disabled if the top status line was removed. 3. --- (UNIX) Reinstate support for the -hetcki command line switch (that was lost somewhere along the line.) 4. --- Fix bug in compiler that generated a corrupted RUN file if a compiled statement used more than 1024 bytes of object code. (This was a rare case bug could occur, for example, with a long INPUT statement involving several dozen array values.) 5. --- DEVICE= statements in MIAME.INI now support quoted paths, allowing you to map a ppn to a path such as: DEVICE=XYZ0:[1,1] "C:\Program Files\COOL.STF\ZTERM For Windows\" 6. --- (Windows/ATE) New MIAMEX function allows you to set the default parent control, to apply to subsequent TPRINT/DPRINT commands: XCALL MIAMEX,141,CTRLID (MX'AUTOPARENT=141) This would be handy, for instance, if you wanted to use TPRINT statements to write on a TAB control or within a group box. 7. --- Implement XCALL MTMICR interface to the MagTek Excella Check scanner. (Contact us for details if interested.) 8. --- CMD/DO file processor now supports a variation of the :K command to input keyboard responses into variables which can tested in IF statements and used as DO file parameters. The following sample CMD file provides an example: :R :<Enter desired ppn: > :K0 :S :<Enter password: > :K9 IF "$KBD9" = "SECRET" DOLOG $KBD0 The special command :K0 is like :K, in that it waits for a line of input, but instead of passing the input to the current program, it simply stores it as $KBD0. The same concept applies to :K1 thru :K2 ($KBD1 thru $KBD9). The special $KBDn variables may be tested in an IF statement or passed as a command line argument to a DO file. Note that when using $KBDn in an IF statement, it must be quoted (as in the example above.) However, when using it as a DO file command argument, it should not be quoted. (In the example above, the DO file DOLOG.DO will see the $KBD0 on its command line and convert it to whatever had been entered to the "Enter desired ppn" prompt.) $KBDn variables cannot be used in any other context, even within a CMD/DO file. Unlike other special $xx variables which can appear in DO files, which are expanded by DO.LIT when it loads the DO file, the $KBD variables cannot be expanded until after the input operation takes place, and thus it is left to individual commands (currently just IF and DO) to interpret them. This feature requires the following LIT file updates: IF.LIT 1.0(106) DO.LIT 2.1(121) MDO.LIT 2.1(121) 9. --- DO.LIT 2.1(121) also supports the ability to specify the upper or lower case version of a $KBDn variable on the command line, which can be handy when building case-sensitive UNIX commands from input strings. The following example makes this clear: ;TEST.CMD :<Input something > :K1 DOTEST $KBD1 LCS($KBD1) UCS($KBD1) ;DOTEST.DO :<Command line: $0 $1 $2 > Assuming that the user had input "SiLly" in response to the prompt in TEST.CMD, the output of the DOTEST command would be: Command line: SiLly silly SILLY Note that these two functions - LCS($KBDn) and UCS($KBDn) are the only ones supported on the DO command line. ============================================================================ A-Shell Development Notes Version 4.9.909.2 (29 Nov 2004) ============================================================================ 1. --- (UNIX) Allow ^C from TCPX.SBR wait for accept operation. 2. --- Fix erroneous error 35 in parent program when SBX used MIAMEX,82. 3. --- Fix conflict between ANYCN and INFLD GUI mode. (Was generating a GPF or seg fault under some circumstances.) 4. --- Check for attempt to specify argument 0 in XGETARG or XPUTARG; if so, generate subscript out of range error (8). First legitimate argument is #1. 5. --- (UNIX) Fix problem in GET.SBR timeout feature in which it would not wait at all if doing keyboard input and the timeout setting was not at least 100 times greater (in ms) than the number of characters requested. (This was caused by a UNIX limitation of 1/10 second being the minimum usable setting for timed input.) 6. --- YANK <file> in VUE was not setting the file-updated flag, so if that's all you did and then tried to QUIT, it was not warning you that the file had changed. 7. --- (Windows/ATE) Fix a display anomaly with field attributes (when using the AM62CG driver with ATE or using OPTIONS=FIELDEMU) in which field TAB commands were not always occupying a space like they are supposed to. 8. --- (Windows/ATE) Remove warning about trying to define GUI objects if LATIN1 not set. We don't recommend using GUI objects unless LATIN1 is set, but apparently there are some legitimate situations where it might work. 9. --- (Windows/ATE) Don't check for MFT (manifest) files when executing LIT and SBX modules. This should speed up operations involving a large number of LITs (such as a batch compile using a CMD file with many IF, ENDIF, LOOKUP, etc.), or intensive use of SBX routines. ============================================================================ A-Shell Development Notes Version 4.9.909.1 (22 Nov 2004) ============================================================================ 1. --- (ATE) Misc improvements and fixes to the new login options. See ATE release notes for 3.0.150 2. --- (Windows) INFLD no longer forces the A-Shell Window to get the focus when at the start of each field. (This behavior was introduced in build 899, but had the undesirable side effect of forcing A-Shell to the foreground even when it had just launched another window.) If reverting to the old behavior causes problems with A-Shell being hidden underneath other Windows when not appropriate, we may have to add a switch. ============================================================================ A-Shell Development Notes Version 4.9.909 (20 Nov 2004) ============================================================================ 1. --- (ATE) Two new fields added to login configuration dialog: "Wait for Login Prompt" option, if checked, causes ATE to wait for the ':' which normally terminates the "login:" and "password:" prompts before sending respective fields. If not checked, it waits for any group of characters followed by a pause (which tends to slow down the login slightly and also may not be quite as reliable in terms of matching the login and password fields up with their respective prompts.) "Additional Login Text" field allows you to enter up to 255 characters (broken into however many commands), to be sent to the server after the password. Tildes (~) may be inserted in the text to cause a delay (each tilde counts for 250 ms). These can be useful in situations where there are timing issues in the application accepting the characters, or where the application may need to communicate with the client before dealing with the next keyboard command. (For example, the SET TERM command queries the terminal driver on the client for its ID, which is expected to be returned via the keyboard. Similarly, most of the ZTERM-compatible developer escape sequences use the keyboard channel to return status, as does the LICENS/ATESRV command and most other ATE commands. For any of these, you will need to insert delays if they are followed by any other characters in the list of "Additional login text". 2. --- (ATE) When starting a telnet session, if the FtpLocalDir field is defined in the profile, and there is an ATE.MDF file in that directory, then it will be processed for adding menus at the start of the telnet session. This provides a handy means of adding your own utilities to the ATE menu bar. Note that when the telnet session terminates, the menus are removed. (This is only an issue in the case where TELNET.LIT is used to launch a telnet session from within a normal A-Shell/Windows session, since in that case, the A-Shell window is not automatically closed at the end of the telnet session.) 3. --- (ATE) If the FtpLocalDir file in the profile is non-blank, an environment variable ATELOCALDIR is defined. This can be useful if you use this directory as place to keep files of interest to the server. Note that when using FTP, this directory will be the default, so the ATELOCALDIR is only really needed in conjunction with commands other than FTP. For example, you could look up a file in that directory, from the host, via: ? TAB(-10,31);"%ATELOCALDIR%myfile.dat";chr(127); INPUT "",BYTES,MTIME,CTIME,MODE ============================================================================ A-Shell Development Notes Version 4.9.908 (17 Nov 2004) ============================================================================ 1. --- XCALL TCPX enhanced to allow for better implementation of an AlphaBasic server that receives rapid connection requests (whether they are handed off to spawned children or by server itself.) The basic problem prior to this update was that the listening socket was closed as soon as a connection was accepted. Even if the server quickly processed the request and returned to accept another connection, any connection requests arriving while the listening socket was closed would have been rejected. The new feature allows the listening socket to be kept open independently of the connection socket, and the size of the queue has been increased from 5 to 64. To review, the syntax of TCPX.SBX is: XCALL TCPX,OP,STATUS,DATA,SOCKPORT{,FLAGS{,TIMER{,HOSTNAME}}} On the ACCEPT OP (1), the FLAGS argument can be a reasonable combination of following (all but the first one are new in this update): TCPXFLG'BLOCK (1) - Establish connection being accepted as blocking. TCPXFLG'LISTEN (4) - Causes TCPX to return with the listening SOCKET (in SOCKPORT) w/o waiting to accept a connection. TCPXFLG'ASYNC (8) - Accept connection on previously opened listening socket. (SOCKPORT must be the listening socket.) TCPXFLG'KEEPLISTEN (16)- Combined with TCPXFLG'ASYNC to keep the listening socket open after accepting the connection. Normally (when none of the last 3 flags are set), the ACCEPT operation will open a listening socket on the port specified by SOCKPORT, and then wait for a connection to be accepted. At that point, it closes the listening socket and returns the connection socket in SOCKPORT to the caller. If the TCPXFLAG'LISTEN flag is specified, then it returns with the listening socket in SOCKPORT, without waiting for a connection. (The application should then save this returned SOCKPORT value in a separate variable, perhaps called LISTENSOCK, as it may be needed later after SOCKPORT has been again updated.) Since opening the listening socket is fast (does not require waiting for a client to make a connection request), this eliminates the possibility of the server getting stuck for an indefinite time waiting for a client connection. It can subsequently use the CHECK OP (7) to check if a connection is ready (although it should do so frequently, since the clients do not like to wait very long.) Once a connection is ready to accept (or if it decides it doesn't mind waiting) it can use the ACCEPT OP (1) again, this time with TCPXFLG'ASYNC (and optionally, TCPXFLG'KEEPLISTEN) to accept a connection on the listening socket specified in SOCKPORT. The accepted connection socket is returned in SOCKPORT. (This would overwrite the saved listening socket number, so if you plan to accept further connections on this same listening socket, you must save the listening socket in another variable.) If the server wants to "stay open for business" while processing the current connection, it should use the TCPXFLG'KEEPLISTEN flag so that the listening socket previously opened (and hopefully saved in a separate variable, i.e. LISTENSOCK) can be left open and reused for the next connection. As long as the listening socket is left open, any connection requests will queue up, either until the queue fills, or the client gets tired of waiting and cancels the request. The length of the queue has been increased from 5 to 64, which should be more than adequate for most situations. Note that if you use TCPXFLG'LISTEN, and then don't accept a connection or accept one with the TCPXFLG'KEEPLISTEN flag set, the listening socket remains open, and must be manually closed (in addition to any connection socket) when your program ends. Use the normal OP CLOSE (6) and specify the listening socket (which you hopefully saved in a variable separate from SOCKPORT.) Opcode 6 (CLOSE), which since TCPX.SBR was introduced in 4.9 has also issued a shutdown command to the socket, now only performs the close operation. A new opcode, 5, has been added to force a shutdown. The distinction between close and shutdown is as follows: Shutdown sends a signal to the remote end indicating the that sender is shutting down its end of the socket. Since sockets are full duplex, it is possible to shutdown just the sending side, or the receiving side or both. Two new flags, TCPXFLG'SHUTRD (32) and TCPXFLG'SHUTWR (64) have been added to allow the application to take advantage of this capability. (If both, or neither, are specified, the socket is shut down in both directions.) Shutdown does not substitute for close though, and therefore should be followed (eventually) by a normal close. Close will generally have the same effect as a shutdown in both directions, except in the case where a socket is being shared by a parent and child process. The parent may have accepted the connection, then used XCALL SUBMIT to fork a child, which inherits the connection. Normally the parent would then close its connection socket. In the case, the close will not have any effect on the other end, since the child still has the socket open. (Shutdown, on the other hand, would cause the other end to get an error if tried to read or write to the socket.) When the child closes the socket, since it is the last one at its end to have it open, it will really be closed. 2. --- (Windows) New MIAMEX,138 function added to support a range of Registry operations: XCALL MIAMEX,MX'REGISTRY,OPCODE,<params depending on OPCODE> --- OPCODE 1 (Open) - This call is needed to open up a branch of the Registry and returns a handle which can be used in subsequent opcodes. XCALL MIAMEX,MX'REGISTRY,1,HKEY,SUBKEY,RIGHTS,HKEYNEW,STATUS HKEY (B,4) can be a key returned in the HKEYNEW parameter from a previous open, or more likely, one of the following symbols (from ashell.bsi) for the main hives in the Registry: HKEY'CLASSES'ROOT (2147483648) HKEY'CURRENT'USER (2147483649) HKEY'LOCAL'MACHINE (2147483650) KEY'USERS (2147483651) SUBKEY is a string combining one or more levels beneath the level referenced by the key HKEY, for example: SUBKEY = "SOFTWARE\MicroSabio\JBCT\ATE" Note that SUBKEY is not case sensitive on lookup, but when creating keys, the case specified will be retained. (Same idea as with Windows filenames.) RIGHTS is a numeric variable combining one or more of the following bits relating to the kind of rights you want to request for this key: RGKEY'QUERY'VALUE (1) Ability to query a value RGKEY'SET'VALUE (2) Ability to change or set a value RGKEY'CREATE'SUB'KEY (4) Ability to create a new sub key RGKEY'ENUM'SUB'KEYS (8) Ability to enumerate sub keys HKEYNEW (B,4) will return the handle to the opened key, and will be needed for subsequent operations. STATUS (F,6) returns 0 for success, or else an error code. You can convert the error code to a message using (MX'ERRNOMSG=86): XCALL MIAMEX,MX'ERRNOMSG,STATUS,MSG --- OPCODE 2 (Create) is used to when saving values to the Registry. It will create the specified subkey if it doesn't exist, or if the subkey already exists, it will open it. XCALL MIAMEX,MX'REGISTRY,2,HKEY,SUBKEY,RIGHTS,HKEYNEW,STATUS The parameters are nearly the same as for OPCODE 1. The main difference is that the STATUS parameter can return either of the following: STATUS=1 (Key was created) STATUS=2 (Key already existed and was opened) --- OPCODE 3 (set) is used to write a new or updated value to the Registry. XCALL MIAMEX,MX'REGISTRY,3,HKEY,NAME,TYPE,VALUE,STATUS HKEY (B,4) must be set to the HKEYNEW value returned from a previous call to Create or Open a key. NAME (string) is the name of the value to write. (These are the items that appear in the left side of the right hand pane of REGEDIT.EXE.) TYPE (numeric) specifies the type of value you want to write: REG'NONE (0) - No type REG'SZ (1) - Null terminated string REG'EXPAND'SZ (2) - Same as (1) but signals that string may contain embedded environment vars (e.g. "%TEMP%\xyx.log") REG'BINARY (3) - Raw binary data (use X format) REG'DWORD (4) - 4 byte integer (use B,4 format) REG'MULTI'SZ (7) - List of null terminated strings, with a double null terminating the list. VALUE (string, unformatted, or B,4 depending on TYPE) - The data to write to the named item. STATUS (F,6) - 0 for success, else error code. --- OPCODE 4 (read) is used to read a single value from the Registry. XCALL MIAMEX,MX'REGISTRY,4,HKEY,NAME,TYPE,VALUE,STATUS HKEY and NAME must be set as in OPCODE 3. TYPE is ignored on input, and is updated by the call to indicate the data type of the value returned (see table of data types above). VALUE (string, unformatted, or B,4 depending on the type of the data) returns the data. Note that the application is expected to either know the type of data, in which case it can supply an appropriate form of VALUE, or it can use the overlay technique and then extract the data based on the returned TYPE field. For example, you might map VALUE as: MAP1 VALUEX,X,512 MAP1 VALUE$,S,512,@VALUEX MAP2 VALUE,B,4,@VALUEX STATUS (F,6) - 0 for success, else error code. --- OPCODE 5 (enum keys) is used to list the subkeys of the opened key. XCALL MIAMEX,MX'REGISTRY,5,HKEY,SUBKEY,INDEX,STATUS HKEY must be set as in OPCODE 3. SUBKEY (string) will return the subkey name. INDEX (numeric) should be set to 0 for the first subkey, and incremented for each subsequent subkey. There is no particular order to the subkeys, so do not put any special significance on INDEX. STATUS (F,6) - 0 for success, else error code. Error 259 indicates that there are no more keys to enumerate. --- OPCODE 6 (enum values) is used to list the named values for the opened key. XCALL MIAMEX,MX'REGISTRY,6,HKEY,NAME,INDEX,TYPE,VALUE,STATUS HKEY must be set as in OPCODE 3. INDEX is as for OPCODE 5. NAME (string) will return the value name corresponding to INDEX. TYPE (numeric) will return the type of the value (see types under OPCODE 3). VALUE (type depends of TYPE) will return the value of the named item. See OPCODE 4 for notes on how to map it to support multiple types. STATUS (F,6) - 0 for success, else error code. Error 259 indicates that there are no more values to enumerate. --- OPCODE 7 (close) is used to close a handle previously opened. XCALL MIAMEX,MX'REGISTRY,7,HKEY,STATUS HKEY must be set to the handle of the key to close (as returned in HKEY2 by the open or create operations.) 3. --- (Windows) The mousewheel now behaves as expected (i.e. each increment acts like an up arrow or down arrow keypress, except when in the context of a scrollbar, in which case it acts like a click on the scroll bar itself.) 4. --- (ATE) When starting a telnet session, an environment variable ATEPROFILE is set up to indicate the name of the ATE profile being used. 5. --- (Windows/ATE) Menu and button command lines may now contain embedded environment variables (eg. C:\UTIL\MADFTP.EXE %ATEPROFILE%). ============================================================================ A-Shell Development Notes Version 4.9.907.1 (12 Nov 2004) ============================================================================ 1. Fix a longstanding (since day 1) bug in all variations of the compiler, which permitted an unmatched ELSE statement to be compiled without error. The most common form of this occurred when forgetting the & in the following: IF A=B THEN PRINT "A=B" ELSE PRINT "A<>B" Without an & at the end of the first line to continue it, it should have produced an error on the ELSE, but didn't. Instead, the ELSE clause was always executed, as if it was associated with a null IF clause that was never true. [Patch also applied to 4.8 version as build 845.3] 2. --- (UNIX) Reinstate fix for problem with INFLD returning garbage in INXCTL under ATE. (Fix in 906 was accidentally dropped from 907.) ============================================================================ A-Shell Development Notes Version 4.9.907 (11 Nov 2004) ============================================================================ 1. --- (Windows/ATE) Implement means of displaying context-sensitive help using Windows CHM/HTML help system: XCALL AUI,"HTMLHELP",OP,STATUS,HFILE{,HTOPIC{,ROW,COL}} where OP (numeric): 0) Set default application help file. (This allows help topics to be specified to INFLD without having to specify the help file each time.) 1) Display topic based on HFILE (or default), and a numeric topic ID in HTOPIC. (You'll have to consult the creator of your CHM files to get a list of the numeric topic ID numbers.) If HTOPIC is 0, the help file is launched in its default state. 2) Same as OP 1 except HTOPIC should be a string which specifies the internal HTM name for the desired topic. These internal names are typically of the form "/topicname.htm", e.g. "/comio.htm". The leading slash is typically necessary. You might be able to determine these names by using a binary DUMP utility on the CHM file (such as DUMP.LIT). As with OP 1, if HTOPIC is "", the help file is launched in its default state. 3) Display a pop-up message. The text of the message (up to 2048 chars) should be specified in HTOPIC, and HFILE should be "". If ROW and COL are specified and non-zero, then the top center of the pop-up box will be positioned at that point. Otherwise, the pop-up box will be positioned just below the current cursor location. STATUS - If you want a return status, specify an F,6 variable, in which case, >=0 indicates success, and <0 indicates failure. The most likely failures would be that the CHM system isn't supported (due to running on UNIX without ATE or perhaps an old version of Windows), or the help file/topic could not be located. If you don't care about the return status, specify this parameter as "". (This eliminates the need for the ATE client to return anything, which is a minor optimization.) HFILE (string) File filespec of CHM file. May be in AMOS or native format and may contain environment variables using the %ENV% syntax. Note that you may put your help files in the same directory as the A-Shell help files, in which case you can reference them by: HFILE = "%MIAME%\doc\filename.chm" (If the environment variable %MIAME% is not explicitly defined, it will be interpreted as pointing to the directory where the miame.ini is.) HTOPIC (must be string for OP 2 & 3, may be numeric for OP 1) - Specifies the topic name (<topic>.htm) (OP 2) or ID (OP 1) or the actual text to display (OP 3). Text may contain embedded CRLF characters for line breaks. ROW,COL (numeric, optional) - These apply only to OP 3, and only if you want to position the help window somewhere other than just below the cursor location. (For large messages, you might want to position it at something like ROW=2,COL=40.) This function works in A-Shell/Windows and ATE. It may also be called via MIAMEX,137 (replacing "HTMLHELP" with 137). 2. (Windows/ATE) INFLD will now display a context-sensitive help topic automatically when you hit the help key (?) based on the following: a. TYPE ? must NOT be set. (If it is set, then INFLD returns EXITCODE 8.) b. You must have previously defined the default application help file, using OP 0 of the AUI "HTMLHELP" class (above). c. The HLPIDX parameter must start with the string represntation of the help topic number. For example, if the topic ID is 782, then any of the following would be legal: HLPIDX = "782" HLPIDX = "782>This is a tooltip" HLPIDX = "782" + chr(126) + chr(7) + "250." The sample program XTRA3 now demonstrates this feature, using the sample help file ashdemo.chm. Hit ? in nearly any field to get context sensitive help. 3. (Windows/ATE) New TYPE ||G is same as |G except automatically turns Y/N fields into checkboxes. (For other field types, it acts just like |G). 4. (Windows/ATE) TYPE F (fast, i.e. no Enter key required to exit field) now works with checkboxes. Hitting 0 or 1, or the language-defined character for Yes or No will cause the field to exit. The spacebar, however, does not exit - in only toggles the field status. ============================================================================ A-Shell Development Notes Version 4.9.906-3 (08 Nov 2004) ============================================================================ 1. --- COMPIL.LIT 1.0(115), (plus OCMPIL, COMPLP variants) now support /X:3 switch, which is like /X:2 but creates a .SBX file instead of .RUN. Note that /X:3 does not disturb an existing .RUN, so it is now possible to compile the same source both into a .RUN and a .SBX, as follows: .COMPIL MYPROG/X:2 ; create MYPROG.RUN .COMPIL MYPROG/X:3 ; create MYPROG.SBX However, in order to make this workable, you'll need to modify the XCALL.BSI file to merely set a flag indicating if it is running in SBX mode or not, instead of aborting with an error message if run directly using RUN MYPROG. You would then test that flag to decide whether to pick up and return parameters. 2. --- Internal compiler now supports the following pragmas: ++PRAGMA SBX ++PRAGMA FORCE_EXT "SBX" The first form forces /X:3, which among other things forces the extension of the compiled module to be SBX. The second form just affects the extension without setting any compiler switches. (It, however, allows you to set set the extension to anything you like, up to 3 characters.) Note that ++PRAGMA requires at least /X:1, so in order to use the above technique to compile a batch of BAS files into a mixture of RUN and SBX output with the same compil command, the command would have to be COMPLP or COMPIL/X:1 or COMPIL/X:2. 3. --- The sample program RECOMX 1.1(105) in [7,376] has been updated to look for SBX output, and all of the SBX source files released in that directory now contain the ++PRAGMA SBX, so it is possible to erase *.RUN,*.SBX and then COMPIL RECOMX and RUN RECOMX to recompile all of the sample programs, creating RUN and SBX output as needed. 4. --- GETPRG.SBR now supports program names up to 10 characters long, and also supports an optional second argument which will return the current SBX name if called from within an SBX: XCALL GETPRG,PRGNAM${,SBXNAM$} 5. --- Various internal routines which retrieve the program name now support up to 10 character names. The exception would be any routine, like GETJTB.SBR, which has program name mapped within a structure as S,6. 6. --- SET.LIT 1.2(141) supports a SET LONGDIR option, which forces DIR to act as if the /L{ONG} switch had been set. DIR.LIT 3.0(133) now checks the SET LONGDIR option (see above), and if set, uses the /L format (allowing for up to 10 character long names). SYSTAT.LIT 3.0(150) supports a /I switch which shows IP addresses. It also fixes a problem with sorting. ============================================================================ A-Shell Development Notes Version 4.9.906-2 (04 Nov 2004) ============================================================================ 1. --- (Windows/ATE) GUI version of XCALL MESAG messagebox is now forced to be visible. Previously, if the bottom or edges of the A-Shell Window were off the screen, the message box would also be off the screen. 2. --- WRITECD/WRITETD will convert any embedded quotes (") within a field into apostrophes ('), to try to be more compatible with other CSV readers. It will also now put double quotes around any field containing quotes or apostrophes (in addition to commas and tabs, as before). Also note, although this is not a change, the procedure for breaking up a single line of CSV output into multiple WRITECD statements: WRITECD #CH, A, B, C,; WRITECD #CH, D, E, F This will output the 6 variables on one line. Note that that the comma after the C and before the semicolon is required. If you omit it, the D output will immediately follow C with no delimiter. If you omit the semicolon from the first line, then you'll get two lines of output. 3. --- (Windows/ATE) Fix a minor problem with INFLD multiline (||M) mode in which the CRLF line terminators were not being treated as a single unit, which allowed the cursor to get moved in between the CR and LF, and one to be deleted without the other, which caused little graphic characters to appear. ============================================================================ A-Shell Development Notes Version 4.9.906 (04 Nov 2004) ============================================================================ 1. --- (UNIX) Fix problem with INFLD returning garbage in INXCTL under ATE. 2. --- (Windows/ATE) New version of XTREE control (SftTree_IX86_A_50.DLL) released. No expected change in functionality, although future improvements based on this update are planned. 3. --- Fix a problem with ATE and TAB(-10,x) functions not working when the job is in silent mode. ============================================================================ A-Shell Development Notes Version 4.9.905.3 (25 Oct 2004) ============================================================================ 1. --- Fix bug in STRTOK.SBR in which it clobbered 2nd byte of RDELIM (which was a problem if RDELIM mapped as S,1) 2. --- Install package was not overwriting older LIT files, leading to a problem where wildcard commands could not find any files if the older LITs were prior to the change from octal to decimal ppns (897). ============================================================================ A-Shell Development Notes Version 4.9.905.2 (21 Oct 2004) ============================================================================ 1. --- (ATE) Configuration names containing spaces weren't working. 2. --- (ATE) AUI IMAGE class now implemented - supports image display from UNIX, automatically transferring image file if appropriate. 3. --- (ATE) Fine tune keyboard locking logic to reduce chance of typeahead interfering with ATE return status. ============================================================================ A-Shell Development Notes Version 4.9.905 (20 Oct 2004) ============================================================================ 1. --- (ATE) Misc minor bug fixes in ATE. 2. --- (Windows/ATE) INFLD TYPE @ now overrides |G 3. --- (Windows/ATE) Fix a problem with tooltips on buttons not working unless all buttons belonging to a group or window had tooltips. 4. --- (Windows/ATE) Sample program directory in release ([7,376]) expanded with several new or updated samples. RECOMX now compiles them all. 5. --- Default POLYKEY is no longer ^A. This was interfering with the use of ^A to select all rows of XTREE. ============================================================================ A-Shell Development Notes Version 4.9.904.2 (18 Oct 2004) ============================================================================ 1. --- (Windows/ATE) Fix a refresh problem when the status lines were turned off (causing display anomalies in the area where the status lines would have been). 2. --- (Windows/ATE) Allow the current dialog to be deleted without knowing its id, by specifying ID=0 and MBF'DIALOG in the type parameter. 3. --- MIAMEG,72 (get message from language file) now supports another optional parameter. This one supplies the default message if the message number is not defined. New syntax: xcall MIAMEX,72,CAT,MSGNO,ROW,COL,VAR,MSGFILE,ARG,"Default Message" The new parameter ("Default Message") both makes it obvious what the expected text of the message is, as well as eliminating the problem of what to do if the message wasn't defined. 4. --- Fix a bug in which INFLD was preloading the value of ENTRY in certain cases even when OPCODE=0. 5. --- (Windows/ATE) The mouse-click string for an XTREE control was not being sent when another XTREE control had the focus. 6. --- (Windows/ATE) The control table dump (Ctrl-Shift-Right-DblClick) now includes INFLD TYPE codes for any fields created by INFLD. 7. --- (Windows/ATE) Message boxes displayed by TAB(-10,27) (or MSGBOX.SBX) now force themselves to the top of the window stack (eliminating a problem where the program was waiting for a message to be acknowledged but the message box was obscured by another window. 8. --- (Windows/ATE) XTREE.SBR now supports a new OPCODE (5), to delete just the row(s) identified by the ANSWER parameter. It acts similarly to OPCODE 4, not loading any new records. But instead of selecting the row(s) indentified by ANSWER, it deletes them. It then waits for a new selection, unless the XTF'NOSEL flag is set, in which case it exits immediately. Note that the original data rows are not internally renumbered, so if you are trying to keep your internal array synchronized with the control, you should only mark the items deleted but not compact the array. For example, if you delete item #2, then reselect from the same array, item #3 will appear it position #2, but if you select it, it will still be identified as item #3. Opcode 5 will mainly be of use in situations where you have a large number of items, making it inefficient to delete and reload the entire control each time you want to get rid of one. This would be particularly true if you didn't really need to keep track of the items being deleted within the context of the original array. (For example, you might start with a list of possible items to choose from, and then as you choose them, they are deleted from that list and moved to another list, like in a shopping cart application. You don't really need to keep track of the state of the original list, because when the order is confirmed, you would work from the list of chosen items, rather than from the list of available items.) The sample program XTRA4.BP has been updated to illustrate. OPCODE 5 with dualing XTREEs. 9. --- (Windows/ATE) SBR related error messages now display in a dialog or other message box, eliminating a problem where there were being displayed on the text layer but not seen because the text layer was covered by controls or dialogs. (Since the SBR error messages request a keyboard acknowlegement, that had the effect of making the program appear to be hung until you hit a valid response key.) 10. --- (Windows/ATE) The multiline line feature has been modified slightly. As before, the main difference between |M and ||M is that the latter allows the use of the ENTER key to break lines within the control, whereas the former exits when ENTER hit. However, the change is that the ||M mode now displays a vertical scroll bar. Also, you can disable the horizontal scroll (i.e., enable word wrap) by adding TYPE ||H. 11. --- (Windows/ATE) Mininum field display width in GUI mode now increased by 1 for 1 and 2 character fields (needed to avoid chopping off wide capital letters.) 12. --- Virtual key syntax (VK_xxx) sequence for defining click actions now supports "extended virtual function keys" using format %VK_xF###% where ### (1 to 6 digits) is the key number. For example, %VK_xF304% will return EXITCODE -304, and is equivalent to chr9&)+chr(250)+"###.". 13. --- Add CGIUTL opcode 6: xcall CGIUTL, 6, FILE, STATUS, OUTCH, {VARSUB1, ... VARSUB26} This is identical to opcode 3 except that instead of outputting to stdout, it outputs to file channel OUTCH (which must have been opened for output). This function is quite useful for expanding template files containing variables to be replaced with data, which applies to a variety of activities not necessarily related to CGI, but was grouped here because it shares the same logic with the existing CGIUTL opcode 3. 14. --- (Windows/ATE) "Self-service" combo boxes (where SETDEF="...") will now also exit with EXITCODE=29 on down arrow (as well as clicking on the arrow button.) ============================================================================ A-Shell Development Notes Version 4.9.904 (13 Oct 2004) ============================================================================ 1. --- (Windows/ATE) INFLD TYPE |M (with A|G) now implements a primitive multiline capability. XMAX is interpreted as the display width of the editing window. DEFPT is re-interpreted as the display height. MAXCHRS determines the maximum number of characters allowed (defaults to the size of the ENTRY parameter if 0). In the standard mode, word wrap is automatic at the edge of the editing window, and the ENTER (or TAB) exits. You may also use TYPE ||M instead of |M to allow ENTER to be used to break lines manually, in which case the auto-wrap is disabled. Note that this multiline capability is limited in many ways, and should not be considered a substitute for INMEMO. One important limitation is that the maximum # of characters allowed is about 1024. Also note that |M does not disable or set any other TYPE codes, so it you need to select appropriate ones just as you would for a normal text field (probably "A]g" would be good ones to add.) 2. --- A problem with list substitution (||l and ||L) when the SETDEF items had trailing blanks has been resolved. (It is still preferred, though, that any SETDEF or combobox items be stripped of trailing blanks; at best they waste space and at worst confuse things). 3. --- XTREE was not obeying the initial selection specification in ANSWER when in file mode and the first line of the file held the column definitions. ============================================================================ A-Shell Development Notes Version 4.9.903.5 (11 Oct 2004) ============================================================================ 1. --- XPUTARG was insisting on a trailing null byte for string arguments, which led to premature truncation of the returned string if there was not room in the string variable for the trailing null. 2. --- (Windows/ATE) Static text controls may now override the theme foreground color by adding 64 to the desired color. For example, if you set the FGC parameter to 3, without themes you will get magenta text. With themes, you will get whatever the theme text color is (probably black). However, if you set it to 3+64, then you will get magenta (or whatever color #3 is set to), whether themes are active or not. It appears that this may be the only control type that can safely override the theme color. Note that we recommend using this feature sparingly - such as only when you really need to emphasize a particular text message. 3. --- Enforce the 30 parameter limit on XCALLs. Previously, there was no complaint, but bad things would happen. A new message has been added to SBRMSG.xxx ("too many parameters") to explicitly report the problem. 4. --- (Windows/ATE) TAB(-10,34);STSLIN;",";ENABLED;chr(127); may be used to disable or reenable either the top or bottom status lines. Set STSLIN to 1 for the top, or 2 for the bottom, and set ENABLED to 0 to disable and 1 to enable. Disabling a status line provides useable space within the window and may have a cleaner look, especially if the status lines are not being used. ============================================================================ A-Shell Development Notes Version 4.9.903.4 (07 Oct 2004) ============================================================================ 1. --- (Windows/ATE) XCALL MIAMEX,129 now returns a flag (64, or AGF'THEMES) indicating that XP themes are active. (Works both for local Windows and for ATE.) ASHELL.BSI [97] updated to add the AGF'THEMES definition. ============================================================================ A-Shell Development Notes Version 4.9(903)-4 (07 Oct 2004) ============================================================================ 1. Minor improvement to TRACE=LOCKS display when a lock occurs during opening of an ISAM file. Previously this displayed as CH #-1, FILE=? because the ISAM file information had not yet be set up in the file table (pending the completion of both parts of the open). Now it displays the file information as expected. 2. (Windows/ATE) Under XP, when the "Disable Visual Themes" option is checked in the shortcut properties, A-Shell will now revert to the original color logic (same as for non-XP machines). 3. A new INFLD TYPE code, "|_" (vertical bar, underline) forces the field markers to be shown as underlines, except when INFLD is being implemented as a Windows edit control. Otherwise, when INFLD is not in GUI mode, but the current TDV is graphics-enabled (e.g. PCTDVG), then it marks the field by sinking it, rather than by using underlines. 4. (Windows/ATE) Another new INFLD TYPE code, "||H", disables horizontal scrolling in edit and comboboxes (and multi-line edit controls). 5. (Windows/ATE) A new option in the Misc. Settings dialog forces edit box height to match the combo box height. This resolves a discrepancy in that edit boxes scale with the window, but combo box height is set by Windows. This option overrides the "Allow edit boxes to use leading" option. 5. (Windows/ATE) When MIAMEX,MX'BTNIDL is used to allow the focus to be moved around a group of buttons, the button with the focus is now emphasized in a theme-relevant manner. ============================================================================ A-Shell Development Notes Version 4.9(903)-2 (06 Oct 2004) ============================================================================ 1. Fix a bug in which the initial conversion of your current directory to the corresponding AMOS directory, if any, did not work for P,PN values greater than 255. 2. (Windows/ATE/XTREE) When appending to an XTREE list, the default selected item (if not specifed by the ANSWER parameter) is now the first one added. Also, the first selected item now gets the focus as well, so that when you arrow up or down, it moves the selected item as expected. (Previously, the focus could have been on another item, which caused the selection bar to jump inexplicably upon hitting the first up or down arrow.) The column width optimization logic has been changed to only look at the visible rows. This may shave off several jiffies in the time it takes to load a large number of rows. ============================================================================ A-Shell Development Notes Version 4.9(903)-1 (05 Oct 2004) ============================================================================ 1. (Windows/ATE) Implement workaround for problem of focus rectangle not always displaying on buttons (inside of MIAMEX,MX'BTNIDLE) when TABs and/or themes active. (It now displays a manually drawn focus rectangle.) It doesn't quite match the theme but it is better than nothing. 2. (Windows/ATE) Fix various problems with date and time picker controls. 3. New INFLD TYPE code "||t" is the same as "t" (time) but returns time in 12-hour format instead of 24-hour format. Also, you can now set XMAX to 8 (with TYPE t) or 5 (with TYPE ||t) to get the time string returned in HH:MM or HH:MM A/PM format (without seconds). 4. MIAMEX, MX'BTNIDLE now skips over disabled and hidden buttons. ============================================================================ A-Shell Development Notes Version 4.9(903) (04 Oct 2004) ============================================================================ 1. (Windows/ATE) XCALL MIAMEX,MX'BTNIDLE (135) enhanced to return ID of last button which had the focus, and also to provide the option of exiting automatically when moving the focus beyond the range of the button group. The updated specifications are now: xcall MIAMEX,MX'BTNIDLE,PARENTID,CTLID,EXITCODE{,OP} The routine positions the focus on the button specified by CTLID, or the first button in the dialog or group or window specified by PARENTID. The user can use the normal navigation keys (left and right arrows, TAB) to move the focus from one button to the next in the group. This continues until the user triggers an event that returns an EXITCODE. See EXITCODE below for details about exit codes. PARENTID should be set to the control ID of the parent (dialog or groupbox) which owns the buttons you want to wait for. Set to zero if the buttons are part of the main window. Note that the "normal" way to use this routine is with a group of buttons joined by a groupbox control. (The groupbox itself can be made invisible so that it does not require any extra screen space.) CTLID should be set to the control ID of the button you want to initially receive the focus. If set to 0, the first button within the group identified by the PARENTID will be given the focus. On exit, it will be set to the ID of the last button to have the focus. EXITCODE (F,6) will return an INFLD-standard exitcode indicating how the routine was exited. Typically this would be the exitcode resulting from a mouse-click of a clicked object (whether one of the buttons in the group or some other clickable object.) Standard EXITCODE values set by the routine itself are: 99) Internal error (button not found, etc.) 3) User tried to move backwards (up or left) out of the group (requires OP 4) 5) User tried to move forwards (down or right) out of the group. (requires OP 4) OP may optionally contain the sum of zero or more of the following flags: 1 = Set the focus on the button FOLLOWING the specified CTLID 2 = Set the focus and return (don't wait for an exit code event). 4 = Exit with EXITCODE 3 or 5 if user tries to move out focus out of the group of buttons. 2. (Windows/ATE) New INFLD TYPE code |J right justifies the text in a checkbox within the area allotted to the text. By combining |J with TYPE R, you can achieve all 4 alignment possibilities: TYPE "||c" [Label ] [X] TYPE "||c|J" [ Label] [X] TYPE "||cR" [X] [Label ] TYPE "||cR|J" [X] [ Label] Note that |J is the same as setting SBR=INFLDCBRJ but has the advantage of being easy to change from one field to the next. 3. (Windows/ATE) A new option has been added to the Misc. Settings dialog to control whether edit boxes will have their height extended downwards into the leading area. Previously this was the default unless themes were active, but now you can control it explicitly. To get the best Windows-like effect, you should probably turn the option off and set the Font Scaling option in the same dialog to 0 (to get the standard Windows GUI font.) Then, just increase the size of the window until the relationship between the edit font and the edit boxes is pleasing. If you prefer to use a scaled font, then you may need to turn on the edit-leading option to avoid having the bottoms of characters in edit boxes clipped off. 4. (Windows/ATE) A bug in which a button whose upper left corner coincided with the upper left corner of the group to which the button belonged caused the groupbox to be deleted has been fixed. ============================================================================ A-Shell Development Notes Version 4.9(902)-3 (02 Oct 2004) ============================================================================ 1. Implement new streamlined statements for retrieving and returning parameters within an SBX routine. Previously this was done exclusively with the XCALL MIAMEX,MX'XCBDATA... routine. Now, you may optionally use any of the following: XGETARGS ARG1{,ARG2,...{ARGN}} XGETARG ARGNO,ARG XPUTARG ARGNO,ARG XGETARGS retrieves the XCALL arguments into the corresponding variables. (The first argument is returned in ARG1, the second in ARG2, etc.) If more args were passed than you specify variables for, the extra arguments are ignored. Conversely, if you specify more ARG variables in the XGETARGS statement then were passed by the caller, the excess ARG variables are ignored. In either case, the operation is non-destructive to the original argument list, so you can later go back and retrieve (or re-retrieve) parameters using XGETARGS, XGETARG, or the original MIAMEX,MX'XCBDATA statements. XGETARG ARGNO,ARG performs the same function as XGETARGS except that it retrieves only the one argument (whose number is specified in ARGNO). XPUTARG ARGNO,ARG is the reverse of XGETARG. It returns the value of the argument ARG into the caller's argument number ARGNO. Note that in the case XPUTARG, ARG can be a variable or an expression, whereas in the case of XGETARGS or XGETARG, they must be variables. (You can't retrieve an argument into an expression, but you can use an expression to return an argument.) Type conversions will be made as appropriate if the variable types (P1, P2, etc.) do not match the types passed to the xcall (but it behooves you to use "appropriate" data types for the circumstances). The following examples may clarify the equivalencies between the new statements and the old MIAMEX calls: XGETARGS P1,P2,P3,P4 is equivalent to: xcall MIAMEX,MX'XCBDATA,XCBADR,XCBGET,1,P1 xcall MIAMEX,MX'XCBDATA,XCBADR,XCBGET,2,P2 xcall MIAMEX,MX'XCBDATA,XCBADR,XCBGET,3,P3 xcall MIAMEX,MX'XCBDATA,XCBADR,XCBGET,4,P4 and is also equivalent to: XGETARG 1,P1 XGETARG 2,P2 XGETARG 3,P3 XGETARG 4,P4 For returning arguments, xcall MIAMEX,MX'XCBDATA,XCBADR,XCBPUT,1,A+B/C is equivalent to: XPUTARG 1,A+B/C The main advantage of the new statements is just efficiency, both for the programmer and for the computer. (This is especially true if you use XGETARGS to retrieve all arguments in one statement.) Note that these new statements do not require XCBADR or any of the other variables set up by XCALL.BSI. However, you may still want to continue including XCALL.BSI at the start of your SBX modules since it does set the variable XCBCNT to the number of parameters passed, and the XCBSTRUCT() array to the types and sizes, and this information can be useful in determining how to interpret the passed parameters. (XGETARGS and XGETARG do not give you any obvious indication when fewer parameters were passed to the subroutine than the subroutine is expecting, so a well-written subroutine should, at a minimum, check XCBCNT to see how many parameters were passed.) You do need to compile with the /X:2 (A-Shell extensions) switch (but this is true for all SBX modules anyway). 2. When an SBX routine is called and the amount of free memory in the calling partition is more than the SBX minimum (as set in the 2nd argument of the MEMORY= statement in miame.ini, or 360K default), it now takes over all of the free memory in the parent job. Previously it used only the minimum amount. The advantage of the new approach is that if the parent partition is large relative to the amount needed for SBX routines, multiple levels of SBX routines can be called without having to do separate memory allocations. Previously, if PROG.RUN did an XCALL SUB1.SBX, and it in turn called SUB2.SBX, the SUB2.SBX would always allocate a new work area, regardless of how big the partition of the parent was. (This is mainly a performance issue since there is some overhead with allocating memory. An application which does a lot of nested SBX calls might want to make the main partition large enough to accomodate several levels of subroutines.) Note that when SBX calls are nested, the amount of memory used up in each level is only the amount actually needed, not the full minimum as specified by the MEMORY= statement. So, for example, if your MIAME.INI has MEMORY=1000K,500K and you call a series of small nested subroutines, you may be able to stack them many levels deep (as opposed to just 2 levels as implied by the ratio of 1000K to 500K). A new sample SBX/XFUNC function is included to demonstrate this. The SBX is called FACT and it returns the factorial of the argument passed. See the test calling program FACTST.BAS. The algorithm is highly recursive [FACTORIAL(N) = N * FACTORIAL(N-1)], and displays the amount of free memory at each level, allowing your to see that only a few K are used up with each successive level of nesting. Note that it is only practical to run it for numbers up to, say, 32 (i.e. 32 levels deep), since not only do you hit the maximum positive F,6 value about then, but will soon thereafter run out of stack memory. *** SBX PERFORMANCE NOTES *** As a rough comparison of the performance benefits of these two SBX enhancements (XGETARGS and the improved memory allocation), I ran 500 iterations of FACT(30) (i.e, 15000 subroutine calls, nested from 1 to 30 levels deep). On a 1.7MHz laptop, with the previous method, the elapsed time as about 12 seconds vs. about 2 seconds for the new method, i.e. a six-fold improvement, with the new method doing about 2500 SBX calls per second. At 2500/sec, the overhead of SBX calls is negligible enough to not affect many kinds of operations. (But performing the same logic within a single program using global memory variables is still an order of magnitude faster, so you might not want to use nested SBX functions within a CPU-intensive calculation.) On another test, I wrote a simple SBX which received a channel # and a string and output the string to the specified print file. I then compared the performance of outputting to the sequential file via the XCALL and directly, i.e.: XCALL XPRNT,CHANNEL,PLINE vs. PRINT #CHANNEL,PLINE This ran about 7K lines per second with the XCALL to XPRNT.SBX, and about 140K lines per second directly. Again, the message is that using an external XCALL is an order of magnitude slower than doing the same thing directly, but, depending on the situation, that may not be significant. (In an application that generates a 1-5 page printout based on user input, it won't make any difference; in an application that generates a 10,000 page report, the difference will be measured in seconds.) Obviously, the effect of the overhead is progressively reduced as the amount of work done in each iteration of the subroutine is increased. For example, if instead out merely outputting a line of text to a file, our above XPRNT.SBX routine created an entire page, then the total overhead of the SBX call for even a 7000 page report would be only 1 second. Or, a more realistic example would be using a subroutine to format and display a field of data. Since you can hardly squeeze more than 100 or so fields of data on a single screen, the total SBX overhead for displaying the 100 fields on the screen would be a few milliseconds, which is not going to matter in that context. Considering that performance is no longer a consideration in most interactive business applications, the modularization and reusability benefits of external subroutines combined with their reasonably low overhead, argue for their greater use in A-Shell/Basic software development. ============================================================================ A-Shell Development Notes Version 4.9(902)-2 (29 Sep 2004) ============================================================================ 1. (Windows/ATE) Fix a problem with the behavior of date picker controls when not the active field by converting them to combo box style. Now, you can reactivate the field (and turn it back into a date picker) by clicking on it (either on the edit window or the dropdown button.) 2. (Windows) Implement a new MIAMEX function (135 or MB'BTNIDLE) to simplify waiting for user to select among a group of buttons using keyboard commands, or click on something which generates an exitcode: [See Edit 903 above for updated documentation] ============================================================================ A-Shell Development Notes Version 4.9(902) (27 Sep 2004) ============================================================================ 1. (Windows/ATE) Increase the maximize number of GUI objects defined at one time from 400 to 600. 2. (Windows/ATE) Allow symbol fonts to be used in GUI objects. Normally, when requesting a font, A-Shell asks for the ANSI character set. But this interferes with the ability to select a symbol font, such as Wingdings. To overcome this, you can now add the value 131072 (CHARSET'SYMBOL) to the FONTATTR parameter in MIAMEX,119 or TAB(-10,20) to specify that you want a symbol set font. Note that this probably only makes sense with fonts like "Wingdings", or "Symbol". The font mapper may return an unexpected font if you try this with a font that doesn't contain a symbol set character encoding. Symbol characters can be useful as a simple way of creating a button containing a graphic symbol. For example, the following statement would create a button with a large (120% size) checkmark in it that acts like the Enter key (%VK_ENTER%): xcall MIAMEX,119,1,BID,chr(252),0,MBF'KBD,"%VK_ENTER%","", & STATUS,SROW,SCOL,SROW,SROW+1,-1,-1,CHARSET'SYMBOL,120,"Wingdings" A new sample program, SYMBOL.BP, displays all of the characters for a specified font. To find out what symbol fonts you have, you can look in the control panel Fonts applet for likely looking names. Or, if you have a word processing program like Word, you can look in in "Insert Symbol" dialog, which typically allows you to select among the available symbol fonts and see what characters are available. (To get the numeric byte values, run the SYMBOL program, specifying the symbol font.) Note that for maximum portability, you should probably stick with just the Wingdings and Symbol fonts, which are almost always installed. 3. (Windows/ATE) INFLD TYPE |E (to use an edit-style control for the display or redisplay of data when not actively being edited) now arranges to have the cursor change to an arrow when mousing over it. (Edit controls, unlike static controls, do not normally ever use an arrow cursor, so this left users uncertain if the field was clickable.) 4. (Windows/ATE) Various improvements in the handling of TAB controls when XP Themes are active. 5. (Windows) Remove a dependency on a function that was not present in W95 (and therefore preventing A-Shell from running at all under W95). 6. (W2003) Fix a problem which was causing A-Shell to hang on startup under W2003. 7. Add bits to the second set of global options to disable spooling and INFLD screen capture (^P). These are mapped in ashell.bsi [95] as: map1 GOP2'NOSPOOL,b,2,16384 map1 GOP2'NOCAPTURE,b,2,32786 They can be queried via: XCALL MIAMEX,59,OPTIONS,OPTIONS2 And set via: XCALL MIAMEX,60,OPTIONS,OPTIONS2 These options might be useful in a security context to prevent the operator from using general tools, such as the ability to print from with EZVUE, or to print the screen using ^P. For example, to set the NOSPOOL flag: XCALL MIAMEX,59,OPTIONS,OPTIONS2 ! retrieve option flags OPTIONS2 = OPTIONS2 OR GOP2'NOSPOOL ! set NOSPOOL flag XCALL MIAMEX,60,OPTIONS,OPTIONS2 ! set new option flags The sample program MIAMEX.BAS has been updated (edit [33]) to illustrate these flags. 8. Add message "003,045,Insufficient privileges to print" to ERRMSG.xxx. This message displays if an spool request is made when the NOSPOOL flag is set. 9. (Windows/ATE) A new opcode (11) for the MIAMEX,119 or TAB(-10,20) functions allows you to activate a specific tab item (or pane) in a TAB control. To use, just specify the control ID of the TAB control in the ID parameter, and put the desired tab # (starting with 1) in the STATE parameter. For example: TABNO = 2 ! tab or pane # to activate TABID = <ID of the tab control> xcall MIAMEX,119,11,TABID,"",TABNO,MBF'TAB,"","",STATUS,0,0,0,0 10.TAB Controls may now be placed within dialogs. See the new sample program TABDLG. 11.The compiler now indicates which variable was unmapped when reporting unmapped variable errors. (This is often useful when looking at lengthy statements.) It also strips off the leading blanks when reporting the source lines (making the error messages slightly easier to read when they are highly indented.) 12.New compiler switch /MX acts like /M (treat unmapped variables as errors) except that it reports every line in which an unmapped variable appears, even if that variable has already been reported. Note that, as with other errors, typically only the first error on a line is reported. (Otherwise you might get dozens of errors on each line due to the cascading effect.) 13.New compiler switch /B (for background mode) sends all error messages to <sourcefile>.lst instead of the screen. Format of each message: <filename>,<line#>,<error message>,<source line> (You'll need the 1.0(114) version of COMPIL.LIT/OCMPIL.LIT/COMPLP.LIT for the new compiler switches.) 14.(Windows/ATE) It is no longer necessary to pass a minimum of 13 parameters to MIAMEX,119. For example, when deleting a control by its ID number, there is no need for the coordinates, type, state, etc. (This is mainly just a coding convenience when hard-coding arguments, since it led to arg lists like 0,0,"","",0,0,""... Also, if you omit the STATUS parameter (#9), or pass it as a string, then the routine does not return the status or control ID. This "feature" is only useful for optimizing the telnet traffic between UNIX servers (particularly AIX) and ATE. (If ATE doesn't need to return anything, the sender can send out commands as fast as the wire will allow; otherwise it needs to wait for a response after each command.) ============================================================================ A-Shell Development Notes Version 4.9(901)-1 (20 Sep 2004) ============================================================================ 1. (Windows/ATE) INFLD now supports the groupbox concept better. That is, you can place an INFLD field within a groupbox, or within a TAB control, by setting INFLD's V parameter to the control ID of the parent groupbox or TAB control (plus 1). (You need to add 1 because the normal value for V is 1.) For example, the following three statements create a groupbox and a static text control and an INFLD control within it. Note that when a control is specified as belonging to a parent groupbox or TAB control, the coordinates you specify for child control are offset by the upper left corner of the parent control. ! create a groupbox...(returns GRPID, which must be used to ! associate subsequent controls with this groupbox) xcall MIAMEX,MX'WINCTL,1,GRPID,"",0,MBF'GROUPBOX+MBF'LFJUST,"","", & STATUS,GRPSROW,GRPSCOL,GRPEROW,GRPECOL,-1,-1 ! Create a text label starting in row 2, column 3 of the groupbox ? tab(-10,20);"1,0,Input something:,0,";MBF'STATIC+MBF'LFJUST; & ",,,2,3,2,20,-1,-1,0,0,,,";GRPID;chr(127); ! Create an INFLD control next to the text label xcall INFLD,2,21,10,0,"A|G",FIELD$,INXCTL,GRPID+1,1,EXITCODE, & TIMER,0,-1,-1,-1,"",INFCLR 2. Further adjustment to maximized window font calculation to try to avoid "overscan". ============================================================================ A-Shell Development Notes Version 4.9(901) (19 Sep 2004) ============================================================================ 1. (Windows/ATE) "XP-Style" controls are now supported (under XP) if the ashw32.exe.manifest file is stored in the same directory as the ashw32 executable. Note, however, that when XP Styles are enabled, certain color capabilities are lost. In particular, it is no longer possible to specify the foreground text color of the text portion of a combobox, nor do non-Windows-standard edit control colors work. 2. (Windows/ATE) The system icon has been removed from dialog boxes created with the MBF'DIALOG and MBF'SYSMENU flags. 3. (Windows) When a child window is launched (via XCALL AMOS, or the AMOS statement) it now uses the same icon as the parent A-Shell window. (This only applies if you launch A-Shell with the -g <icon> switch, specifying the name of an icon that you have previously sent us to stored with A-Shell.) 4. (Windows/ATE) A fudge factor has been added to the font size calculation logic when maximizing the window to request a minimum left and right margin of 1/2 the average character width. This should eliminate the problem which previously occurred in certain isoloate video configurations where the first and last columns would be partially cut off after maximizing the window. 5. (Windows/ATE) Maximizing a window containing an XTREE control no longer re-scales the fonts within the XTREE control. This results in more columns being visible, rather than larger text (which generally seems closer to what people expect in that situation). 6. (Windows/ATE) When INFLD displays a message box (typically to report an editing format error), the title of the message box is now taken from the 000,001 entry of the SYS:APPMSG.xxx file (where xxx is your language definition, e.g. "USA", "CDN", etc.) If the file or entry is not defined, then it continues to use "INFLD". 7. (ATE) Fix various problems with combo boxes and date picker controls. 8. (Windows/ATE) Implement a tab control (via MIAMEX,119 or TAB(-10,20)), using the new control TYPE definition MBF'TAB (1073741824). A tab control may be conceptualized as a combination of a groupbox (MBF'GROUPBOX) and a row of buttons (aka "tabs") along the top. Clicking on a tab sends a notification string (via the keyboard channel) to the application allowing it to replace the current contents of the groupbox with new contents, based on which tab was clicked. The coordinates specified are for the outer rectangle, which includes the space occupied by the tabs. The "client area" of the tab control (the usable area bounded by the tabs at the top and the left, right and bottom edges) acts like a groupbox. Controls placed in this area must specify the ID of the tab control in the parent ID parameter, and their coordinates are treated as offsets from the upper left corner of this client area. If the number and style of tabs is such that there are multiple rows of tabs, the client area is further reduced by the space taken up the the extra row(s) of tabs, so you should allow extra space if this is a possibility. As with a groupbox, deleting the tab control deletes all of the controls within it. Variations of the basic tab control can be specified by adding one or more of the following to the dwStyle parameter: TCS'BUTTONS (256) - tabs appear as buttons and no border is drawn around the display area. TCS'MULTILINE (512) - if the tabs do not fit on one row, multiple rows are used. Otherwise, a scroll button is placed at the edge of the one row of tabs to allow it to be scrolled horizontally. TCS'FIXEDWIDTH (1024) - all tabs are made the same width; otherwise the width of each tab is based on the text in that tab. TCS'FORCELABELLEFT (32) - tab labels are left justtified within each tab. This only makes sense with the TCS'FIXEDWIDTH style. Otherwise they are centered. The tabs are defined by specifying TXT in the following format: TEXT=Label1~Cmd1~~Label2~Cmd2~~...LabelN~CmdN In the above specification, Label1 thru LabelN represent the text strings displayed in each tab, and Cmd1 thru CmdN represent the keyboard command strings each tab sends. As an example: TEXT="Receivables~R^M~~Payables~P^M~~General Ledger~G^M" This would define a set of 3 tabs, "Receivables", "Payables" and "General Ledger". Clicking on the "Receivables" tab would send the character "R" followed by Control-M (or ENTER), etc. A program using this arrangement would have to check for these keyboard commands, and on receipt, display the appropriate options within the display area of the tab control, according to which tab clicked. See the sample program TAB1.BP. Note that this is a rather preliminary implementation of the TAB control feature, and is likely to be updated frequently over the next few weeks. Issues and features needing to be looked into: A. Tab controls inside of dialogs. B. Auto-adjustment of the user coordinates of the tab display area based on the number of tab rows. C. Tooltips? D. Icons? E. Save/restore F. Ability to select the initial tab 9. XCALL MIAMEX,119 now supports the CLASS, STYLE, and STYLEX parameters allowing native Windows STYLE and STYLEX flags to be specified with the supported control types. The CLASS parameter should probably be left blank since new control classes typically require internal modifications to A-Shell. There is no guarantee that specifying new STYLE and STYLEX options with existing control types (buttons, static text, etc.) will work as desired, but as long as the style feature is purely visual, it should be relatively harmless to experiment. (You'll need a reference to the Windows dwStyle (STYLE) and dwStyleEx (STYLEX) parameters used with the WIN32 API function CreateWindowEx() though.) The complete syntax for MIAMEX,119 is now: xcall MIAMEX,MX'WINBTN,OP,BTNID,TXT,STATE,TYPE,CMD,FUNC,STATUS, SROW,SCOL,EROW,ECOL{,FGC{,BGC{,STYLE{,SCALE{,FACE{,TIP, {,PARENTID{,CLASS,STYLE{,STYLEX}}}}}}}}} ============================================================================ A-Shell Development Notes Version 4.9(900)-2 (18 Sep 2004) ============================================================================ 1. Fix a bug introduced at the start of 4.9 whereby specifying the .IDA extension in an ISAM open statement was generating a file specification error. ============================================================================ A-Shell Development Notes Version 4.9(900) (13 Sep 2004) ============================================================================ 1. MSBOXX.SBR bug fix: BOX'VLI (vertical line) and BOX'HLI (horizontal line) were drawing two lines. 2. (Windows/ATE) XTREE.SBR enhancements / fixes: A. First item in list is now highlighted (in editing mode) if there were no other selected items. Previously, it just showed a thin dotted line around the item. B. The maximum number of XTREE instances has been increased from 3 to 10. C. New FLAG XTF'DEL added (and XTREE.MAP updated) to enable the DEL key to return exitcode -47. See updated XTREE6.ZIP for new XTREE.MAP; also XTRA3 enhanced in various ways. D. Navigation keys that have meaning within XTREE (up arrow, HOME, END) now require SHIFT to exit from the control. Otherwise the action is confined to the control. This is consistent with INFLD (with respect to combo boxes, date pickers) and with Windows in general. E. Various bug fixes, including for a GPF on closing A-Shell if any XTREE instances weren't properly closed. 3. (Windows/ATE) INFLD enhancements / fixes: A. Invisible fields (TYPE i) now work in GUI mode, making this a better way to wait for input within dialogs or other GUI screens. Previously it worked in text mode, which caused potential conflicts with the cursor and with the focus. B. ||R is now ignored. Use ||C or |E to retain the same look when the field is dormant as when it is actively being edited. C. Fix a problem with certain editing keys (arrows, etc.) acting like ENTER in command line processing. 4. New MIAME.INI parameter, OPTIONS=SBX_RUNDIR alters the search path for SBX modules. Normally, the search is: current [p,pn], [p,0], BAS: When OPTIONS=SBX_RUNDIR set, search is: current [p,pn], .RUN location, BAS:. ============================================================================ A-Shell Development Notes Version 4.9(899)-5 (09 Sep 2004) ============================================================================ 1. (Windows/ATE) Fix a GPF problem related to certain kinds of INFLD forms (TYPE f). 2. New INFLD TYPE codes: ||L - List substitution. SETDEF consists of <code>,<descr> pairs, e.g.: ,01,North,02,South,03,Middle Earth,, Application uses the code items (01, 02, ...) while the operator sees and uses the description items. ||l - Same as ||L except that ENTRY will return a complete <code>,<description> pair (e.g. "01,North") instead of just the code item. ||S - Variation of combo box in which typing a character only selects the nearest matching item from the list. (Otherwise the user can type independently of the list, and use down-arrow to find the nearest match.) ||s - Makes SETDEF list matching optional. Only applies to the combo box, in which case it allows the operator to enter a value that is not in the list. 4. (WINDOWS/ATE) INFLD "self service combo box" - if SETDEF = "..." then when the user clicks on the down arrow to activate the drop down list, the field exits, returning EXITCODE 29. 5. ATE: ZTERM label window sequence (chr(27);chr(13);"title";chr(0)) now sets both the normal and minimized window titles. ============================================================================ A-Shell Development Notes Version 4.9(899)-4 (07 Sep 2004) ============================================================================ 1. (Windows/ATE) Reverse INFLD TYPEs |R and ||R. |R now causes the field to be destroyed on exit (clearing the way for the app to redisplay it using non-GUI technology), which is closer to the way |R worked before the 899-3 change. ||R leaves the field as-is on exit (i.e. without redisplaying it using a static or other control type). This was thought to be a useful technique for allowing certain advanced INFLD types (combo boxes, date pickers) to maintain their visual form even when inactive, but it is probably now superceded by the expanded implementation of ||C (see next). 2. (Windows/ATE) INFLD TYPE ||C now also applies to date pickers and time pickers, in the same way as to combo boxes (see 899-2 below). In other words, without ||C, a GUI date field (TYPE D|G) will appear in the form of a date picker control (with a dropdown button which opens up a calendar) while editing, and then revert to an ordinary static text control on exit from editing mode (or when displayed with OPCODE 2). WITH ||C, it appears as a date picker control at all times. Note that it makes little sense to use ||C unless you are also implementing mouse-click sequences such that when the user clicks on one of these controls, your app can sense the click, interrupt the current field and jump to edit the click-on field. 3. (Windows/ATE) Fix a problem with INFLD TYPE |E (see 899-3) disabling the click action on the inactive control. 4. (Windows/ATE) TAB(-10,20) now supports 5 additional optional params: ?TAB(-10,20);OP;",";BTNID;",";TXT;",";STATE;",";TYPE;","; & CMD;",";FUNC;",";SROW;",";SCOL;",";EROW;",";ECOL;","; & FGC;",";BGC;",";FATTR;",";SCALE;",";FACE;",";TIP;","; & PARENTID;",";RTNFLAG;",";CLASS;",";STYLE;",";STYLEX;chr(127); PARENTID may be used to make the current control a child of the specified control. This and RTNFLAG are primarily for internal use and should be set to 0 by an application. CLASS, STYLE, and STYLEX provide a way to specify control types and style options that are not covered by the TYPE parameter. These are also mainly used internally but might be interest to programmers familiar with the Windows CreateWindowEx() API function. 4. XCALL MIAMEX,118 (get/set stream position) now supports an optional argument to specify an index: XCALL MIAMEX,118,CH,OP,POS{,FILIDX} If specified, and OP=1 (set stream position), then POS is interpreted as the desired line number within the file (starting at 1) rather than the byte offset within the file. If FILIDX does not reference a valid index, the operation will fail, returning -1 in POS. See the next item (XTREE) for information on creating the index. 5. XCALL XTREE now supports an additional optional argument in conjunction with multi-select file mode to create an index into the file, of the type that can be used with the new MIAMEX,118 operation (see above).. The argument (FILIDX) must be mapped as B,4 and added after the XTRCTL parameter: xcall XTREE, SROW, SCOL, ANSWER, ARRAY, ADDCNT, COLDEF, & EXITCODE, EROW, ECOL, FLAGS, FILE, MMOCLR, XTRCTL, & FILIDX The index into the file is created while the file is being loaded, so there is no significant overhead other than the memory allocated. The FILIDX parameter is returned as a handle to the actual index, which is kept in dynamically allocated memory. It can be passed to the enhanced MIAMEX,118 function (see above) to position the file pointer of an open sequential file to the start of a specified row within the file. This is primarily useful with the multi-select file mode, because in that case, the selection information is returned as an array of one byte strings, each indicating whether the corresponding row was selected. In the array case, you can easily access the array data directly, but in the file case, in order to access a selected row, you would have to read through the file from the beginning, counting the rows, which is not very effcient or convenient. See the updated XTRFIL.BP sample program for an example of using this technique. Note that you should only use one FILIDX variable within a program, and you should not modify its value. If you follow this guideline, A-Shell will automatically free up the memory used by the index for each new XTREE call and when the program ends. 6. (Windows/ATE) XTREE.SBR now supports more than one XTREE instance open at the same time. You specify which instance you are referencing by setting the XTR'CTLNO field in the XTRCTL parameter (to 0, 1, or 2). Note that in order to have more than one XTREE visible, you will have to use the XTF'MODELESS option so that the control is not deleted when you exit from it. A new sample program, XTRA4.BP (see the latest XTREE5.ZIP package on the beta page) provides a rudimentary demonstration of using two XTREE controls at the same time. 7. (Windows/ATE) INFLD's "Invalid Input" message (011,010 in sbrmsg.xxx) now supports a trailing "%s" which will be replaced by the SETDEF pattern if in GUI mode but not already using a combo box. This can be handy when you use SETDEF as a means of enforcing a pattern, since it permits the user to see what the pattern is (rather than just being told "Invalid Input"). The standard sbrmsg.xxx files have not been updated, but if you are interested in this feature, just add "%s" to the end of yours, i.e. "011,010,Invalid Input %s". 8. (Windows/ATE) INFLD's time picker control (TYPE t|G) now uses a fixed editing and display width wide enough to accomodate HH:MM:SS PM. Note, however, that the returned time will be in HH:MM:SS (military format). This is not strictly compatible with text mode, where the XMAX parameter can limit the entry to, say, HH:MM format. ============================================================================ A-Shell Development Notes Version 4.9(899)-3 (01 Sep 2004) ============================================================================ 1. (Windows/ATE) Fix a conflict between XTREE and dialog boxes in which the dialog box would not retain the focus (causing selected items to appear gray instead of blue, and keyboard characters to not work as expected.) 2. (Windows/ATE) New INFLD TYPE ||R is similar to |R (prevent redisplay) but instead causes the edit control to be destroyed on exit from edit mode. This actually makes more sense than |R if you plan to redisplay the field yourself, especially if you plan to redisplay it using normal text. 3. (Windows/ATE) New INFLD TYPE |E causes the display form of the field (either on exit from edit mode or when using OPCODE 2) to be based on an edit control rather than a static text control. The difference is subtle but edit controls have a slightly deeper border. Also, as an edit control it is subject to the "Force standard colors in edit boxes" option on the Misc Settings dialog. 4. (Windows/ATE) Fix a problem with closing a dialog via the "X" if the dialog contained an XTREE control. Clicking the dialog "X" no longer directly closes the dialog; it only transmits an ESC into the keyboard buffer, leaving it to the application to close the dialog using MIAMEX,119 opcode 3. ============================================================================ A-Shell Development Notes Version 4.9(899)-2 (31 Aug 2004) ============================================================================ 1. (Windows/ATE) New INFLD TYPE ||C forces the creation of a combo box when a field is being displayed (either after editing or with OPCODE 2). This is useful combo boxes (automatically created by SETDEF) when you want to them to retain the combo box appearance even when the field is not active. Note that it is important that you set up a mouse click sequence (in HLPIDX) when you use this technique, so that when the user clicks on the combo box, your application is able to respond. 2. COMPIL and OCMPIL (not COMPLP) now compile TPRINT and DPRINT statements as if they were ordinary PRINT statements if /X not specified and provided that OPTIONS=STRICT is not set. This "feature" is hoped to be useful to developers whose programs may have sections intended to run only under A-Shell and other sections intended to run under AMOS, and who want to take advantage of TPRINT and DPRINT. Otherwise, even though the TPRINT and DPRINT statements might never get executed, they would fail to compile under AMOS. Now, you can compile such a program under A-Shell and move the .RUN to AMOS for execution. Note that since TPRINT, DPRINT, and PRINT are rather similar, it might even be that you can use the same source code under A-Shell and AMOS without having to use a condition (IF AMOS THEN ... ELSE ...). 3. Dialog boxes can now support a "system menu" (aka the "X" button to close the dialog). To enable the dialog system menu, add MBF'SYSMENU to MBF'DIALOG when creating the dialog box. (MBF'SYSMENU is defined as 256 in edit 92 of ashell.bsi; this is also the same as MBF'BITMAP, which is being recycled because it doesn't apply to dialogs.) If the system menu is enabled and the operator uses it to close the dialog, an ESCAPE character (ASCII 27) will be placed into the keyboard buffer. If you enable the system menu, you must check for the ESCAPE, for two reasons. First, if the user closes the dialog and you don't check for the ESCAPE, then your program won't realize that the dialog has been closed, which will probably cause your program to hang. Second, even if the user closes the dialog via the system menu, your program must still call the MIAMEX,119 function with opcode 3 to properly close the dialog and free up all of the internal resources associated with it. 4. The ISAMPLUS UPDATE'RECORD statement now generates a Basic error #231 instead of merely returning status -3 when there is an error in updating one of the index files. This could potentially interrupt programs which were already checking for this condition, but given that a similar error in the GET statement generates the same error, and that it is highly unlikely that there is any appropriate response to such a condition other than rebuilding/verifying the index(es), it seems appropriate to generate a Basic error here (that can't be ignored). ============================================================================ A-Shell Development Notes Version 4.9(899)-1 (30 Aug 2004) ============================================================================ 1. XTREE.SBR, when in multi-select mode, now supports ^A to select all and ^B to clear all. (This makes it possible to create "Select All" and "Clear All" buttons that are separate from XTREE but associated with it (perhaps by being within the same dialog box.) XTREE.SBR now also allows the use of END and HOME keys to move to the last or first position in the array. If these keys are allowed exit keys, then you must use them with the SHIFT or CONTROL key in order to get the exit key action. XTRA2.BP sample program enhanced to illustrate this now (select the dialog and multi-select options). 2. Modal dialogs now support the same color logic relative to TPRINT, DPRINT, INFLD, MIAMEX, etc. as the main A-Shell window does. ============================================================================ A-Shell Development Notes Version 4.9(899) (28 Aug 2004) ============================================================================ 1. (WINDOWS.ATE) Implement the ability for applications to create modal dialogs on the fly, using XCALL MIAMEX,MX'WINCTL (aka 119) with new control type MBF'DIALOG. (The [91] update to ashell.bsi, contained along with updates of the sample programs in XTREE2.ZIP on the beta page, defines MBF'DIALOG as equal to 536870912.) A "modal" dialog is one that holds on to the keyboard focus, making it impossible to type in any other window owned by the current application, until the modal dialog is closed. You can, however, drag the dialog around, access the main A-Shell menu bar, and even pop up nested modal dialogs. Once a modal dialog is opened with A-Shell, any subsequently created controls (buttons, static text, edit prompts, etc.) will be owned by the dialog box, and their coordinates will be taken as relative to the dialog box. Ordinary text output (e.g. PRINT statements) will ignore the dialog box and appear in the main A-Shell window. (In other words, you can only place Windows control-objects within these dialog boxes.) When creating a dialog box, you should save the control ID parameter that is returned by XCALL MIAMEX, so that it can be used later with opcode 3 to delete the dialog box. Deleting the dialog box will automatically delete the controls within it. The XTRA2.BP and XTRA3.BP (XTREE) sample programs have been updated to illustrate a primitive use of dialog boxes. XTRA2 wraps the XTREE control within a dialog box, while XTRA3 allows you to pop up nested dummy dialogs on top of whatever is currently on the display. ============================================================================ A-Shell Development Notes Version 4.9(898)-2 (27 Aug 2004) ============================================================================ 1. XTREE now supports multi-selection in conjunction with file mode. In this case, the ANSWER parameter is interpreted as an array of single-character selection flags, exactly as for multi-selection array mode. The ARRAY parameter is ignored (rather than being used to return the text of the selected item.) The XTRFIL.BP (XTREE file mode) sample program has been updated to provide an option for multiple-selection. The XTREE.DOC file has also been updated accordingly. Both the updated documentation and sample programs can be downloaded from the beta page in the file XTREE2.ZIP. ============================================================================ A-Shell Development Notes Version 4.9(898)-1 (27 Aug 2004) ============================================================================ 1. Fix various INFLD-related problems introduced in 898 relating to INFLD clients that did not initialize the MAXCHRS parameter. (MESAG text mode crashed, FKEYs didn't always work, etc.) 2. (WINDOWS/ATE) INFLD TYPE |R (no redisplay on exit) now leaves the GUI edit control in place on the screen, but in read-only mode. Previously, it removed the control without redisplaying it, which defeated the desired effect of reducing the display thrashing if you are just going to redisplay it yourself. 3. The INFLD combo box has been widened by 3 character widths to avoid the problem of it sometimes truncating the longer entries, depending on the font. ============================================================================ A-Shell Development Notes Version 4.9(898) (26 Aug 2004) ============================================================================ 1. INFLD now supports independent field width and max chars parameters, in both text and GUI modes, using the optional parameter MAXCHRS (previously added to support horizontal scrolling): XCALL INFLD,ROW,COL,XMAX,XMIN,TYPE,ENTRY,INXCTL,V, & {OPCODE,EXITCODE,TIMER,CMDFLG,DEFPT,MAXPT,FUNMAP, & SETDEF,INFCLR,HLPIDX,MAXCHRS} When the optional MAXCHRS parameters is specified and non-zero, it is interpreted as the maximum number of characters which can be typed, while XMAX is the width of the editing window. If MAXCHRS > XMAX, then horizontal scrolling is enabled. If MAXCHRS < XMAX, then the window is simply more roomy than needed. (This latter feature might be useful with small fields and proportional fonts, to allow for the additional display width needed for capital letters.) 2. (UNIX) GETUSN.SBR now uses a more robust technique (getuid+getpwuid) to retrieve the login name, allowing it to work in some exotic situations where previously it didn't. 3. COMPLP was not allowing the syntax IF XFUNC$(P1,P2)=A$... 4. ATSD startup code adjusted slightly to avoid a problem with connecting to certain ATSD server environments. (Symptom was that it connected and then immediately disconnnected after displaying the license banner.) 5. (WINDOWS/ATE) New INFLD TYPE code ||F forces the current field to use the fixed pitch font, regardless of the setting of the "Use Fixed Pitch In Edit Boxes" option in the Misc. Settings menu. This can be useful when specific fields do not work well in a proportional font. 6. (WINDOWS/ATE) Fix a problem with the SETDEF contents for combo boxes being truncated at 1024 bytes instead of 1536. 7. Fix a nasty (and 20 year old) bug in VUE which caused minor file corruption after the following editing sequence: a. Modification to the length of a line (^F, ^D, ^V, etc.) b. ESC to command mode (without first moving cursor off the line) c. ^E (or some other command to redisplay the file in a new location) The corruption caused either additional garbage bytes to be inserted at the end of the edited line (if it was lengthened) or the next line to be concatenated to the edited line with some bytes removed. Also, the end of file would have lost a few bytes or gained a few bytes of garbage. (Thanks to Herman for isolating this one.) ============================================================================ A-Shell Development Notes Version 4.9(897)-5 (19 Aug 2004) ============================================================================ 1. Fix two EZTYP/EZVUE problems introduced in 897. The first caused XCALL EZTYP,FILE to get an error if you didn't pass the two new optional margin arguments (see 897-2 below). The second was that if you did use the left margin, scrolling through the display vertically cleared the left margin area. ============================================================================ A-Shell Development Notes Version 4.9(897)-4 (18 Aug 2004) ============================================================================ 1. (Windows) Fix problem with GUI font changing from fixed pitch to proportional after redrawing the window when the Control (GUI) font has been set to an explicit font and the fixed-pitch-edit font option it set. 2. (Windows) When selecting the Control (GUI) font menu option, if the font has been set to something other than the default (blank), it now asks if you want to set it back to the default. This was necessary since there was no other way to select a blank font in the selection dialog once a specific font had been selected. 3. (Linux) A special build is now available of A-Shell/Linux which supports random files larger than 2GB, provided Large File Support (LFS) is enabled in the kernel and you have a filesystem large enough. The A-Shell file size limit in this version is 2^31 records regardless of the record size. (For example, with 128 byte records, you could create a 256GB file.) Sequential and ISAM files > 2GB not yet supported. Note that the only way to identify this version of the ashell executable is to launch it with the -d switch (ashell -d). The version with large file support will display a message indicating "Large File Support". (The message may disappear after about 1.5 seconds depending on your astart.cmd or other startup command.) 4. (ATE) A stray input character following XCALL XTREE has been removed. ============================================================================ A-Shell Development Notes Version 4.9(897)-3 (18 Aug 2004) ============================================================================ 1. Fix decimal ppn bug with MIAMEX,10 (check ppn operation) so that it remains backward compatible if the P and PN arguments are passed as B,1. To work with the new extended range of PPNs, you'll need to pass larger arguments (either B,2, F,6, or S,3) in which case they will be treated as decimal values (but won't be backwards compatible to pre-897 versions of A-Shell). 2. (AIX) Fix byte swapping problem under AIX causing SYSTAT to display PPNs larger than 255 incorrectly. (Did not affect Windows or Linux.) ============================================================================ A-Shell Development Notes Version 4.9(897)-2 (17 Aug 2004) ============================================================================ 1. Fix bug with SETJTB.SBR use of B,1 variables for setting PPN (due to decimal PPN change). 2. EZVUE (aka EZTYP) now supports the ability to set a certain number of of rows at the top and columns at the left of the display off limits (untouched by EZVUE). This might be useful in some applications to allow some parts of of the application screen to remain visible even while displaying a report. You can set these optional top and left margins via two new optional parameters to EZTYP.SBR: XCALL EZTYP,FILE{,TOPMGN,LEFTMGN} You can also set them via two new EZSPL configuration file parameters: TOPMARGIN = # LEFTMARGIN = # ============================================================================ A-Shell Development Notes Version 4.9(897)-1 (17 Aug 2004) ============================================================================ 1. Fix SETJTB.SBR change ppn operation using the S,3 variables to specify the new PPN. (broken in 897). *** WARNING: THERE IS STILL A PROBLEM WITH SETJTB.SBR USING THE B,1 VARIABLES - THIS WILL REQUIRE 897.2 OR HIGHER, OR BETTER YET, JUST ADJUST YOUR CODE TO USE THE S,3 VARIABLES INSTEAD OF THE B,1 VARIABLES (WHICH HAS THE ADDED BONUS OF ALLOWING YOU TO USE THE ENTIRE NEW RANGE OF PPNS) *** 2. COPY.LIT 3.0(119) fixes a bug introduced in 3.0(118) in which the defaulting of wildcarded output PPNs was incorrectly being based on the CURRENT PPN rather than the PPN of the corresponding input file. Technically the bug and fix is in CMDLIN.SYS rather than COPY.LIT, so the next release will have a full new set of LITs (which VERSYS will report as including CMDLIN[28]) but for the moment, COPY is the only critically affected utility. 3. Regenerate all of the LITs and clean up some minor installation glitches. ============================================================================ A-Shell Development Notes Version 4.9(897) (10 Aug 2004) ============================================================================ 1. PPNs are now based on decimal rather than octal notation, and may range to [999,999] instead of the previous limit of [377,377]. The octal scheme was a holdover from days of yore, when bytes were precious and real programmers worked in binary. (The very idea that the disk would be divided into "projects" and "programmers" gives some idea of the amount of dust accumulated on this concept over the years.) As modern programmers have tried to make use of PPNs as a way of organizing real-world categories of things (location numbers, store IDs, client numbers, etc.) they have increasingly found the range of 1-377 octal both limiting and annoying. So when a certain A-Shell dealer dangled an 85 node license in front of us which needed decimal PPNs, we decided it was time to do something about it. Specifically, the new PPN system allows for decimal numbers ranging from 000-999, a nearly four-fold increase over the previous range (or 16-fold if you consider all the combinations of P and PN on a single device.) Not that we recommend subdividing a device into a million (or even a thousand) PPNs, but you can now do so if you so desire. (In fact, the LIT utilities continue to recognize only 512 unique PPNs per device.) Initially, the theory was to make the octal/decimal choice an option, but it became apparent that it was so entrenched in the code that it seemed best to just do it and get it over with. For the most part, the changeover should be transparent. No changes are needed to existing disk directories or ini files. However, the conversion does have some ripple effect on LITs and possibly applications, the ramifications of which we dedicate ourselves to discussing here. First, a large number of LIT utilities (essentially any that deal with PPNs) had to be updated, and regrettably, the updated versions are not backward compatible. To provide an easy escape valve, we packages the older versions (with .48A extensions) on the beta page as lit48a.zip, to be downloaded, unzipped, and renamed to .LIT if you decide to revert to an earlier version of A-Shell. To make it easy to recognize the new LIT's, they are all version 3.0 or higher. (It should go without saying that this is one of those updates you'll want to perform cleanly, i.e. with no users running the old version.) Second, and most important, is the question of what effect this will have on existing applications. The answer here is "hopefully none". That is to say, we've tried (and may even have succeeded) in making the new version backwards compatible with existing subroutines that retrieve or set PPN values. However, we cannot completely rule out the possibility that an application does some kind of internal manipulation of PPN information using octal conversion utility code. Before worrying about that, we'll first review the general approach we used to upgrading existing subroutines, and then list all that have changed. Based on that, you can probably quickly determine if you have anything to be concerned about. General principles relating to PPN arguments in subroutines: a. Any PPN values represented in a pair of B,1 (or a single B,2) parameters have been kept backwards compatible. That is, they will work as before for the existing range of octal PPNs. They will not, however, accomodate new PPNs which require decimal digits or go beyond the previous limit of 377,377. Note that these B,1 parameters were always a bit awkward, due to the fact that the binary representation only made sense if reformated as octal. If you used a PRINT statement to print out the B,1 parameters returned from a subroutine such as GETPPN, they would have appeared strange converted to decimal. (For example, [377,100] stored in a pair of B,1 variables and displayed using PRINT would come out as 255,64.) b. PPN values represented as strings (S,3 or more) are both backwards and upwards compatible. They will work as before and also accomodate PPNs such as [999,888]. c. Any other storage format (for example, a pair of B,2 or F,6) will now use the straightforward decimal representation. (Fortunately, there is only one commonly used subroutine that used one of these formats for PPNs: XPPN.SBR.) Here is the complete list of subroutines affected by this change (with comments) for your review. (Watch out for ALIASes though!) DSKPPN.SBR - Returns PPN as a string, fully compatible up to 999,999. GETJTB.SBR - returns PPN info in both B,1 and S,3 formats. The B,1 values continue to be treated octally as before, whereas the S,3 values are unaffected. (Recommendation: use the S,3 versions and ignore the B,1 versions.) GETJOB.SBR - returns the PPN in a pair of B,1 values, which continue to be supported as before (i.e. octal). GETPPN.SBR - Same as for GETJOB. LOG.SBR - Supports various argument lists, but all PPN parameters are strings, so there it should be backwards and forwards compatible. MIAMEX,11 (return ersatz info) and MIAMEX,19 (return device info) both continue to support the B,1 versions of PROG and PROJ to preserve backwards compatibility. Any new programs using these routines should upgrade the PROG and PROJ values to B,2 which will cause them to come back in decimal (ready for printing without the need for octal conversion.) (If you decide to make this change, obiously you should do it thoroughly and systematically to avoid confusion and incompatibilities between programs.) PLYJOB.SBR - returns PPN info in S,3 format, so no problem here. PPNSWP.SBR - Uses a pair of B,1 fields, so backward compatible. SETJTB.SBR - allows you to log to a new PPN by setting either the B,1 or S,3 fields. As before, it uses the S,3 fields if the B,1 fields are both 0, so that is the way you'll want to use it. SETPPN.SBR - Companion to GETPPN. Uses B,1 parameters. Backwards compatible. XPPN.SBR - returns PPN info in B,2 format. Previously, you had the option (SBR=XPPNOCT) of getting the returned PPN values in decimal equivalent format so that they printed as you expected. The new version always works this way (i.e. SBR=XPPNOCT is effectively forced on and may be removed from the miame.ini). As such, it is perfectly backwards and forwards compatible. 2. (Windows/ATE) INFLD TYPE |g now implies |G and can be used in all cases to get the Windows-style edit box implementation of INFLD (in A-Shell/Windows or ATE), without any of the automatic substitution of fancier control types (e.g. date picker, time picker, combo box). (Previously you needed to supply |G in all cases, and add |g to turn off the special control types.) 3. (Windows/ATE) The combo box has been improved in the following ways: a. The width of the drop-down list is now determined by the longest choice in the SETDEF parameter, rather than by the XMAX parameter. This allows you to have longer, more descriptive choices in the drop-down list than the field allows for. A good example of this would be a 2-character state abbreviation field, which you can now link to a list of choices such as ",CA California,MN Minnesota,," etc. (Since the total capacity of the combo box has been increased to about 1200 characters, it should be sufficient for a lists like that of all the 50 US states and territories. Anything larger, though, should use PCKLST/XTREE.) Also note that the drop-down list width may extend to the right beyond the edge of the A-Shell window, but will be truncated by the right edge of the screen. b. Using the above example, values selected from the list will now be truncated to the XMAX size when the field is returned. So if the XMAX was 2 and you had selected "MN Minnesota", then it would only return to the calling program "MN" (just as if you had not specified the |G option for the combo box). c. The width of the control edit box plus drop-down button is now increased to accomodate the size of drop-down button. Previously, the button was encroaching on the edit-text area, virtually obscuring fields shorter than about 3 characters. Note that this expansion may result in temporarily covering over a few columns to the right of the field, but they will be restored as soon as you exit from INFLD. d. A bug was fixed in which it was trying to convert a SETDEF containing a list of valid characters (rather than field choices) (i.e. using TYPE {) into a combo box. 4. (INFLD GUI) The handling of fixed pitch fonts in the GUI version of INFLD has been improved somewhat. Unlike proportional fonts (which we only scale vertically and let the horizontal size default based on the display aspect ratio and judgement of the font mapper), fixed pitch fonts can be scaled both vertically and horizontally. We use this to ability to try to generate a font that fits within an INFLD edit box in such a way that the box gets filled up when you get to the maximum number of allowed characters for that field. (With proportional fonts, this is out of the question.) Note that because fixed pitch fonts are currently scaled to an integer width in pixels, as a practical matter, the maximum number of characters is not going to exactly fill the box. But it should be reasonably close. If you can't stand that imperfection, you might have to just give up on the GUI version of INFLD and continue to use the text version. Note that along with the scaling improvements, we've reduced the degree of automatic expansion of small field lengths. Previously, 1 and 2 character fields were expanded by one character (to allow for font size irregularities.) When the fixed pitch option is set, we now only expand single character fields to 2 column (mainly because the edit window border reduces the available size of the field by so much that a single character field is just too skinny to look good.) 5. (INFLD GUI) Y/N fields converted to checkboxes (using TYPE ||c) now allow the same keyboard shortcuts (1 and 0, plus the Y and N equivalents based on the language definition.) 6. (XTREE) - Toggling to another application and back again while XTREE has the focus now returns the focus to XTREE. Also, a problem with controls underneat the XTREE bleeding through has been fixed. (Any controls covered by XTREE will now be hidden until XTREE exits.) 7. (INFLD GUI+XTREE) A new option has been added to the Misc Settings dialog to "Force standard colors in edit boxes". When set, the EBCLR/EFCLR combination passed via the INFCLR parameter to INFLD is ignored and the standard Windows text and edit background colors (typically black text on a white background) are used. This is a mere convenience for applications that were using explicit INFCLR settings that want to experiment with the standard GUI look without going to much work to adjust their INFCLR parameters. The option also applies to the XTREE color scheme, although here it overrides the TFCLR,TBCLR (text fg/bg) and PFCLR,PBCLR (prompt/title colors) fields of the MMOCLR parameter. Again, this is a convenience when switching to the GUI version from the text version without needing to bother changing your color definitions. 8. %env% variable expansion has been improved in a few ways. First, you can now use an %env% variable as a partial filename in an OPEN statement. Assuming you have an environment variable USERNAME which equates to "HAL": OPEN #1, "%USERNAME%01.LST[1,4]", OUTPUT ! opens HAL01.LST[1,4] Previously, the %env% name had to be followed by a directory separator. Second, you can now use %env% names on command lines (provided the command retrieves its argument list XCALL LSTLIN, which is true for all the standard A-Shell LITs), e.g.: .RUN MYERZ:%USERNAME%X ; above is equivalent to RUN MYERZ:HALX .COPY *.TMP=%USERNAME%:%USERNAME%*.LST ; above is equivalent to COPY *.TMP=HAL:HAL*.LST Third, you can now use multiple %env% variables within a single filespec or command line (as in the COPY example above). Finally, %env% variables which are not defined, are now left in place as literals. Previously they were converted to null. This "feature" avoids complications with other users of % in command lines. 9. APPEND.LIT 2.1(113) now handles long native filenames containing spaces. For example, the following is now legal: .APPEND TEST.LST=TEST.LST,"%TEMP%\THIS IS A LONG FILE.LST" 10. AMOS filenames can now be up to 10 characters long (previously 6). Note that to avoid compatibility problems with existing programs, subroutines, and other internal structures which assume a maximum of 6, it is advised that you only use the new longer filenames with data files. (This is where the main demand is anyway, such as to incorporate CCYYMMDD dates into filenames.) Program names longer than 6 characters will be truncated internally to 6 by most LIT and SBR utilities. 11. DIR.LIT 3.0(132) supports a new switch /L{ONG} which changes the default display layout to accomodate 10.3 format instead of 6.3 format. It also changes the default /W value from 4 columns to 3. As before, filenames exceeding the maximum display length will show a ">" character following the filename. 12. XTREE now identifies the initially active column (if set via the XTR'COLUMNACTIVE parameter) by showing the column title button in the depressed state (same as if you clicked on it to sort but without the sort order arrow). 13. SET.LIT 1.2(139) supports two new commands to link A-Shell color palette numbers to Windows desktop colors, to go along with the existing SET TERM SYSBCOLOR #: SET TERM WINBCOLOR # SET TERM WINTXTCLR # The first (WINBCOLOR) sets the "Window Background" color #, which is typically used for the background of small windows such as edit boxes, checkboxes, and listboxes (typically white). The second (WINTXTCLR) sets the "Window Text" color #, which is typically used for text both on buttons and in edit boxes and listboxes (typically black). Note that the # here is taken from the foreground palette (unlike WINBCOLOR and SYSBCOLOR which both refer to color numbers from the background palette). Along with SYSBCOLOR, these can now be used via ATE on UNIX servers. 14. XTREE.SBR now works in the ATS / ATE environment. Note however, that SftTree_IX86_A_45.DLL must be on each client. (If not distributed with ATE, you'll have to copy it from an A-Shell/Windows installation.) ============================================================================ A-Shell Development Notes Version 4.9(896)-2 (28 Jul 2004) ============================================================================ 1. Fix INFLD problem with it clearing the last 1-3 spaces of the line when the field ended within 3 spaces of the right edge of the screen (introduced in 895). ============================================================================ A-Shell Development Notes Version 4.9(896)-1 (28 Jul 2004) ============================================================================ 1. Fix serious problem with PCKLST.SBR when less than 10 parameters passed to it. (Introduced in the 896 build.) ============================================================================ A-Shell Development Notes Version 4.9(896) (20 Jul 2004) ============================================================================ 1. (WINDOWS/ATE) Initial release of XTREE.SBR, an upward-compatibile spinoff from PCKLST. XTREE should be used only when you can be assured of a GUI environment, otherwise use PCKLST. See the preliminary documentation file xtree.doc on the beta page. Also see the xtree.zip package on the beta page which contains sample programs and data. 2. (WINDOWS/ATE) The INFLD combo box (activated when you have a "normal" SETDEF list and |G) can now accomodate about 1200 bytes of options in the SETDEF parameter (up from 512 previously). For choosing from lists longer than that, you might as well just use PCKLST or XTREE. ============================================================================ A-Shell Development Notes Version 4.9(895)-1 (20 Jul 2004) ============================================================================ 1. (WINDOWS/ATE) PCKLST now restores the state of any buttons or other controls which are temporarily disabled due to overlapping with the active PCKLST. ============================================================================ A-Shell Development Notes Version 4.9(895) (20 Jul 2004) ============================================================================ 1. (INMEMO) ^Z on bottom line of memo now deletes it complete. Previously it just cleared it. 2. (WINDOWS/ATE) GUI version of INFLD now obeys the INFCLR settings. Previously, while editing, it always used the standard Windows colors. If you want to keep that behaviour, set EFCLR and EBCLR to -2, either in the INFCLR parameter passed to INFLD, or in the INI.CLR file. 3. (WINDOWS/ATE) A new option to "use fixed pitch font in edit boxes" has been added to the Misc Settings dialog. When set, INFLD uses the currently defined fixed pitch font (see Settings..Fonts) and attempts to scale it slightly down to fit in the edit window better. It doesn't completely eliminate the complaint that the size of the edit window doesn't perfectly match the number of characters which are allowed, but now the edit windows will more or less uniformly appear to have room for one more character than is allowed. (This is necessary, otherwise Windows won't display that last character without scrolling the field.) Note that when you edit the field it will be redisplayed using the defined "proportional" font. If you don't like the drastic change between the fixed pitch (in edit mode) and the proportional pitch (upon display), then you can always set the "proportional font" to the same as the fixed pitch font, in which case all of the GUI controls will use it. 4. A bunch of internal development has been done on PCKLST but unfortunately it is not ready to document (sorry Jorge!) But the existing functionality should continue to work. ============================================================================ A-Shell Development Notes Version 4.9(894)-4 (03 Jul 2004) ============================================================================ 1. (INMEMO) The ^O (concatenate) command now reformats the entire paragraph. (This was a judgment call, based on the theory that few people, if any, would use ^O if they weren't planning to reformat the paragraph, and in the odd case that they were, they can still use ^B to split it back apart again. But if someone objects, speak up now before this becomes solidified.) The reformatting operation always does at least one concatenation (if possible) and then continues until it hits a line that is blank or starts with at least two blanks. (In other words, the operation will NOT stop at a blank line if it is the first line after the current line where the ^O was entered, but it will stop at any subsequent blank line.) ============================================================================ A-Shell Development Notes Version 4.9(894)-3 (02 Jul 2004) ============================================================================ 1. (UNIX) Fix a bug introduced in build 782-2 which broke the -td <tdvnam> command line switch. 2. (ATE) Fix problems with EXITCODE parameter returned from PCKLST.SBR. 3. (WINDOWS) Native filenames are no longer forced into upper case. (This is purely a cosmetic issue since filenames are not case sensitive in Windows, and only affects the display of directories outside of A-Shell (i.e. using Explorer). ============================================================================ A-Shell Development Notes Version 4.9(894)-2 (30 Jun 2004) ============================================================================ 1. Fixed a problem where operations on files whose native path lengths was more than 100 characters was causing the jobtbl entry to become zapped. (Many LIT commands still still need to be upgraded to support filenames longer than 100 characters, but going over the limit should not cause errors within A-Shell.) 2. (UNIX) ASTART is no longer executed when launching ashell with stdin redirected from a file (as would be the case when using SUBMIT /NEXT). (This was causing a problem for SUBMIT when ASTART launched a program.) ============================================================================ A-Shell Development Notes Version 4.9(894)-1 (29 Jun 2004) ============================================================================ 1. (Windows/ATE) PCKLST GUI enhancements/fixes: a. Sorting now supported in array mode (it now keeps track of the original row numbers and returns the selected row number relative to the unsorted array). b. Clicking on a column header (whether sorting allowed or not) resets the character search to work in that column. c. A small up or down arrow now displays in the column header indicating the sort order for that column. d. EXITCODE was not being returned properly from ATE. 2. (Windows/ATE) Fixed a bug with menus defined to send virtual keys using the %VK_Fx% syntax. (It was working only once.) ============================================================================ A-Shell Development Notes Version 4.9(894) (28 Jun 2004) ============================================================================ 1. (Windows/ATE) New multi-column PCKLST control now included with and supported by ATE. See sample programs PCKARY and PCKFIL (in PCKLST.ZIP) on the Beta download page for and also the notes on the latest PCKLST enhancements below for more details. Several PCKLST bugs related to the new control have been fixed in the process. 2. (Windows/ATE) The TYPE codes for checkboxes and radio buttons have been changed, from |c to ||c (checkbox) and |b to ||r (radiobutton). **** WARNING: THIS WILL CAUSE ANY EXISTING (VERY RECENT) CODE USING THESE TYPE CODES TO NOT FUNCTION PROPERLY. Obviously we try to avoid this situation and usually do; in this case, we discovered too late that |c had already been assigned to an obscure function in the AMOS implementation of INFLD. Rather than break that, since we were running out of two character TYPE code sequences anyway, and since likely only one or two people have implemented any code using the new |c or |b TYPE codes, we decided to just start fresh with a new series of three-character type codes (starting with ||). 3. (Windows/ATE) Several improvements have been made to checkboxes (now TYPE ||c), allowing them to be handled nearly like Y/N fields. Contrary to the recommendations set out under edit 892 below, our latest recommendation is to either use INFLD for all aspects of checkbox implementation (creation, display, editing), or use XCALL MIAMEX,119 for all aspects. You can mix the two (i.e. create the checkbox using MIAMEX,119 and edit it with INFLD, but this is likely to cause confusion.) If you use the MIAMEX,119 method, then your program does not need to monitor the user while editing the checkboxes; you only need to query the checkboxes at some later time to see which ones are checked. In contrast, if you use the INFLD method, then you should implement an exitcode sequence allowing the user to go directly to a checkbox field by clicking on it, and treat it almost just like a normal Y/N field. The main differences between Y/N fields and checkboxes are: A) The text label of the checkbox is an integral part of the control. You must pass the label in the SETDEF parameter, and set the XMAX value large enough to accomodate the label (instead of just 1 which would be typical for Y/N fields.) B) The user toggles the checkmark with the mouse or the space bar. C) The OFCLR/OBCLR fields in INFCLR are now used to set the color of the checkbox label text when displaying or redisplaying the checkbox. Note that, at this time, we are only encouraging the use of INFLD for checkboxes, and not radiobuttons. In most cases, a single combo box (see 892-4 below) is much cleaner to simpler than a series of radio buttons. If you insist on radio buttons, it is probably best to just implement them using the MIAMEX,119 method. 4. (UNIX) Fixed a nasty glitch which caused ashell to sometimes allocate a huge amount of memory (in the vicinity of 50-60MB) for no good reason. Unless your system was short on memory, you may not have noticed the problem unless you used SYSTAT and saw some funny values in the memory column. 5. (ISAMPLUS) When TRACE=BASERR was set, ISAMPLUS was logging "record not found" error messages (isam error: mode 28, error 111, stat -3) which were generally not really errors nor worth logging. ============================================================================ A-Shell Development Notes Version 4.9(893) (24 Jun 2004) ============================================================================ 1. New MIAMEX,133 function allows you to expand a file in place: XCALL MIAMEX,133,CH,ADDRECS,STATUS CH is the channel number that the file is open (for random exclusive access on). If running LOKSER, you should probably open the file for RANDOM (exclusive) before expanding it. If not running LOKSER, you are free to use some other locking scheme. Although the XCALL will not stop you from expanding a file without first gaining exclusive access, you are likely to run into synchronization conflicts with other users who have the file open. For one thing, those users will not be able to access the expanded area (until they close and reopen the file), so if you update a control record they may try to access the new area and get an illegal record number. ADDRECS is the number of logical records to add (based on the record size passed in the file open statement.) It will be converted to the appropriate number of 512 byte blocks to add. (The added blocks will be filled with ]]] characters.) STATUS returns the new total number of logical records in the file if the operation is successful. 0 indicates a parameter or other configuration error trapped by the XCALL (generally accompanied by a displayed message.) <0 indicates an operating system error #, which you can retrieve the message for using MIAMEX,86,STATUS,MSG Note that it is up to you to update any control records or other internal structures to correspond to the new file size. Remember to release your exclusive access after doing so. 2. (Windows/ATE) New MIAME.INI parameter SBR=INFLDCBRJ (INFLD CheckBox Right Justify) can be used to right justify the text label associated with an INFLD-created checkbox (TYPE |c). Without TYPE R, the text goes on the left and the box on the right; TYPE R reverses that. But in either case, the text itself is normally left justified within its space. SBR=INFLDCBRJ will force it to be right justified in its space. 3. (Windows/ATE) Checkboxes created with INFLD now have the MBF'UNPROTECTED flag set so they can be deleted with TAB(-1,10) (more like static text than like regular buttons). 4. (Windows/ATE) A new GUI implementation of PCKLST.SBR is now included, based on the Softel tree control, SftTree_IX86_A_45.DLL, which must be installed in the same directory as ashw32.exe if you are going to use the GUI version of PCKLST.SBR. The main benefits of the new implementation are: a. Multiple column support. (The previous GUI implementation did not work well with multiple columns due to the proportional font spacing issues.) b. Horizontal scrolling permits many more columns than fit at one time. c. Sorting and reording of columns may be enabled. (See new Flags 16384 and 32768 below). d. Improved title aesthetics. (Column titles now appear as buttons which can be clicked for sorting, reordering purposes.) e. Somewhat improved keyboard item selection. Fast mode (where you don't have to hit ENTER) is not currently supported, but otherwise typing multiple characters (with less than 1 second delay between them) selects the item which matches all of the characters typed. After 1 second delay, the process starts over with the next character. f. Potential for adding many additional capabilities. (We are currently using only a small fraction of the control's features.) The new control should be backwards compatible with existing PCKLST calls, but some of the new features require the use of one or more additions to the PCKLST parameters. (Also note that you still need to add SBR=PCKLST_GUI to the MIAME.INI or you will get the original text implementation). Prompt (title) The syntax of Prompt now determines whether there are columns, and how many. The rule is that any character in the top title portion of the Prompt parameter that is preceded by two or more spaces is considered the start of a column. For example: PROMPT="City State Zip~Northridge" In this example, there would be only 2 columns ("City", and "State Zip") because there was only one space between "State" and "Zip"). The City column is exactly 13 characters wide (the data lines better follow this rule). Note that the bottom title is not supported in the GUI version (Windows listboxes do not generally have bottom titles). Flags parameter - New values: 4096 - (File mode) Column titles are in first line of file (instead of in the Prompt parameter) 8192 - Alternate coordinate semantics. The Row,Col,Strow and Endrow params are interpreted as Srow,Scol, Erow,Ecol. This provides you total control of the size and placement of the listbox window, whereas the standard scheme does not allow you any control over the width. 16384 - Allow sorting by column. (Clicking on the column title toggles the sort order between ascending and descending.) Sorting does not make sense in the array mode unless one of your columns contains the original array row #; otherwise you will not be able to match up the row selected with the original array. This is less of a concern in file mode because there, the selection is returned as text rather than a row #. 32768 - Allow reording of columns. (This is done by dragging and dropping the column headers.) Note that in file mode, this will affect the order of the columns in the returned selection (so is probably only safe in array mode). ============================================================================ A-Shell Development Notes Version 4.9(892)-4 (17 Jun 2004) ============================================================================ 1. INFLD now implements fields which have a "normal" SETDEF parameter (containing a list of allowed entries, e.g. ",red,blue,green,purple,,") as combo boxes. User can type or select choice from drop-down box. As before, to allow an empty field, add TYPE O (for optional). 2. Cleanup various problems with the new INFLD checkboxes. 3. Eliminate dependency on Windows API function FlashWindowEx, which is not available under NT4 and W95. Problem was introduced in edit 880. 4. Cleanup various problems with GUI version of INFLD and fields with TYPE ? and/or timer displays. ============================================================================ A-Shell Development Notes Version 4.9(892) (10 Jun 2004) ============================================================================ 1. (Windows/ATE) Checkboxes and radio buttons can now be created and accessed by INFLD similarly to other field types. (In particular, checkboxes correspond well to Y/N fields.) The TYPE code for checkboxes is "|c" and for radio buttons is "|b" (vertical bar followed by a lower case "c" or "b"). If combined with TYPE Y, the field will treat a checked box as equivalent to the single character affirmative (Y, S, O, etc.) for the current language definition, and an empty box as the single character negative (N). Otherwise, a checked box will correspond to a "1" and an unchecked box to a "0". Note the following ideosyncracies of checkboxes and radio buttons as INFLD field types: A. Checkboxes and radio buttons combine a text field with a square or round box. Although other fields may also associate an edit control with a text prompt, in all other cases, INFLD does not concern itself with the text prompt (which much be displayed via a separate operation). When a particular checkbox or radio button is being edited by INFLD, the corresponding text will be highlighted via a dotted line, giving the operator a visual indication of what field they are on. (There is no cursor for checkboxes and radio buttons.) B. Because of this association between the text and the box or button, if you want to use INFLD to create the control, you must supply the text string (label or prompt) in the SETDEF parameter. (SETDEF does not otherwise apply to these two field types.) (This is not to be taken as a recommendation that you use INFLD to CREATE checkboxes and radiobuttons; see item D below for recommendation on creating them.) C. In contrast to the case with other field types, in which the field becomes an editable control when it has the focus and is converted back to a static/sunken text control when not being edited, checkboxes and radio buttons remain the same whether they have the focus or not. The only visible difference when they have the focus is the dotted outline described above. D. Because of the above, it is typical for checkbox and radio button fields to be created at the same time that your program normally creates the data entry form background. You can create them for display purposes either using MIAMEX,119, or TAB(-10,20), or INFLD. Once created, when you want to edit the field, INFLD will locate the existing control, if it exists, by looking at the ROW, COL, and V parameters. (If V is < 0, it is taken as the actual control ID # of a control previously created with XCALL MIAMEX,119, and ROW and COL are ignored. If V > 1, then it is treated as the control ID # of a groupbox to which the checkbox or radio button belongs, and the ROW and COL parameters are offset within the groupbox.) Unless V identifies the control directly, the existing controls are scanned to find one which has the same starting row/col, or the same ending row/col. The point of comparing just the starting or just the ending position is that after having created the checkbox/radio button control, you may want to treat it like Y/N field, in which case you would probably be specifying a field of size 1 (even though the full control will be several columns wide due to the text component.) E. When INFLD is operating on a checkbox (and the corresponding text is highlighted), you can toggle the check status with the space bar, or by clicking with the mouse. You can use ENTER to exit, or any of the other field exit keys which you've enabled according to the normal INFLD rules. F. When INFLD is operating on a radiobutton, the button that has the focus will automatically be selected (as if you had clicked it with the mouse.) You cannot toggle the button with the spacebar (partly because it wouldn't then be clear which other button in the group should be toggled on.) (Because it is a radiobutton and not a checkbox, only one button in the group, at most will be checked at one time.) Considering this ideosyncracy of radiobuttons, they don't work that well as INFLD fields unless your users are prepared to use the mouse to jump to the next non-radiobutton field. (Otherwise, unless you enable a specific exitcode to jump from the current button to the next group of controls, there would be no way for the operator to keyboard through a group of radiobuttons without leaving the last one selected.) Thus, it may make more sense to treat radiobuttons more like pushbuttons, i.e., as controls that are not operated on directly by INFLD but instead are available for the user to click on at will, with the program querying them before processing the screen data. When treating checkboxes and radio buttons like normal INFLD fields, there may be some confusion over the following similar situations: i. While within an INFLD call targeting a specific checkbox or radio button, the field will visibly maintain the focus and all keyboard will be filtered through the control. (The result is that other than space bar and defined exit keys, any other keys will probably be ignored.) Clicking on another field may or may not cause the current field to lose focus, depending on various factors. ii. If you click on a checkbox or radio button while another INFLD field is active, unless the clicked-on control is set up to transmit an exitcode which will cause the currently active field to exit and the program to jump to the just-clicked field, although the click operation will change the checked status of the checkbox or radio button, the clicked-on control will not retain the focus. Instead, the focus will revert back to whatever field was previously doing input. The point of this is that if you choose not to use INFLD to individually edit your checkboxes, you can use a single generic input routine which just waits for you to exit the current screen (presumably by clicking on a button or entering a special code or key). Clicking on individual boxes in this case will change the status of the checkboxes, but not interrupt the current input operation. (You can query the checkboxes or their control variables all at once when you decide to leave or update the screen.) 2. (ATE) The standard INI file for ATE is now MIAME.INI and not ATE.INI. This seems less confusing for those that are using both ATE and A-Shell/Windows. 3. (ATE) The name of the settings (.ASH) file now matches the ATE configuration name. For example, if you create an ATE configuration called MYAPP, then it will look for its settings (colors, window size, etc.) in MYAPP.ASH in the base directory where ATE was installed. HOWEVER, if MYAPP.ASH does not exist, it will use DEFAULT.ASH (as will A-Shell/Windows now). This allows you to share settings between configurations, or not, depending on your preference. 4. (ATE) The "Open Local Session" option no longer complains about demo mode if ATE is licensed on the server. 5. XCALL DERR (display error message, often aliased to ERRMSG) now uses a Windows-style message box if GUI support is available. ============================================================================ A-Shell Development Notes Version 4.9(889)-2 (27 May 2004) ============================================================================ 1. (Windows/ATE) Fix bug introduced in 889.1 which caused various problems in control operations. ============================================================================ A-Shell Development Notes Version 4.9(889)-1 (26 May 2004) ============================================================================ 1. Fix a licensing problem in which the ISAMPLUS license bit for existing licenses was being disabled. Problem was introduced in 889. 2. (Windows/ATE) Locking the keyboard with tab(-1,7) no longer conflicts with ATE functions that rely on data being sent back through the keyboard channel (e.g. ESC sequences or TAB(-10,x) command for file transfers, launching windows files, etc.) 3. (Windows) XCALL MESAG and MSGBOX now make sure that the screen buffer is flushed before the box is displayed. (Previously it was possible that the last PRINT statement prior to the XCALL may not have been visible.) ============================================================================ A-Shell Development Notes Version 4.9(889) (25 May 2004) ============================================================================ 1. (Windows/ATE) ATE 3.0.141 fixes some problems with FTP transfers, including an intermittant timeout at the end of a transfer. The port and timeout options are now implemented. 2. (Windows/INFLD) Misc minor problems resolved. The + and - keys on the numpad were acting as if hit twice. Using a blank to remove a leading - sign in an alphanumeric field was clearing the space in front of the field. TYPE { (character set acceptance) was being confused with TYPE } (line editing and inmemo mode); only the latter should disable the Windows edit control version. 3. INI file options that take a boolean argument are now somewhat more internationally minded. Responses beginning with the following are all treated as true: T (True) Y (Yes) 1 ON Sí (Sí) Si (Sim) OU (Oui) Al (Allineare) V (Verdad,vrai,verdadeiro) Responses beginning with the following are considered false: F (False,Falso) N (No,Non) 0 OF Any other starting letter will be checked against the current LDF file to see if it matches the single-character yes or no definitions. 4. (Linux) First round of support for the EFS encrypted file service. This is a feature currently being added for a single developer but which may be made available as a license option in the future. Basically it allows files to be encrypted and decrypted on command (via an XCALL) using AES encryption, but more importantly you can read and write directly to encrypted files (just as if they were normal files). The objective is to provide a higher degree of privacy protection for sensitive data by closing three of the main security gaps in most organizations: 1) hackers breaking into the network and stealing data files directly; 2) employees or other insiders copying data from the server to the their PC and then to email or removable media, and 3) stealing backups. The new EFS.SBR handles most of the operations related to encryption: XCALL EFS,0,STS ! check if EFS is available XCALL EFS,1,STS,KEY ! specify new encryption key XCALL EFS,2,STS,FSPEC,ISCRYPT ! check if FSPEC file encrypted XCALL EFS,3,STS,ISPEC{,OSPEC} ! encrypt ISPEC {into OSPEC} XCALL EFS,4,STS,ISPEC{,OSPEC} ! decrypt ISPEC (into OSPEC} STS (F,6) is returned as follows: 0 = success -1 = EFS not available -2 = EFS not licensed -3 = param error >0 = errno ISCRYPT (B,1) is returned as 0 if file not encrypted, else non-zero. (only valid if STS returned = 0) KEY (X,32) should be mapped as follows MAP1 KEY,X,32 MAP2 KEY$,S,32,@KEY By specifying the unformatted KEY parameter, it will not show up in the trace log even if TRACE=XCALL is set. Furthermore, if your key is less than 32 bytes long, the remaining key bytes will be supplied from a default internal ashell key. By taking advantage of this feature, even if your part of the key was exposed and a copy of the file stolen, the culprit would still need a licensed copy of A-Shell to decrypt it. ISPEC, OSPEC (string) are AMOS or native filespecs. When the EFS license option in enabled, A-Shell will automatically detect when a random, ISAM, or ISAMPLUS file has been encrypted and thus there is no need to specifically identify to A-Shell which files are encrypted, except with you create a new file. In that case, for RANDOM files created with ALLOCATE, use XCALL ASFLAG,512 prior to the allocate to set the encryption flag. (As with other ASFLAG values, the setting only lasts until the end of the current program.) For ISAMPLUS, you can use the new ISMUTL /E switch (requires ISMUTL.LIT 1.3(128) or higher). For old ISAM, you can first use ISMBLD, then use XCALL EFS,3,STS,ISPEC to encrypt the DAT and/or IDX file(s). (An ISMBLD switch may be added if there is a demand.) Note that direct reading and writing of encrypted files only works for "contiguous" files (random, ISAM, ISAMPLUS). For printfiles, if you want to encrypt them, you will probably need to use XCALL EFS after closing (and after spooling, if applicable) the file. Similarly, you would use XCALL EFS again to decrypt it before accessing (viewing, reprinting) the file later. =========================================================================== A-Shell Development Notes Version 4.9(888) (20 May 2004) ============================================================================ 1. (Windows/ATE) MIAMEX,119 calls are now resistant to interference from typeahead. 2. (Windows/ATE) MIAMEX,97 (Create Windows Directory) now works over ATE, provided an additional argument is passed, set to "R" (for "Remote"): XCALL MIAMEX,97,DIRSPEC$,STATUS{,"R"} If the "R" argument is not specified, then the directory is created on the local (server) machine, otherwise it is created on the remote PC. Note that if the server is not a Windows machine, an attempt to create a local directory will fail, returning status -1. (You should use MIAMEX,38,DIRSPEC$,STATUS for UNIX directory creation.) Also note that if the remote directory operation fails, it will return a non-zero STATUS, and if the error is not due to the directory already existing, it will also display a messagebox. 3. Increase max length of filenames returned from MIAMEX 20 and 21 from 34 to 120. (Same patch as 4.8.845). 4. (Windows/ATE) Fix a problem with XCALLs to SBX modules corrupting the current Windows control array, leading to subsequent problems saving, restoring, deleting, or updating buttons and other controls. 5. (Windows/ATE) Clean up some minor problems with ATS-to-ATE communication. NOTE: if using the INFLD HLPIDX parameter to encode pseudo-funkey sequences which include chr(7), the chr(7) should be changed to "^G". 6. (Windows/ATE) If a groupbox is deleted, all controls within it are automatically deleted. (This is just a convenience.) 7. (Windows/ATE) New INFLD TYPE code |g may be used to limit some of the more advanced features of |G. At the moment, this only affects dates and time fields; when |g is specified, the date and time picker control is not used (thus allowing people to keypunch dates like they used to.) In the future |g might be extended to similar situations, turning off more advanced GUI features that may not be appreciated by existing users comfortable with their existing keyboard methods. Note that |g should be added to |G (rather than replacing it.) ============================================================================ A-Shell Development Notes Version 4.9(887)-1 (17 May 2004) ============================================================================ 1. (Windows/ATE) Adjust timing parameters to speed up MIAMEX,119 over ATE to AIX. (Querying checkboxes was ridiculously slow!) 2. (Windows/ATE) Although the timing adjustment helped, it is still not fast enough (particularly on AIX) to make supporting large numbers of checkboxes practical over ATE. To provide a faster means of creating and querying many buttons or checkboxes at a time, a new batch mode has been implemented, using MIAMEX,119 opcodes 8 and 9: MAP1 ID(9),B,2 ! array of control IDs (must be B,2) MAP1 CB(9),B,1 ! array of chkbox/radio valus (B,1) XCALL MIAMEX,119,8,STATUS ! start batch <insert here a batch of regular MIAMEX,119 calls to create or query any kinds of controls> COUNT = 9 ! set to max size of ID() and CB() arrays XCALL MIAMEX,119,9,STATUS,COUNT,ID(1),CB(1) ! end batch The start batch operation sets an internal flag, such that the return values (STATUS and ID) for all subsequent MIAMEX,119 calls are internally buffered instead of being returned. (You will probably need to remove any logic from your existing MIAMEX,119 calls that tests for return STATUS or ID's.) When the end batch command is sent, the previously buffered results from the preceding MIAMEX,119 calls are returned in the arrays specified. Note that the COUNT parameter should be set to the maximum # of controls in the batch (and must be no more than the size of the actual mapped arrays). If the actual size of the batch was greater than COUNT, the results will be truncated there. Note that you can either specify the first element of the arrays (as we did above), or you could supply the names of unformatted variables which the arrays were overlayed on. ============================================================================ A-Shell Development Notes Version 4.9(887) (16 May 2004) ============================================================================ 1. Fix a problem with the cursor turning off during memo input when SBR=INFLD_KEEPALIVE set. 2. GUI controls are now saved and restored automatically when screen areas are saved and restored. Note that as before, when the area is less than the full screen, any controls which intersect with it are hidden when the area is saved. (This is necessary because controls ride on top of the normal text display layer, and thus any non-hidden controls would show through the area, ruining the effect of a pop-up box.) 3. The GUI version of XCALL MESAG now displays a token "Click OK to Continue" in the message box if you don't supply any message text. This isn't necessary with the non-GUI version because the "CR TO CONTINUE" message is automatically added; but with the GUI version, the message is replaced with an OK button, and although that is sufficient, it looks rather weird to have a message box with nothing in it but an OK button. **** NOTE: The actual message displayed is defined in the SBRMSG.lan (lan = your language definition file extension, i.e. USA, UK, etc) as messages 002,008 and 002,009. Since these are new messages, you'll need to add them manually (or download an updated SBRMSG file.) 4. (GUI) TAB(-10,20) and MIAMEX,119 now directly support the concept of grouping controls within a groupbox. This kind of grouping serves three purposes: A) It helps visually organize groups of fields; B) Since the coordinates of the controls within the group are relative to the coordinates of the groupbox itself, it allows a group to be relocated (at the source code level) by just changing the coordinates of the groupbox. C) It is essential in order to support separate groups of radio buttons (see next item below). To create a groupbox, just specify the TYPE value 33554432 (MBF'GROUPBOX). If you want a VB-style thin-frame groupbox, do NOT specify MBF'STATIC, but DO specify MBF'LFJUST, i.e.: TXT = "This is the groupbox title" TYPE = MBF'GROUPBOX + MBF'LFJUST SROW = 10 : SCOL = 20 : EROW = 18 : ECOL = 50 xcall MIAMEX,MX'WINBTN,1,GRPID,TXT,STATE,TYPE,CMD,FUNC,STATUS, & SROW,SCOL,EROW,ECOL After the groupbox is created, place controls within the groupbox by referencing the groupbox ID (GRPID in the example above) as the 20th parameter to subsequent MIAMEX,MX'WINBTN calls. Also, for the controls to be part of the group, specify coordinates relative to the groupbox. For example: TXT = "Checkbox 1" TYPE = MBF'CHKBOX + MBF'LFJUST SROW = 3 : SCOL = 4 : EROW = 3 : ECOL = 25 xcall MIAMEX,MX'WINBTN,1,ID,TXT,STATE,TYPE,CMD,CB1,STATUS, & SROW,SCOL,EROW,ECOL,-1,-1,0,0,"",TIP$,GRPID The above checkbox would appear on the 3rd line within the groupbox rather than on row 3 of the screen, because of the GRPID parameter. 5. Radio buttons are now supported by MIAMEX,119 and TAB(-10,20), using the TYPE flag 16 (MBF'RADIOBTN). Radio buttons are similar to checkboxes except that within a group, only one can be checked at a time. Checking any button automatically clears the others in that group. Using the same groupbox created in the example above (with ID GRPID), we could insert two radio buttons into it as follows: TYPE = MBF'RADIOBTN + MBF'LFJUST RB1 = 1 ! (B,1) first button checked xcall MIAMEX,MX'WINBTN,1,ID1,"Radio button #1",0,TYPE,"", & RB1,STATUS,3,4,3,25,-1,-1,0,0,"","Tooltip 1",GRPID RB2 = 0 ! second button unchecked xcall MIAMEX,MX'WINBTN,1,ID2,"Radio button #2",0,TYPE,"", & RB2,STATUS,5,4,5,25,-1,-1,0,0,"","Tooltip 2",GRPID Note that radio buttons, like checkboxes, take a 1 byte binary variable in place of the normal FUNC parameter (param #8). In a local Windows environment, you can query the state of the button directly via the associated variable. But in the ATE environment, you have to query the buttons explicitly using opcode 5. (See edit 885, item 6 below for more details on that.) Also note that if setting up buttons in using TAB(-10,20), you must specify the ASCII value of the button ("0" for unchecked or "1" for checked) in the position of the FUNC parameter, i.e.: TAB(-10,20);"1,0,Radio button #1,0,";TYPE; & ",,1,3,4,3,25,-1,-1,0,0,,Tooltip 1,";GRPID;chr(127); TAB(-10,20);"1,0,Radio button #2,0,";TYPE; & ",,0,5,4,5,25,-1,-1,0,0,,Tooltip 2,";GRPID;chr(127); 6. Fix some problems with long titles set via TAB(-10,1) and TAB(-10,2). ============================================================================ A-Shell Development Notes Version 4.9(886) (11 May 2004) ============================================================================ 1. (Windows/ATE) - A new global font scale factor is available in the Settings..Misc menu and saved in the settings (.ash) file. This scale factor is used in conjunction with the field-level scale factor available in many of the GUI-object commands (such as XCALL MIAMEX,119 and TAB(-10,20)) to give you more control, flexibility (and probably confusion) over font sizing. The global font scale factor affects all GUI font objects created within A-Shell by your application. (It does not affect fixed pitch text, nor the fonts in the A-Shell menus and dialogs.) The default scale factor of 100 (%) causes A-Shell to scale each GUI font according to the size of the window and the number of rows and columns defined. (Thus, the average GUI character size should be similar to the average fixed pitch character size.) If this seems too big or too small for a particular workstation, window size, locale, or user preference, then just adjust it up or down by a few percentage points. If you set the global font scale factor to 0, A-Shell will just use the standard GUI font size (like in the menus and dialog boxes), regardless of the Window size. (This is more like typical Windows application.) The field-level font scale factor should be used mainly just to make the font in individual GUI objects larger or smaller than the others. It is also expressed as a percentage (100% is "normal", and 0 is treated as equivalent to 100%.) So for example, if you want a particular title to use a font twice as big as the others, specify 200 for its scale factor. This will be further adjusted, up or down, based on the global scale factor. 2. (Windows/ATE) A problem with the ESC key sometimes acting twice when switching between different input modes has been fixed. (The fix, however, breaks an old workaround for an anomaly in AZERTY keyboards where the ESC key doesn't work when the CAPS lock is set. If that is an issue for you, contact us and we will look into an alternate solution.) 3. (ATE.EXE 3.0.139) A problem with ":S" and/or "DSK0:HOST.LIT" appearing in the first GUI input field after connecting has been resolved. 4. (Windows/ATE) Efficiency of certain operations that require the bidirectional exchange of data between ATE and the host server has been improved. This seems to be a factor mainly with AIX hosts. 5. (Windows/ATE) Typeahead now works reasonably well. 6. (Windows) Fix a problem in which the inner border area of the Window would sometimes not be updated, leaving thin miscolored patches at the edge of the window. 7 (Windows/ATE) A problem with MIAMEX,131 (remote file lookup) sometimes returning -2 even when ATE was present has been resolved. ============================================================================ A-Shell Development Notes Version 4.9(885)-2 (06 May 2004) ============================================================================ 1. INFLD/GUI keyboard handling refinements: A. ALT-DOWN-ARROW may now be used as a keyboard shortcut to display the calendar in the date picker. B. UP/DOWN arrow may now be used, in addition to the numeric keypad +/- keys to increment/decrement the currently selected sub-field (in the date picker). C. SHIFT-TAB now acts like up arrow when TYPE 3 is specified (returning EXITCODE 3). 2. GUI version of PCKLST now requires SBR=PCKLST_GUI in the miame.ini. Since the GUI version is not quite (yet?) perfectly compatible with the text version, it seems appropriate to require some positive action to enable it. ============================================================================ A-Shell Development Notes Version 4.9(885)-1 (06 May 2004) ============================================================================ 1. Fix some problems with the date picker in INFLD. (It wasn't being invoked for all date formats.) Also, the arrow keys were not working until the field was clicked, and ^\ was not working. ============================================================================ A-Shell Development Notes Version 4.9(885) (03 May 2004) ============================================================================ 1. INFLD now uses a date-time "picker" control for date (TYPE D) and and time (TYPE t) fields when in GUI (TYPE |G) mode. Note the following ideosyncracies of this control: A. The date picker takes up more space than the traditional MMDDYY (or DDMMYY) format of date entry, so the control is automatically elongated by a few extra columns. Although this might possibly overwrite something to the right of the control, the effect is only temporary, since as soon as you exit from the control, it is redisplayed using the normal size and format. B. If you set XMIN to 0, the date picker control will include a checkbox which the user can uncheck to indicate no date. Otherwise there is no way to enter a blank (or invalid) date. C. The left and right arrow keys will move between the sub-fields of the date or time. If you want to pass these arrow keys to INFLD (to be treated as possible field exit keys), you'll have to hold down the SHIFT or CTRL buttons while hitting the left/right arrows. D. To edit each sub-field, you can use the number keys, or the numpad +/- key. In the case of the time control, you can also increment/decrement it using the up/down buttons which will be appended to right edge of the field. 2. Controls created with MIAMEX,119 or TAB(-10,20) may now contain "tool tips". These are short messages that pop up when the mouse has remainded over the control for a second or two. The technique for defining a tooltip varies with the interface used. For MIAMEX,119 a new parameter has been added: xcall MIAMEX,MX'WINBTN,OP,BTNID,TXT,STATE,TYPE,CMD,FUNC,STATUS, SROW,SCOL,EROW,ECOL{,FGC{,BGC{,STYLE{,SCALE{,FACE{,TIP}}}}}} where TIP is a string of up to about 200 characters. (Currently we only support the single-line rectangle style, so 200 characters should be more than sufficient.) If using the TAB(-10,20) method, add the TIP argument to the end, after the FACE argument: ?TAB(-10,20);OP;",";BTNID;",";TXT;",";STATE;",";TYPE;","; & CMD;",";FUNC;",";SROW;",";SCOL;",";EROW;",";ECOL;","; & FGC;",";BGC;",";STYLE;",";SCALE;",";FACE;",";TIP;chr(127); In the case of INFLD, you can specify a tool tip in the first part of the HLPIDX parameter (i.e. prior to any mouse-click keyboard string). The tool tip portion of the HLPIDX parameter must have a leadin character ">". Some examples: HLPIDX = ">This is a tooltip" HLPIDX = ">This is a tooltip"+chr(126)+chr(27) HLPIDX = "Help Key>Tooltip"+chr(126)+chr(7)+chr(250)+"123." In the first example, HLPIDX contains only a tool tip string. In the second example, it contains both a tool tip string and a keyboard mouse click string, of chr(27) or ESC. In the third example, it contains a traditional HLPIDX string ("Help Key", intended to be used as some sort of index into a custom documentation database), followed by a tooltip ("Tooltip"), followed by a pseudo-function key mouseclick sequence. 3. The GDI printing direction //SETMAPMODE now supports DECIPOINTS (1/720 inch) as another mapping mode. The other options remain: TWIPS,LOMETRIC,HIMETRIC,LOENGLISH,HIENGLISH,TEXT 4. XCALL MIAMEX,131,LOC'REM,PATH,BYTES,MTIME,CTIME,MODE returns stats for the specified PATH, either on the local system or the remote PC via ATE. Parameters are as follows: LOC'REM (S,1) "L" for local system, "R" for remote PC PATH (S) specifies a native path or AMOS-style filespec. If native, may include embedded environment variables using the %env% syntax. Note that if LOC'REM is "R", and AMOS specification in PATH will be interpreted relative to the INI file used by ATE on the PC. Examples: BYTES (F) returns the size of the file. If PATH is not found BYTES will be set to -1. -2 indicates that you are attempting to use a remote PATH when you don't have ATE support. MTIME and CTIME (F or B,4) return the last modification time and creation time, in seconds since "the epoch" (Midnight Jan 1, 1970). This format is very convenient for comparing filetimes, but be forewarned that comparing filetimes on different machines (e.g. to decide if a file transfer/update is needed) requires that you synchronize the clocks on the machines in question! If you want to display the filetimes in a more human friendly format, use MIAMEX function 132. MODE (F or B,2+) returns the mode bits indicating the type and other attributes of the file. The most interesting bits are: 1 execute privilege (other) 2 write privilege (other) 4 read privilege (other) 8 execute (group) 16 write (group) 32 read (group) 64 execute (owner) 128 write (owner) 256 read (owner) 4096 pipe 8192 chr/special 16384 directory 32768 regular file 5. XCALL MIAMEX,132,FTIME,STRING may be used to format a numeric filetime of the type returned by MIAMEX,131 into a more friendly format. 6. XCALL MIAMEX,119 now supports a new opcode (5) to query the state of a checkbox. In a purely local Windows environment, this is not necessary since checkboxes can be coupled to a variable which is updated automatically when the box is checked. But in a telnet environment (with ATE) this is not possible (since the variable resides on a different machine from the checkbox object). Opcode 5 can be used instead to query the state of checkbox, and works both in local Windows environments and with ATE. The state is returned in the STATUS parameter as follows: 0 Not checked 1 Checked 2 Indeterminate (3 state checkboxes) Negative values are errors (see the MIAMEX,119 documentation for a complete list of error codes.) 7. (ERS) TDIR/NOSORT option no longer compresses the array. ============================================================================ A-Shell Development Notes Version 4.9(884)-1 (01 May 2004) ============================================================================ 1. XCALL MIAMEX,130,STARTCMD$ {,ASHFILE$} returns the startup command (i.e. the initial command that is executed on startup when A-Shell gets to the dot prompt) into STARTCMD$. If the ASHFILE$ argument is specified, it returns the name of the settings (.ash) file that was specified on the ashw32 command line (-o parameter). (The settings file only applies to A-Shell/Windows; it will always be null for UNIX.) ============================================================================ A-Shell Development Notes Version 4.9(884) (28 Apr 2004) ============================================================================ 1. (Windows & ATE) A new control type has been added to MIAMEX,119 and TAB(-10,20) to implement progress bars. The control is similar to a static text control, except that you must specify the MBF'PROGRESS flag instead of MBF'STATIC, and currently the colors are ignored. The control must be created using XCALL MIAMEX,119 in order to retrieve the ID, so that it can be subsequently updated. For example: xcall MIAMEX,MX'WINBTN,1,ID,TXT,STATE,MBF'PROGRESS, & "","",STATUS,SROW,SCOL,EROW,ECOL Initially the progress bar will be empty. To update it, you can use MIAMEX,119 or TAB(-10,20) with OPCODE 2 (change), and specifying the ID returned from the above call, placing a string representation of the percent complete in the TXT parameter, and specifying the MBST'CHANGE flag in the STATE parameter, e.g.: PCT = 15 ! percentage complete (round to integer) xcall MIAMEX,MX'WINBTN,2,ID,STR(PCT),MBST'CHANGE,MBF'PROGRESS, & "","",STATUS,SROW,SCOL,EROW,ECOL The above call would move the progress bar over to the position representing 15% completion. If you are running from a UNIX server with ATE on the client and want to optimize the call, you can use TAB(-10,20) as follows: ?tab(-10,20);"2,";ID;",";str(PCT);",";MBST'CHANGE;",";MBF'PROGRESS; & ",,,0,0,0,0";chr(27); Note that the coordinates are not needed as long as the ID is correct. This method is faster than the MIAMEX call over ATE connections since it doesn't have to wait for the return of any parameters from the client. (But in any case you probably don't want to update the progress bar more often than necessary to convey the sense of action. For example, in a report of 100,000 recods, it probably wouldn't make that much sense to update the progress bar for every single record.) When the process is complete, you can delete the progress bar using OPCODE 3 like any other control. 2. A sample SBX routine, PROGRS.SBX (within source) has been released as both a sample to illustrate the use of the progress bar, and also as a starting point for creating more complex progress "dialogs". As it is, the subroutine provides the option to embed the progress bar within a dialog panel, with a caption and optional cancel button. See the notes in the PROGRS.BAS and TSTPRG.BAS programs for more information on the subroutine's parameters. NOTE that if you modify the subroutine, you should rename it to avoid having it accidentally overwritten by an update. Also, if anyone cares to make some general purpose enhancements to the routine and donate them back to the A-Shell community, please feel free to do so. 3. PCKLST.SBR now supports another new flag, 2048, which causes the text version to use INMEMO's "fast menu" mode. In this mode, it is not necessary to hit ENTER to complete a selection; instead, you just need to enter a sufficient number of characters to uniquely identify a selection. 4. The operation of the MSBOXX opcode BOX'WIN (to create a GUI-style raised panel box) has been improved to no longer require that the border option be selected, and more importantly, to work over ATE. If selected in a non-GUI environment, the option is just ignored (so you should combine it with whatever other box options you would otherwise use, including BOX'SVA, BOX'RSA, BOX'ERA, etc.) Note that one of the advantages of BOX'WIN for pop-up boxes is that being a true control, it can overlay other controls, and other controls can overlay it, without the complications that arise when trying to save and restore text boxes in a mixed GUI environment. However, if you do use BOX'WIN, you should only use GUI-style static text and other controls to write within the box. The PROGRS.SBX routine described above uses BOX'WIN. See the notes under edit 863 for more information on MSBOXX and BOX'WIN. 5. TAB(-10,20) no longer rejects controls that have empty text fields. This was thought to be to a useful optimization, but turns out to be more of a pain than anything else, due to the number of controls now that may not need any text to still be valid (like the progress bar.) Also, when updating a control, the coordinates can now all be zero (provided the ID is correct). ============================================================================ A-Shell Development Notes Version 4.9(883)-4 (27 Apr 2004) ============================================================================ 1. (ATE) Various improvements to the FTP routine. The FTPDLX.LOG file is now considerably more detailed than before. You can also copy entire directories in a single command by setting the filename to *. For example, ! copy all files in /vm/miame/dsk0/011222 to c:\temp.... ? chr(27);chr(1);chr(127);"0"; & "/vm/miame/dsk0/001222;chr(0);"*";chr(0); & "c:\temp";chr(0); ! copy all files in c:\temp to /vm/miame/dsk0/001222 ? chr(27);chr(1);chr(127);"1"; & "/vm/miame/dsk0/001222;chr(0);chr(0); & "c:\temp\*";chr(0); 2. Various minor fixes and enhancments to the INFLD GUI version: TYPE S (password) was not working properly. Display colors DFCLR and DBCLR were not being selected for display. TYPE |R now disables the normal redisplay of the field on exit (useful when you are doing your own redisplay). 3. TRACE=GUI (or SET TRACE GUI ON in SET.LIT 1.2(137) or higher) now logs all TAB(-10,x) commands to the ashlog.log file. ============================================================================ A-Shell Development Notes Version 4.9(883)-3 (25 Apr 2004) ============================================================================ 1. (AIX) Fix a corrupted link library with which causing various segementation faults, particularly in processing MMAPLIST and printing. 2. Passing -1 for the background color argument in TAB(-10,20) and related control-creation operations now works just as it does for the foreground color, i.e. the -1 gets converted to the current background color. Previously -1 for background color was being intepreted as the "default" background color for that type of control. 3. Fix a problem with the ESC key exit from the GUI version of INFLD acting as 2 escapes. 4. Clicking in the middle of an INFLD (GUI version) field now clears the destructive carriage return flag (just as if you had just editing keystrokes to accomplish the same thing.) ============================================================================ A-Shell Development Notes Version 4.9(883)-2 (22 Apr 2004) ============================================================================ 1. (ATE) FTP routine now creates a log file, FTPDLX.LOG, in the dsk0\001004 subdirectory under the ATE installation directory, which might be useful in debugging transfer problems. 2. (ATE) Selecting Disconnect from the file menu now works in situations where it didn't work before (like when you were within a local GUI control.) 3. (ATE) Fix various bugs in the remote INFLD GUI control, including the ^C problem mentioned previously, plus a problem with ESC acting strange, and fields being returned with a trailing or leading CR (causing all kinds of havoc in field validation routines.) ============================================================================ A-Shell Development Notes Version 4.9(883)-1 (22 Apr 2004) ============================================================================ 1. (PSHELL) AUXLOC printing will now wait until the job has a foreground context. (Previously such printing would just spill out into the bit bucket.) ============================================================================ A-Shell Development Notes Version 4.9(883) (21 Apr 2004) ============================================================================ 1. (ATE) INFLD on a server with ATE on the client now executes locally on the client when TYPE |G specified. There are some issues yet to be worked out, so don't expect to put this into production. (But do send us bug reports.) Requires edit 883 or higher on both server and client. Three known problems are: A) The cursor will be turned off, so you may need to turn it back on manually when you exit the program. B) ^C generally doesn't work, unless you use TYPE V. (To overcome this, we need to implement a means for ATE and the server to synchronize their SET CTRLC/NOCTRLC settings. C) The control is noticeably slower on some platforms to bring up than the standard INFLD. It does not appear to be much of an issue with Linux. 2. HLPIDX syntax (see item 2 under edit 881 below) has been changed to use chr(126) as the leadin instead of chr(127). WARNING: YOU MUST CORRECT ANY EXISTING PROGRAMS USING THIS TECHNIQUE OR THEY WON'T WORK PROPERLY UNDER THIS AND LATER RELEASES. The choice of chr(127) was a bad one because it conflicts with the remote/ATE implementation of INFLD (which works through the TAB(-10,x) interface and thus uses chr(127) as a terminator. Hopefully few programs will be affected. 3. (ATE) A problem with intermittant function key operation due to timing issues (mainly seen under AIX) has been resolved by forcing all the bytes of a function key sequence to travel in the same packet. 4. TAB(-10,20) now supports an abbreviated syntax, useful for those who want to convert a lot of PRINT statements to use proportional fonts but who still want to be able compile their programs under AMOS. (The TAB(-10,20) won't work unless a special terminal driver is created for AMOS, but at least it won't interfere with compilation, so as long as you have the appropriate IF THEN logic to avoid executing them, you can have one source for all platforms. The abbreviated syntax is: TAB(-10,20);STRING;chr(127); or TAB(-10,20);STRING;",";JUSTIFY'CODE;chr(127); In the first case, the statement acts just like TPRINT, i.e. it displays STRING using the proportional GUI font, left justified, using the current color scheme. The second version allows you to specify justification codes, either using the MBF'LEFTJUST and MBF'RIGHTJUST codes (from ashell.bsi), or using the following simplified codes: "TL" - Text, left justified "TC" - Text, center justified "TR" - Text, right justified "DL" - Data (MBF'SUNKEN), left justified "DC" - Data, center justified "DR" - Data, right justified Note that if you use the MBF'xxx codes, you can actually specify others besides justification, such as MBF'STATIC and MBF'SUNKEN, but your capabilities are limited by the lack of any other parameters. 5. PCKLST.SBR FLAGS argument now supports a new bit, 1024, which causes it to time out in 200 seconds. (Currently this only works in the non-GUI version of PCKLST but will be added to the GUI version later.) 6. (ATE) The installation was not creating a DSK0:[1,7], which was leading to a cryptic error during ATE printing about "ATE#.PQI not found". 7. (ATE) The GDI/Passthrough printer setting was not being saved. ============================================================================ A-Shell Development Notes Version 4.9(882) (18 Apr 2004) ============================================================================ 1. In INFLD, when INXCTL is a one byte string and the use transmits the new pseudo function key sequence (see item 2 under edit 881 below), INXCTL will return 250. (This allows these sequences to be distinguished from the normal IFX function sequences, which set INXCTL to 7.) This distinction is useful when the new pseudo-funkey sequences are used to encode mouse clicks, thus avoiding the need to start the mouse pseudo-funkey codes at some offset to avoid confusion over F-key generated function codes. 2. The INFLD edit control (|G) now uses the TYPE sequence |K to determine whether to adopt Windows-style or AMOS-style conventions whenever the two are in conflict. For example, without |K, the initial input mode is overwrite; with |K it is insert. (You can now use the INS key to toggle between insert and overwrite mode.) Without |K, the HOME key is considered a field exit key (returning EXITCODE 9 if TYPE 9 is specified); with |K, HOME just moves the cursor to the start of the field (but you can use CTRL-HOME to get the exitcode effect. 3. A bug introduced in 4.9, in which a RESUME from a Basic error during a file read or write operation was causing an invalid syntax code or unsupported function error. The error was caused by the RESUME location being offset by one byte. 4. DPRINT now applies "intelligent justfication" logic to decide whether the field should be right, left or center justified. If both the first and last character of a string expression are spaces, then it center justifies. If the first character is a space or monetary symbol and the last character is a non-space, then it right justifies. Otherwise it left justifies. This should result in the desired alignment for data fields in most cases, although you may have to adjust any fields in which you were intentionally counting on the fixed width of spaces. In the proportional font world, you cannot count on spaces for positioning of text - always use explicit TAB(x,y) statements for each output token to avoid confusion. 5. (ATE 3.0.135) Function key translations were not working right with AIX. Also, ATE no longer displays "[DEMO]" on the title bar during the initial grace period while waiting for the server based license to be issued. 6. ATE.EXE now supports the ability to specify its initialization file on the command line, using the same syntax as for A-Shell (-i inifile). If not specified, the default is still ATE.INI, either in the same directory where ATE is launched from or from the directory above it. However, if that is not found, then it will try MIAME.INI in the same locations. (And the installer will not create ATE.INI if MIAME.INI already exists, thus by default ATE will share the same initialization file as an existing installation of A-Shell/Windows.) If the -i inifile switch is specified and doesn't contain a directory, the same directory search logic is used as for the default ATE.INI. 7. ASHW32 edit number is now appended to the ATE version number in its About box. (This is appropriate since other than the configuration dialogs, ATE is mainly all contained in ashw32.exe.) ============================================================================ A-Shell Development Notes Version 4.9(881)-1 (15 Apr 2004) ============================================================================ 1. SET AUTOTPRINT was interfering with the operation of TAB(-10,x) and status line-related TAB commands. 2. (ATE) About box now appends the underlying ashw32 edit number to the ATE version number. ============================================================================ A-Shell Development Notes Version 4.9(881) (14 Apr 2004) ============================================================================ 1. XCALL MIAMEX,129,OP,GUIFLAGS can now be used to query or set certain GUI-related flags which make it easier to for multi-environment developers to sort out which GUI-related functions are applicable to the current environment. As with other MIAMEX get/set functions, set OP to 0 to get the current flags into the passed parameter, and to 1 to set the flags from the passed parameter. The flags are as follows: ASHELL.BSI value meaning ---------- ----- --------------------------------------- AGF'LWG 1 Local Windows w/ GUI (e.g. PCTDVG) AGF'LWN 2 Local Windows w/o GUI (e.g. PCTDV) AGF'ATE 4 Running ATE on client AGF'RWN 8 Remote windows (ATS) AGF'TNT 16 Telnet AGF'ASH 32 A-Shell AGF'LOCWIN 3 Local Windows (AGF'LWN or AGF'LWG) AGF'ANYWIN 11 Any windows platform ('LWN or 'LWG or 'RWN) AGF'GUIEXT 5 GUI extensions avail (AGF'LWG or AGF'ATE) Here are some example of using this information. All of them would start with retrieving the current flags as follows: xcall MIAMEX,129,0,GUIFLAGS ! retrieve GUI flags Before using a TAB(-10,x) function, you should check for either AGF'LWG or AGF'ATE. Since these are combined in AGF'GUIEXT, we can simply check it as follows: if (GUIFLAGS and AGF'GUIEXT) then ?TAB(-10,x);..... If you wanted to display a file for the user, either using NOTEPAD (if applicable) or else EZTYP (if not), you might use the following logic: if (GUIFLAGS and AGF'LOCWIN) then & XCALL HOSTEX,"NOTEPAD "+F$ & else if (((GUIFLAGS and AGF'ATE)#0) and & ((GUIFLAGS and AGF'TNT)#0)) then & call XFER'TO'PC :& call LAUNCH'NOTEPAD'ON'CLIENT & else & xcall EZTYP,F$ In the above example, if running Windows locally, we can just launch NOTEPAD using XCALL HOSTEX. Otherwise, if running ATE on the client over telnet, we could transfer the file to the PC and then launch NOTEPAD, both of which could be done via TAB(-10,x) commands. Otherwise, we could just use EZTYP on the server. (You might also want to test for other telnet emulators, such as ZTERM, which are capable of doing file transfers and launching commands on the client, but that exceeds the scope of this example.) Note that when testing multiple AND conditions, you need the extra set of parentheses and the #0 test as shown above to get the desired effect. Otherwise the confusion between the logical and arithmetic AND in Basic will cause the test to fail. If you merely wanted to test whether you were running under A-Shell Windows or A-Shell/UNIX (or some other platform, presumably AMOS), you could do this: if (GUIFLAGS and AGF_ASH) then ! running A-Shell if (GUIFLAGS and AGF'ANYWIN) ! any Windows platform ? "A-Shell Windows" else ? "A-Shell UNIX" endif else ? "Non A-Shell (AMOS?)" endif 2. INFLD supports a new mechanism for encoding pseudo-function keys which works better in heterogeneous environments involving ATE or the Windows control implementation of INFLD. The new scheme also allows for an unlimited range of virtual function keys (whereas the previous scheme only really supported F1 thru F127.) The new encoding format is: CHR(7) + CHR(250) + FNUM$ + "." where FNUM$ is the string representation of the function key number (e.g. "1" for F1, "793" for F793). Since the number has a variable length, a terminator character is required. In the above example we use a period, but any non-numeric character will work. As an example, if you want to set up an INFLD field so that when you click on it, it acts like a virtual F122 (i.e. returning EXITCODE -122), then you could set the HLPIDX string as follows: HLPIDX = chr(127)+chr(7)+chr(250)+"122." *WARNING* AS OF EDIT 883, THIS SYNTAX AS BEEN CHANGED TO: HLPIDX = chr(126)+chr(7)+chr(250)+"122." Note that this takes advantage of a new INFLD feature relating to HLPIDX (which see below in this document). The leading CHR(127) is needed to tell INFLD that what follows is a mouseclick string. 3. (WINDOWS) The F10 and HOME keys were not working properly in the edit-control implementation of INFLD. 4. (WINDOWS/ATE) A problem with the settings file (default.ash) format getting corrupted by a blank line, leading to anomolies in saving and restoring settings, as been cleared up. (You may need to re-save your settings though to clean up existing settings files.) 5. (UNIX/ATE) XCALL MIAMEX,119 (create buttons) is now supported on UNIX platforms when ATE is on the client. It does this by converting the MIAMEX,119 call to the equivalent TAB(-10,20) statement, and then using the keyboard interface to retrieve the status and button ID parameters back from ATE. ============================================================================ A-Shell Development Notes Version 4.9(880) (13 Apr 2004) ============================================================================ 1. (Windows/ATE) Implement more ZTERM ESC sequences: LABEL WINDOW ?CHR(27);CHR(13);TITLE$;CHR(0); SET WINDOW STATE ?CHR(27);CHR(25);CMD$ !(CMD$ is M, X, R, or N) FLASH WINDOW ?CHR(27);CHR(16);"1" ! start flashing ?CHR(27);CHR(16);"0" ! stop flashing SET FTP LOGIN NAME/PASSWORD ?CHR(27);CHR(29);NAME$;CHR(0);PW$;CHR(0); 2. (Windows/ATE) ZTERM ESC sequences can now use chr(128) in place of chr(0) for the delimiter bytes. 3. (Windows/ATE) New TAB(-10,x) sequences. (Note that these may be used in place of the corresponding ZTERM ESC sequences when running under UNIX with ATE on the client, as well as under standard A-Shell/Windows.) Set window State: ?TAB(-10,27);STATE$;CHR(127); STATE$ may be M, X, R, or N (as in the ZTERM ESC sequence above, or "1" thru "10" (as in MIAMEX,77) Flash Window: ?TAB(-10,28);"0";chr(127); ! turn flashing off ?TAB(-10,28);"1";chr(127); ! turn flashing on Set FTP name / password: ?TAB(-10,29);NAME$;chr(126);PASSWORD$;chr(127); 4. (UNIX) Operations which scan directories (such as DIR and PPN) no longer abort when hitting a directory entry which causes an error other than end-of-directory (such as protection violation). This should eliminate mysterious and frustrating situations, caused by an inaccessible directory entry, where you can log to a PPN but not see it in the directory. Note that if you suspect such a situation, you can use SET TRACE SYSERR ON to display the offending entry and the corresponding error. Such errors will also be logged to the ashlog.log file. 5. (WINDOWS) Report directory scanning errors as described above, both to the screen (if SET TRACE SYSERR ON) and to the ashlog file. 6. (ATE) FTP transfers now pop up a "transfer in progress" box. There is no current option to cancel the transfer and you probably will rarely see anything beyond a flicker, except when transferring very large files. Messages corresponding to errors occuring during transfer are now displayed. =========================================================================== A-Shell Development Notes Version 4.9(879) (12 Apr 2004) ============================================================================ 1. (Windows/ATE) A new (and rather cryptic) option has been added to the Settings..Misc menu to provide an option as to how the leading area (space between the rows, if any) is to be filled. Your choices are to select a fixed background color number, to opt for "auto" (specified as color -1) or "passive" (color -2). The fixed color is the simplest and will work nicely in applications which stick with a single background color (like a typical Windows app.) The main problem with this option is that if you pop up a colored box to display a message, the box gaps between the rows will show through. The "auto" option fixes this problem by having A-Shell try to match the leading area to the row immediately above it. The main problem which this option occurs when you use a different color background for INFLD edits than for the rest of the screen, and you are using a GUI driver over ATE (in which case INFLD generates a superficial sunken effect around the field while you are editing it.) The problem is that the "auto" option for the leading fill color will cause the field to bleed into the leading area. This problem will go away when the true Windows control version of INFLD is available for ATE, but in the meantime, you may have to revert to one of the other leading fill options as a workaround. The "passive" option tells A-Shell to not worry about refilling the leading area whenever the row above it is updated. This solves the problem with pseudo-GUI INFLD edits described above, but does not solve the problem with the gaps in rectangles using a different colored background than the rest of the screen. Note that the leading area will still get filled by certain screen clearing operations, such as TAB(-1,0) and TAB(-1,10); it just won't be updated by a local change in the background color of the adjacent row. 2. (ATE) LICENS.LIT 2.0(106) (running on the server, with the /ATESRV switch) now interfaces better with ATE, causing the correct version and copyright message to appear on the ATE about box. 3. (ATE) A problem with "[DEMO]" appearing on an updated title bar even after licensing ATE via LICENS/ATESRV has been fixed. 4. (ATE) If there is a "fax" printer available on the local machine, ATE will add "<A-Shell FAX:> to the list of available printers, allowing you to use the A-Shell/Windows FAX: driver from the server. See the documentation on A-Shell/FAX in the Development Guide for more details on how to format documents for automatic faxing (without a user interface dialog). 5. (WINDOWS) A-Shell/Windows now determines its IP address on startup. In most cases, this will be invisible and painless, but if you have a software firewall (such as Zone Alarm) and/or a disfunctional internal DNS, the act of trying to determine the IP address may either trigger a hook in your firewall and/or cause a delay in launching an A-Shell session. A-Shell will automatically log the length of such a delay to the ashlog.log file if it exceeds 0.75 seconds, so if you notice a delay in launching A-Shell, you may want to check the log to confirm the source of the problem. (If we get too many complaints about this, we may make it yet another configurable option, but since the need to access DNS lookups is nearly ubiqitous now, we are optimistic that this will not be a problem.) 6. XCALL MIAMEX,128,IP$ returns your IP address. 7. Clean up and improve a number of error messages relating to socket problems (mainly for ATS mode). Nearly all errors now should be logged to the ashlog.log file (and NOT displayed on the server)! 8. (ATE) Now emulates some of the more common ZTERM ESC sequences, shown below. Note that most of these features are also available in A-Shell/Windows via a TAB(-10,x) sequence or an XCALL. The advantage of the TAB(-10,x) or XCALL method is that the same code will work under A-Shell/Windows and A-Shell/UNIX with ATE on the client. But the advantage of the ZTERM ESC sequences is that they would work on any server platform (i.e. one that you telnet to) provided the client is ZTERM or ATE. But in the latter case, you should test to make sure you aren't running locally on A-Shell/windows, where the ESC sequences would not make much sense. EXECUTE OR PRINT WINDOWS FILE (aka "Shell Execute"): ?CHR(27) CHR(12);OP$;FSPEC$;CHR(0); (OP$ is "O" to "open" or "P" to "print) INPUT A ! CR for ok, ^C for error EXECUTE WINDOWS COMMAND (aka "Win Exec"): ?CHR(27);CHR(22);CMD$;CHR(0); INPUT A ! CR for ok, ^C for error GET CLIENT IP ADDRESS: ?CHR(27);CHR(15); INPUT "",IP'ADDR$ FTP FILE TRANSFER: ?CHR(27);CHR(1);CHR(127);DIR$;HOSTDIR$;CHR(0); & HOSTFILE$;CHR(0);PCFILE$;CHR(0); INPUT A Note: this uses the login name/password stored in the ATE configuration for the ftp name/password. The function to temporarily set a new name/password has not yet been implemented. GET ZTERM/ATE ID: ?CHR(27);"?"; XCALL GET,BUFFER,0,2,RCVD,1000 IF RCVD<2 goto NOT'ATE'ZTERM XCALL TINKEY,A$ ! extra char? ?CHR(27);"?"; XCALL GET,BUFFER,0,3,RCVD,1000 IF RCVD<2 goto NOT'ATE'ZTERM XCALL TINKEY,A$ ! extra char? ?CHR(27);"?"; XCALL GET,BUFFER,0,2,RCVD,1000 IF RCVD<2 or BUFFER#"ZT" goto NOT'ATE'ZTERM ?CHR(27);"?"; XCALL GET,BUFFER,0,14,RCVD,200 ? "VERSION=";BUFFER Note: most AMxxx and WYxxx terminals will respond to ESC ? with 2 bytes indicating the cursor position (row and col each offset by 32). However, to be more robust, you should allow for the possibility that the terminal will not respond at all to ESC ?, or that it will give you an extra byte (possibly a trailing CR or a leading ^Y for columns > 96). The above code uses XCALL GET with the timeout option to input up to 2 chars, aborting after 1000 ms. It then uses TINKEY to grab any extra character without waiting. This sequence is repeated 4 times. After the 3rd time, ATE will respond with "ZT" (like ZTERM does). After the 4th time, it will return you "AV" following by the version string. (This is where you can distinguish ATE from ZTERM.) 9. EZVUE no longer escapes entirely when operator hits ESC while the help display is visible. Also two additions to the list of EZSPL EXTOPT values. The complete set of options is now: EXTOPT=### Where ## can be a combination of the following: 4 Disable screen save/restore 32 Allow exit from EZVUE with left arrow 64 Allow exit from EZVUE with TAB 128 Allow exit from EZVUE with F1-F16 256 Don't ask questions on PRINT (see below) 512 HOME when in HOME position prints. Note: EXTOPT 256 is mainly useful in conjunction with the SBR=EZPRTX option in the MIAME.INI file, which causes EZVUE to XCALL EZPRTX instead of xcall SPOOL when printing from the viewer. Since you can customize EZPRTX.SBX, you may not want EZVUE to ask about starting and ending pages, or even about the printer choices. EXTOPT 512 is a bit obscure, but apparently there are some people who feel that hitting the HOME key right after launching the EZVUE viewer should act like the print command. Note that if you scroll down first, then the HOME key will take you to the home position (top of file). 10.various improvements and fixes to VUE: A. A bug in setting the file updated flag related to centering the screen and centering a line was causing VUE to warn you that the file had been updated (when it hadn't) or vice versa in some cases. B. POP now restores the original screen position. Previously it positioned the window so that the popped line was the fifth line. C. Implement primitive 'bookmarks': these are similar to the multiple push/pop capability except that there is no concept of a hierarchy or stack. ^SM creates a bookmark for the current line. ^SN jumps to the next bookmark. ^sC clears the bookmark from the current line. The feature is handy when working on several sections in a large file and you want to jump between them. D. Implement the append macro feature (^_A). E. ^_F formats the current paragraph. (Same as >FORMAT). F. (UNIX, standalone mode) A new ini.vue feature, BAKDIR=<nativedirectory>, causes the .BAK file to be put in the specified directory, rather than in current directory. This can help avoid confusion in cases where .BAK files might not be recognized properly by other people or programs. G. (standalone) The display of the file path on the status line is now more intelligent, expanding it out with the current dir info if not specified on the command line, and trimming the first part of it if too long. This is particularly helpful when simultaneously editing multiple copies of a file in different directories. ============================================================================ A-Shell Development Notes Version 4.9(878) (02 Apr 2004) ============================================================================ 1. A new method of dealing with floating point rounding difficulties has been introduced. See the ash48patchnotes.txt notes for edit 844 for more details. 2. XCALL MIAMEX,127,OP,FACTOR (OP=0 to get, 1 to set) allows you to query and/or set the new variable rounding factor. Basically the factor is set to the level of precision you would like. 1 means round all variables to the nearest integer. .01 would be to the nearest one hundredth. 0 disables the feature. Note that the setting persists across programs. See the ash48patchnotes.txt for more details. ============================================================================ A-Shell Development Notes Version 4.9(877) (01 Apr 2004) ============================================================================ 1. (Windows) INFLD TYPE |G now invokes a Windows-style edit control implementation of INFLD. Most of the standard INFLD features continue to work, although from the user's standpoint, it looks and acts like a typical Windows edit control. You can add this feature globally by adding |G to your SBR=INFDEF: entry in the miame.ini file. Note that there are some subtle differences between the edit control implementation of INFLD and the standard text implementation. One of the most noticeable is that since single character edit controls do not work very well, we automatically expand the size of any single character field to a width of two. We don't allow two characters to be entered, but the extra space might pose a slight screen layout problem in extremely crowded screens. 2. Many of the INFLD error messages now appear as either message boxes or at least using proportional fonts. (Note, this also applies to UNIX as long as the client is ATE.) The various timer-related displays have been simplified down to a simple display of the time remaining. Clicking on the clock will reset it to 10 minutes (provided suspend has not been disallowed.) 3. The HLPIDX parameter of INFLD may now contain the keyboard string to be sent if the field is clicked on when it is inactive. The format is HLPIDX = <optional other help string> + chr(126) + <kbd click str>. This only applies when TYPE |G is specified and TYPE = (disable field redisplay) is not specified. The idea here is that since INFLD will automatically turn the edit field into a static text display control on exit, if you want to implement the ability to click on a field to edit it, then you can specify the appropriate keyboard command string when you call the field to be edited. *NOTE: PRIOR TO EDIT 883, THE LEADIN WAS CHR(127); FROM EDIT 883 ON, THE LEADIN IS CHR(126)* 4. The INXCTL parameter to INFLD may now be specified as a one byte string or binary, in which case it returns the actual character used to exit the field. This is more useful to many people than the rather limited information provided by the traditional INXCTL. 5. PFK translations no longer deactivate all IFX translations. Instead, the PFK and IFX translation tables are additive. The PFK takes precedence, but if a key is not defined to the PFK, then the IFX translation will still be active. (The idea here is to allow you to add your own function key translation customizations or extensions, but still be able to take advantage of any updates to the IFX tables for those keys which you have not customized. 6. OPTIONS=AUTOTPRINT may be specified in the miame.ini to cause all PRINT statements in RUN programs to be treated as TPRINT. In other words, they will generate static text, proportional font controls. This can be useful for quickly establishing how well your application would work with all proportional fonts. 7. SET.LIT 1.2(136) allows you to set and unset the AUTOTPRINT option without having to modify the miame.ini and relaunch A-Shell. ============================================================================ A-Shell Development Notes Version 4.9(876) (29 Mar 2004) ============================================================================ 1. (UNIX) Support ashell command line switch -nfs to be used when multiple systems are sharing the jobtbl.sys file over NFS or a similar network filesharing mechanism. Switch is needed to avoid one system from thinking processes that are running on another system are actually phantoms, which can lead to "job zapped" problems. 2. (UNIX) Background jobs now use 127.0.0.1 as their IP address in the job table. (This helps eliminate confusion in applications that use the IP address to identify real workstations.) 3. A problem with certain directory scanning operations not working properly when SET HEX is on has been fixed. Problem was introduced between 4.8(842) and 4.8(842)-8. 4. Fix another bug in FPROUND which was causing numbers formatted with very long masks to sometimes be off by one in the least significant digit. 5. BASORT was not obeying the MALLOCLIMIT for sequential sorts, which could have led to thrashing conditions when trying to sort very large files. 6. LICENS.LIT 2.0(105) no longer overwrites the version of the local ashw32 when licensing ATE. 7. (WINDOWS/ATE) TELNET.LIT 1.0(110) now automatically loads LIB:<tdv>.PFK if present, allowing it to emulate the function key sequences for the desired emulation. 8. (WINDOWS) The font in GUI controls, as created via MIAMEX,119 or TAB(-10,20) or TPRINT or DPRINT), is now autosizing just like the the regular fixed pitch fonts. 9. (WINDOWS) GUI controls (static text, buttons, etc.) may now specify font attributes, via three new optional parameters to the MIAMEX,119 and TAB(-10,20) functions. The new syntax for both calls: TAB(-10,20);OP;",";BTNID;",";TXT;",";STATE;",";TYPE;","; & CMD;",";FUNC;",";SROW;",";SCOL;",";EROW;",";ECOL;","; & FGC;",";BGC;",";STYLE;",";SCALE;",";FACE;chr(127); xcall MIAMEX,MX'WINBTN,OP,BTNID,TXT,STATE,TYPE,CMD,FUNC,STATUS, SROW,SCOL,EROW,ECOL{,FGC{,BGC{,STYLE{,SCALE{,FACE}}}}} Note that the last five parameters are optional in either case. STYLE (numeric) should be set to the sum of the desired options from: 0 = normal (upright) 1 = italic 2 = underline 4 = strikeout SCALE (numeric) should be set the % of normal size desired. Normal size is computed based on the window size and number of rows and cols. (Specify 0 or 100 for normal size.) If you specify 200, the font will be twice as big as "normal"; 50 would indicate a font that is half as big as "normal". FACE (string) may be set to a specific font name. If not specified, the default GUI font for the local Windows version and configuration is used, unless you have specified a font in the new Proportional Font dialog (see next item). 10.(Windows) The Font dialog on the Settings menu has been split into two versions - one for the Fixed pitch fonts and one for the proportional fonts used in controls. Note that in most cases, the best font choice will be to leave it blank, which results in the default GUI font being selected. Also note that the size and style do not matter on this font dialog, since the size is auto adjusted and the style is determined by the STYLE parameter of the MIAMEX,119 or TAB(-10,20) commands (see above). The only point in setting the style and size in the dialog would be to enable the font preview capability in the dialog. 11.(UNIX) The backup (.BAK) created by VUE now preserves the last modification time and date from the original file (before it was edited.) 12.(Windows) You can now create a Windows-style "group box" by specifying the MBF'FRAME option without the MBF'STATIC option when creating the object using TAB(-10,20) or MIAMEX,119. A group box consists of a rectangular frame with a title embedded in the upper border and used to group related controls together. You'll probably want to include the MBF'LFJUST as well so that the text appears in the upper left corner of the group box, as is typical with Windows dialogs. Note that you can place other controls within the group box, but do not try to output normal (non-control) text within it. ============================================================================ A-Shell Development Notes Version 4.9(875)-3 (14 Mar 2004) ============================================================================ 1. (Windows) The background color parameter in MIAMEX,119 or TAB(-10,20) for static text controls now functions more like other color-related funtions. Previously, the background color parameter was mostly ignored, and you always got the "system" (aka dialog/button) color for normal text controls and the "window" color for those with the MBF'SUNKEN option. This remains true for DPRINT, and whenever you specify -1 as the background color in MIAMEX,119 or TAB(-10,20) commands. But TPRINT will now display text controls using the current background color (as determined by the last TAB(-3,x) command). And MIAMEX,119 and TAB(-10,20) allow you to specify any of the A-Shell background palette colors 0-7. 2. (Windows) PCKLST.SBR now uses the TBCLR field from the MMOCLR parameter to determine the background color of the listbox. 3. INFLD TYPE i: now silences the bevelling so that the field remains totally invisible (no cursor, no indication of field position or size, no echoing of characters). ============================================================================ A-Shell Development Notes Version 4.9(875)-1 (12 Mar 2004) ============================================================================ 1. (Windows) Fix a problem in which static text controls, particularly those created by INFLD, would only partially display until the Window was refreshed. 2. (Windows) Some of the special key exits from PCKLST.SBR were not working in the Windows version ============================================================================ A-Shell Development Notes Version 4.9(875) (11 Mar 2004) ============================================================================ 1. Add OPTIONS=GUI_SPC_IND to help overcome a common problem with alignment when converting to proportional font controls. The problem can be illustrated as follows: TPRINT TAB(10,5);" 1. Name:" TPRINT TAB(11,5);" Addr:" TPRINT TAB(12,5);"12. ";CITY$ TPRINT TAB(13,10);PHONE$ With fixed pitch text, "Name", "Addr", CITY$, and PHONE$ will all start in column 10 and thus be vertically aligned. But with proportional fonts (which TPRINT will use), all but the last two will start in different columns, due to the differing amount of physical space used up by the spaces and numbers preceding them. You could fix this problem by make sure you never use spaces to position text. For example, here are two solutions: TPRINT TAB(10,5);" 1. ";TAB(10,10);"Name:" TPRINT TAB(11,10);"Addr:" TPRINT TAB(12,5);"12. ";TAB(12,10);CITY$ TPRINT TAB(13,10);PHONE$ or TPRINT TAB(10,5);" 1. ";"Name:" TPRINT TAB(11,5);" ";"Addr:" TPRINT TAB(12,5);"12. ";CITY$ TPRINT TAB(13,5);" ";PHONE$ The second solution works, even without explicit positioning of the second field on each line, because TPRINT will automatically start each new output in the position where it would have started had we been using regular fixed pitch fonts. (Each argument to the TPRINT statement is treated as a new print object.) But if going through all your programs to clean this kind of problem up is too much work, try setting OPTIONS=GUI_SPC_IND in the MIAME.INI. This causes any string which contains leading spaces, or a combination of leading spaces, numeric, digits, a period, and one or more spaces, as if it was a separate print object from the rest of the string. This will generally result in the kind of alignment you were probably hoping for. 2. The MIAMEX functions to retrieve and set OPTIONS values have been enhanced to support a second OPTIONS parameter (since we have run out of space to fit all the OPTIONS into one variable.) The new syntax: Retrieve options: XCALL MIAMEX,59, OPTIONS {,OPTIONS2} Set options: XCALL MIAMEX,60, OPTIONS {,OPTIONS2} Note that when setting OPTIONS2 values, you can't avoid also setting the OPTIONS values. So you should always first retrieve the current options with MIAMEX,59, then set or clear the desired flags in the OPTIONS and OPTIONS2 variables, then use them to update the options in MIAMEX,60. The current options flags are defined in ASHELL.BSI as GOP'xxxxx and GOP2'xxxxx. You can use this technique to turn the GUI_SPC_IND option on and off within a program: MAP1 GOP2'GUI'SPC'IND,B,4,8 ! OPTIONS=GUI_SPC_IND XCALL MIAMEX,59,OPTIONS,OPTIONS2 ! retrieve settings OPTIONS2 = OPTIONS2 OR GOP2'GUI'SPC'IND ! set GUI_SPC_IND XCALL MIAMEX,60,OPTIONS,OPTIONS2 3. ATE 3.0.130 fixes a problem in which it would abort with a "text property read-only" error message if you selected the "defined configurations option" from the defaults. ============================================================================ A-Shell Development Notes Version 4.9(874) (10 Mar 2004) ============================================================================ 1. Add an option to round the corners of boxes when bevelling. Option is on the Settings..Bevel dialog. ============================================================================ A-Shell Development Notes Version 4.9(873) (10 Mar 2004) ============================================================================ 1. AM62CG emulation now supported in ATE environments. Provides field emulation capabilities (previously ATE only supported mode emulations.) Note that you must update both both the server and client sides. when selecting this emulation in ATE, the OPTIONS=FIELDEMU option is automatically turned on for you. 2. The style of beveled lines has again been changed (in the never-ending quest for aesthetic fulfillment). The lines now appear sunken rather than raised. Note that you can achieve a look very similar to a Windows "frame" now, particularly if you use a proportional text control to embed any text in the upper left area of the border. 3. A problem with stray reverse video marks related to mouse clicking and dragging has been eliminated. ============================================================================ A-Shell Development Notes Version 4.9(872) (08 Mar 2004) ============================================================================ 1. (ATs) ATS now supports TAB(-5,rows), TAB(-6,cols), and TAB(-10,x) when the terminal driver is AM75G or AM65G. 2. (ATS) Fixed problem with PCKLST trying to display as a control on the server. 3. (ATE) The INFLD effect of automatically sinking the field during editing now works under Linux when using a "G" driver with ATE. 4. Text controls were not always being parsed correctly when they contained embedded commas. Note that when using TAB(-10,20) to define controls, if the control text contains commas, it requires an extra set of quotes. For example: ?TAB(-10,20);"1,0,""Last,First"",0,";MBF'STATIC+MBF'LFJUST; & ",,,10,5,10,30,3,-1";chr(127); Without the extra set of quotes around "Last,First", the parsing of the rest of the line would be thrown off. 5. (ATE) Add a delay option to the login configuration dialog. 6. (ATE) Saving and restoring box areas which overlay controls now works. 7. TPRINT and DPRINT now affect more than just the first argument. Previously, TPRINT A$;B$ would have only displayed A$ as a control and B$ as normal text. Now it will do them both. ============================================================================ A-Shell Development Notes Version 4.9(871) (07 Mar 2004) ============================================================================ 1. PCKLST.SBR now allows the array argument to be passed as an unformatted variable, which gives you more flexibility in creating variable sized pick lists. Previously, for the array mode, you had to specify the first element, i.e. ARRAY(1), so that it the subroutine could determine the size of the array elements. Now, you can pass an unformatted variable which the array is overlaid upon, and PCKLST will determine the element size by looking at the spacing between the first and second elements in the array. For example: MAP1 ARRAYX MAP2 ARRAY(50),S,13 XCALL PCKLST,ROW,COL,ANSWER,ARRAYX,MAXCNT,PROMPT, & EXITCODE,STROW,ENDROW,FLAGS,"",MMOCLR In order for this to work, there must be at least one trailing null terminating the ARRAY(1) element. Note that by using the overlay feature, you could support several array layouts with the same XCALL PCKLST, i.e.: MAP1 ARRAYX2,@ARRAYX MAP2 ARRAY2(10),S,60 MAP1 ARRAYX3,@ARRAYX MAP2 ARRAY3(80),S,8 etc. 2. A bug in INMEMO causing a GPF or segmentation fault has been fixed. It occurred when the code for 26 compressed spaces (^B^Z) straddled two physical memo records. 3. TAB(-10,23);CMD$;CHR$(127); will execute the specified CMD$ as a Windows command line. This is equivalent to XCALL HOSTEX,CMD$ under A-Shell/windows, with the main advantage being that also works from A-Shell/UNIX if the emulator is ATE. Note that just as with HOSTEX, you can add certain flag characters (&, %, $) to the end of the CMD$ to affect how the command is launched. See HOSTEX.SBR in the XCALL Reference for details. 4. TAB(-10,24);FSPEC$;CHR$(127); will invoke the invoke the Windows application associated with the specified file or object type. Same capability as MIAMEX,96 except again, it may be used from A-Shell/UNIX if the emulator is ATE. 5. TAB(-10,26);WINBGC;",";WINCLR;",";WINTXT;CHR$(127); will link the specified color palette numbers to the associated Windows colors, similar to MIAMEX,91 or SET SYS TERM. WINBGC should be a background color number 0 thru 7 (-1 to ignore) to be linked to the Windows standard dialog background color (gray). WINCLR should also be a background color number 0 thru 7 (-1 to ignore) to be linked to the Windows window background color (white). WINTXT should be a foreground color number to be linked to the Windows text color (black). Again, this works from A-Shell/UNIX if the emulator is ATE. Code similar to the example below will make screens containing buttons and text controls more like typical Windows screens (black text on a gray background, with listboxes and edit controls in white). ? TAB(-10,26);"0,1,6";CHR$(127); ! BG0=gray, BG1=wht, FG6=blk ? TAB(-3,0);TAB(-2,6);TAB(-1,0); ! BG=0, FG=6, clr screen =========================================================================== A-Shell Development Notes Version 4.9(870) (03 Mar 2004) ============================================================================ 1. (Windows) Change look of beveled lines to make them thinner and more "Windows-like". 2. Fix an obscure but with MIAMEX,9 (Octal or Hex convert) in which the OT'MEM mode might force octal mode. 3. Extended variable addressing mode for very large programs (activated with the COMPIL /AV switch) has been adjusted for compatibility with the still-under-development AMOS version. Note that until the feature is released by AMOS, it is probably subject to further change and thus you should be prepared to recompile any such programs. 4. Implement a server-based licensing scheme for ATE. When ATE is launched via ATE.EXE, if you initially enter 0000 for the serial number (for demo mode), subsequent launches will give you 30 seconds to connect to the server and execute LICENS /ATESRV to obtain the license from the server. (The server needs to have the ATE option added to its license.) ============================================================================ A-Shell Development Notes Version 4.9(869) (02 Mar 2004) ============================================================================ 1. ATECFG.EXE 1.1.102 adds configuration tabs for printer and login information. 2. ATE (launched via TELNET.LIT) now supports auto-login, as well as several printer configuration options for auxiliary port printing. Note that during auxiliary port printing, the emulator captures the output coming from the server, and stores it in a temporary file on the workstation. It then uses the printer configuration information to create a temporary A-Shell/Windows printer init file, which it uses to print the temporary file. Various other minor internal improvements to ATE, the most noticeable of which is that the cursor will not appear to disappear during rapid repetitive motion in VUE. 3. INFLD TYPE code |G now causes the final display of the field to be in the form of a sunken static text control (like DPRINT). In this mode, minus signs are inserted within the standard field area, rather than to the left of the field (eliminating a fair amount of confusion over how to size and position the field "window"). Note that |G will work in UNIX/LINUX provided ATE is present and you are using one of the GUI drivers (AM75G, AM65G). 4. INMEMO bug in which Latin 1 chars would not load into a memory-based memo has been fixed. 5. (Windows) External font leading now affects the size of controls as well as normal text. (For a given window size, increasing the leading decreases the size of the normal text font and the controls.) The up side of this is that it allows you to space out sunken "edit" controls in single-spaced screens. The downside is that since the proportional windows fonts do not resize themselves based on the window size or the control size you may need to increase the window size as you increase the leading, to provide enough space within controls for the text. (The controls themselves get resized along with the window, but the proportional fonts do not, so you must adjust the window size to be appropriate for the fonts.) 6. (UNIX) A bug relating to mouse cursor reporting sequences has been fixed in the am62c, am65, and am75 drivers. ============================================================================ A-Shell Development Notes Version 4.9(868)-1 (25 Feb 2004) ============================================================================ 1. SRCCOM.LIT 1.0(108) now includes the list file name and switches in the listing header (matching the format of the AMOS version). ============================================================================ A-Shell Development Notes Version 4.9(868) (23 Feb 2004) ============================================================================ 1. TAB(-10,18) and TAB(-10,19) can now accept spaces between the numbers and commas, so it is not necessary to use the str() function as in the example given below under edit 867. 2. TAB(-10,x) functions are now supported under A-Shell UNIX, provided the am75g or am65g driver is in use and ATE is running on the workstation. 3. TAB(-10,20) provides an alternate to XCALL MIAMEX,119 to create a static text control or button. (Note that it may be invoked from UNIX provided the driver is am75g or am65g and ATE is running on the workstation.) Syntax: TAB(-10,20);OP;",";BTNID;",";TXT;",";STATE;",";TYPE;","; & CMD;",";FUNC;",";SROW;",";SCOL;",";EROW;",";ECOL;","; & FGC;",";BGC;",";chr(127); For example: TAB(-10,20);"1,0,Enter name here:,0,";MBF'STATIC+MBF'LFJUST; & ",,,10,5,10,30,3,-1";chr(127); The parameter meanings here match those for the XCALL MIAMEX,119 version of the XCALL. The advantage of this technique as opposed to XCALL MIAMEX,119 is that TAB(-10,20) can be issued on A-Shell/UNIX and have the effect take place on the client workstation running ATE. NOTE HOWEVER: Checkboxes are not supported, since they require the passage of an actual variable name to be managed by the checkbox internally. ALSO NOTE: If you want to include non-printable characters in the CMD argument, you should use the "^" notation (i.e. "^M" is interpreted as Control-M, "^_" as Control-Shift-Underline, etc.) (See ASHELL.BSI for the definition of MBF'STATIC & MBF'LFJUST.) 4. TAB(-10,21) provides an alternate to XCALL MIAMEX,71 to edit the menu bar. (Note that may be invoked from UNIX provided the driver is am75g or am65g and ATE is running on the workstation.) Syntax: TAB(-10,21);OP;",";MNUID;",";TXT;",";STATE;",";TYPE;","; & CMD;",";FUNC;chr(127); For example: TAB(-10,21);"1,4,My documentation,0,";MBF'SHLEXC; & ",mydoc.pdf,";chr(127); So far, only the "traditional" format (as described in the MIAMEX,71 documentation) is supported. 5. (Windows) Static text controls may now optionally respond to a mouse click just like buttons do. If the CMD parameter is blank, then the text control will be totally static. However, if the CMD parameter is not empty, then the text control will act like a button. The TYPE parameter should be set to one of the flags indicating how the CMD is to be interpreted, such as MBF'KBD, MBF'CMDLIN or MBF'SHLEXC (the default is MBF'CMDLIN). 6. FIXTRN 1.0(102) supports a /D switch for decimal mode, facilitating the entry and display of binary translations. See FIXTRN /? for on-line help. 7. Fix a bug with the "%VK_xxx%" format for defining buttons to act as function keys (see edit 854 below). The bug was causing each button to work correctly only once. ============================================================================ A-Shell Development Notes Version 4.9(867) (17 Feb 2004) ============================================================================ 1. (Windows) New TAB(-10,x) functions provide alternate access to the "sink" and "unsink" field feature (otherwise accessible via MIAME 126). ! to sink field: TAB(-10,18);str(row);",";str(col);",";str(len);",";str(bgc);str(127); ! to unsink: TAB(-10,19);str(row);",";str(col);",";str(len);",";str(bgc);str(127); For example, ? TAB(10,18);"10,15,20,-1";chr(127); WARNING: you must use the str() function as shown above to eliminate the spaces that Basic would otherise output before and after every number. Also, don't forget the trailing chr(127); which is needed to terminate all TAB(-10,X) commands. The bgc (background color) argument is intended to let the routine know what the background color of the sunken field is, which influences the colors used for the highlight and shadow which produce the sunken effect. However, it doesn't actually change the background color of the field (although there is some possibility that a future implementation would do just that.) In most cases, the simplest thing would be to specify the bgc argument as -1 (as in the example above), which means it will assume the current background color. The main advantage of using the TAB(-10,x) form as opposed to the MIAMEX,126 form is that the TAB form works remotely (e.g. with ATE). 2. (Windows) The top and bottom status lines have been lengthened by 2 (from 72 on the top and 78 on the bottom, to 74 on the top and 80 on the bottom.) This mainly benefits ATE since the AM65 and AM75 emulations assume the larger status lines (causing problems in programs that either assume or need the longer lines). 3. ATE now supports the TAB(-5,rows) and TAB(-6,cols) commands. 4. (LINUX) New terminal drivers added for AM65G, AM75G, and PC. The first two are GUI versions of the standard ATE emulations, and PC is the native AlphaLan emulation. ============================================================================ A-Shell Development Notes Version 4.9(866) (12 Feb 2004) ============================================================================ 1. (Windows) New MIAMEX function: XCALL MIAMEX,126,OP,SROW,SCOL,EROW,ECOL,BGC Causes the specified box to be "sunk" or "unsunk", based on OP (1 to sink, 0 to unsink). This is the same routine used by INFLD to give the field being editing the appearance of being slightly sunken. You can also get this effect by using the MBF'SUNKEN flag with MIAMEX,119 (see edit 863 below) to create a static text control with that style, but in that case, you can't freely write on top of the control. With MIAMEX 126, the effect does not conflict with character-level I/O to that screen area (which is why it works with INFLD). 2. (Windows) To allow easier experimentation with the new proportional font capability without having to change your PRINT statements to TPRINT or DPRINT, or to MIAMEX,119 commands, A-Shell/Windows now supports a primitive "manifest" file mechanism. The "manifest" is a text file whose name and location match the RUN file, but whose extension is MFT. If such a file exists when the RUN file is launched, it will be processed for lines consisting of the following: ;(comments are any line whose first char is not a number) <ROW>,<COL>,<LEN>,<TYPE> <ROW>,<COL>,<LEN>,<TYPE> etc. <ROW>,<COL> and <LEN> together specify the location on the screen of text that you would like to have automatically converted to use proportional text. <TYPE> specifies a combination of the letters T (text), D (data), L (left justify), R (right justify), and C (center). For example: 10,1,20,TL 10,30,15,DR This would cause any PRINT statement that began on row 10 within the column range 1 to 20, to be replaced with left justified static text. The second line would cause any PRINT statement that began on row 10 within the column range 30 to 44 to be replaced with right justified "data-style" (sunken using the current Window color) text. Note that this scheme is not intended for production use and is likely for production use and is likely . to evolve (or devolve) rapidly. It is only here to simplify experimenting with the proportional font look. Also note that the coordinates and length have no effect on the actual coordinates and length of the static text control created. It only affects whether a particular PRINT statement is subject to being converted to static proportional text automatically (based on where the cursor is at the start of the PRINT statement token.) For example, using the above manifest example, consider the following statement: PRINT TAB(10,5);"Name: ";TAB(10,35);"Jack" Because the first token ("Name") starts within the range of the first line in the MFT file, it would effectively be interpreted as: TPRINT TAB(10,5);"Name: "; Similarly, the second part of the PRINT statement would be interpreted as: DPRINT TAB(10,35);"Jack" (Except that the DPRINT statement doesn't allow for right or center justification, whereas the manifest will take care of this as well.) These statements would create a left justified text control using the current screen foreground/background colors for "Name: ", and a right justified "data" text control containing "Jack". The data control would use the current screen foreground, but the standard Windows window color (generally white) for the background. At this point, the MFT mechanism is very primitive, and it isn't clear whether it should or will be developed into something more useful in an actual production environment. (Feel free to submit suggestions if so inclined.) ============================================================================ A-Shell Development Notes Version 4.9(864)-4 (05 Feb 2004) ============================================================================ 1. FORCE.LIT 2.0A(105) supports the AMOS-style multi-line syntax:, i.e. .FORCE TSKAAB LOG BAS: RUN MYPROG 15 ~ TIME The above would force TSKAAB to execute "LOG BAS:", then "RUN MYPROG", then "15", and finally a blank line (Tilde by itself is treated as a blank line.) The blank line terminates the force operation. (The TIME command would then be executed back in the current job.) Note that under A-Shell/Windows, the response time for receiving forced commands may be several seconds. To avoid overrunning the target job, the sender will be forced to wait for each command to be acknowledged by the receiver. It also supports forcing commands to yourself. This is useful for forcing input to a program that does not normally accept input from a command file. It is usually used with the $NJ system variable in DO files to specify the current jobname, e.g.: ;MYPROG.DO :R LOG BAS: FORCE $NJ RUN MYPROG 15 ~ TIME Note that the TIME command here will execute BEFORE the forced commands, since CMD and DO input is processed first, then typeahead. Also note that there isn't much point in this exercise unless MYPROG (in this case) doesn't accept command file input. Otherwise we could just omit the FORCE command and MYPROG would run the same from the DO file as it would with the forced input. A-Shell still supports the non-AMOS standard single-line FORCE, in which the command is passed on the command line, e.g.: .FORCE TSKAAB LOG SYS:^M Note that in this mode, you have to explicitly add a ^M to the end of the line to force a carriage return. Finally, note that the LITMSG.xxx message files have been updated for some new messages in FORCE. ============================================================================ A-Shell Development Notes Version 4.9(864)-3 (04 Feb 2004) ============================================================================ 1. SUBMIT.LIT 3.0A(134) now protects against two jobs simultaneously expanding a CTL file into the same temp file. Previously this was possible if the CTL file was quite large. 2. DO.LIT 2.1(117) and MDO.LIT 2.1(117) increase the maximum expanded do file from about 62K to about 122K. This is about the maximum size for a 430K partition, which is about the minimum partition needed for some other large LIT commands, such as SUBMIT. It will now complain explicitly if the partition size is not sufficient. 3. A loophole in the string expression handler has been closed, which previously allowed a GPF or core dump to occur if a large string (larger than 4K) was also larger than the amount of available stack space. The most likely example of this was in the DO file handler, which works with very large stings. Now a stack overflow is reported in this condition. 4. INFLD now checks that the SETDEF parameter is a string, helping to clearly identify bad argument lists which otherwise may have appeared to work. 5. (Windows) A further PCKLST GUI bug fixed, in which minimizing and restoring the window while the listbox was up would cause it to exit from the listbox. ============================================================================ A-Shell Development Notes Version 4.9(864)-2 (04 Feb 2004) ============================================================================ 1. (Windows) More PCKLST GUI bug fixes: A. Toggling to another application while in a listbox caused the listbox to disappear when you returned (as if you had exited with ESC.) B. Titles which did not contain CHR(13) (to start the bottom title) were being ignored. (Bottom titles are still being ignored, but this is by decision.) ============================================================================ A-Shell Development Notes Version 4.9(864) (03 Feb 2004) ============================================================================ 1. EZSPL configuration files now support a new statement: EXTOPT=### Where ## can be a combination of the following: 4 Disable screen save/restore 32 Allow exit from EZVUE with left arrow 64 Allow exit from EZVUE with TAB 128 Allow exit from EZVUE with F1-F16 These can also be set directly in the EXTOPT field of the "new" EZSPL calling format. 2. (Windows) PCKLST GUI bug fixes and improvements: A. A stray ESC or RETURN character was being left in the keyboard buffer (causing problems for the next thing after the PCKLST). B. Array mode now formats better even if entries do not all have trailing nulls. C. If the PROMPT is not blank, it is now used to create a simulation of the old title bar above the pick list. The color of the prompt will use the BFCLR parameter of the MMOCLR structure passed to PCKLST (or white if not specified) on a background matching the Windows title bar color. The bottom prompt is still ignored. (The problem here is that the height of the listbox is adjusted based on the actual font resolution to hold and integral number of items, so that it doesn't necessarily line up with the row units used by other controls, making it difficult to align the bottom prompt without a gap. Even without that problem, such bottom prompts don't look right in Windows.) D. You can now use TABs within items. The tab stops are not (yet?) adjustable, but are approximately 3/4 of an inch apart, which might work out if you have a two column list where the first column contains variable width characters (i.e. letters, not just numbers.) 3. (Windows) A new flag has been added for use with MIAMEX,119 when creating buttons and checkboxes: MBF'UNPROTECTED (134217728). This causes buttons and checkboxes to act like static controls with respect to whether they can be deleted via TAB(-1,9), TAB(-1,10), and TAB(X,Y). (By default, static text controls act like text and can be deleted by TCRTS 9 and 10, as well as a mere TAB(X,Y) to the upper left corner, unless you set the dim attribute and then use TAB(-1,13) to set protected mode before the TAB(-1,9) or TAB(-1,10). But buttons and checkboxes, by default, can only be deleted by TAB(-1,0) or by calling MIAMEX,119 with opcode 3. You can override that behaviour and make them act like static text by specifying the MBF'UNPROTECTED (defined in ASHELL.BSI) flag when you create them. 4. (Windows) A new "Miscellaneous Settings" dialog has been added to the Settings menu. Currently it contains only one parameter, "External Leading". This is expressed in the number of pixels of extra space to allow between rows. By increasing the leading, you space effectively decrease the normal text font height (for a particular window size) and increase the space between the rows. This might help some crowded applications move towards the more spacious look of typical Windows applications. In large window sizes (paticularly full screen), it may also help trim the size of normal text down closer to the size of the proportional text used in buttons and static text controls. The effect of changing the leading is immediate, so it is easy to experiment with. It is saved along with other settings by the File..Save or File..Save As menu options, and loaded automatically when A-Shell is launched. Note that when lines of text are output to the screen, if the leading is non-zero, there will be space between the lines that is not filled in by the background color associated with that PRINT statement. The only way to fill in that space is by using a multi-line clearing command, such as TAB(-1,10) or TAB(-1,0). Consequently, leading is not recommended unless you tend to stick with a single background color (such as Windows gray) for your application. ============================================================================ A-Shell Development Notes Version 4.9(863) (02 Feb 2004) ============================================================================ NOTE: The GUI enhancements described here for edit 863 are not really even worthy of the term "beta", and are likely to be further modified before released. They are only offered here for those intrepid developers who want to participate in the design process. 1. (Windows) - Proportional font text strings can now be displayed using static text controls. These can be added / modified / deleted similarly to buttons using the same MIAMEX,119 call: xcall MIAMEX,119,OPCODE,BTNID,BTNTXT,STATE,TYPE,CMD,FUNC,STATUS, SROW,SCOL,EROW,ECOL{,FGC{,BGC}} All parameters are the same as for buttons, except for the following new TYPE flags: ASHELL.BSI sym Value Meaning -------------- ------- ----------------------------------- MBF'SUNKEN 4096 Control given a "sunken" look MBF'STATIC 262144 Create static text control MBF'WORDELLIPSIS 2097152 If text doesn't fit, end with ... MBF'PATHELLIPSIS 4194304 For paths, if too long, insert /.../ MBF'DIM 8388608 Dim attribute MBF'FRAME 33554432 Draw a frame border (around static) The optional FGC and BGC parameters may be used to specify something other than the system default colors. FGC (foreground color) may be set to any of the standard color numbers 0-15, or -1 for the current foreground color, or -2 for the Windows standard "button text" color (usually black, but subject to change with the desktop schemes). BGC (background color) currently uses a different color scale (since "normal" Windows programs are not likely to paint text using arbitrary background colors. The default (used if set to -1) will be the system "button face" (usually gray) color. When using these Windows controls, it is highly recommended that you use MIAMEX,91 to associate your screen background color with the "system background" (aka "button face") color, in which case text displayed using the default BGC will appear "normal". Any other value for BGC is interpreted as specifying one of the system colors, which are defined in the latest ashell.bsi with symbols named COLOR'xxxx. The most likely one (aside from COLOR'BTNFACE) would be COLOR'WINDOW (5), which is usually white. When combined with the MBF'SUNKEN TYPE flag, this results in a look very similar to the typical Windows "edit" control. You might, for example, display your prompts with the standard BGC default of -1, but display your data with the MBF'SUNKEN option and BGC set to COLOR'WINDOW (or 5). The BEVEL.BAS sample program has been enhanced to illustrate this effect. Here are a few comparisons of buttons and static text which may help clarify some of the subtleties to be aware of: A. FGC and BGC do not (yet?) work for buttons; they only work for static text controls. (Due to internal differences in the way Windows handles the two types of controls, it requires much more effort to adjust the colors of buttons.) B. While buttons are not affected by TAB(-1,9) and TAB(-1,10), static text controls respond to these TCRTs just like regular text. They may even take the dim attribute, allowing them to be protected via TAB(-1,13). You can also delete a static text control merely by doing a TAB(x,y) to the upper left corner of the control. The theory here is to make them act more like normal text, that can be erased merely by TAB(x,y);" "; C. The default alignment for both buttons and static text is centered. (In the case of text, you probably want left justification, so you'll need to add the MBF'LFJUST flag.) D. Ordinary PRINT statements will temporarily overwrite both buttons and static text controls, but will disappear during a display refresh (since buttons and text controls are painted on top of the "screen" window). E. As with buttons, static text controls use a system dialog font whose size is related to your Windows configuration (but not necessarily related to the A-Shell window size.) Although both buttons and static text controls will automatically resize themselves when the window size is changed, the text within them does not resize itself (although it will reformat itself for centering and wrapping purposes). Thus, you may find (as with typical Windows programs), that you'll need to adjust the A-Shell Window size until the text controls and buttons are able to accomodate the text within them. (The worst case scenario here is where you use all upper case characters; these are generally wider in a proportional font than in a fixed size font, and thus may require a larger A-Shell window.) F. Because of the differences between normal text output and static text controls, trying to combine them in the same screen vicinity is not likely to result in a pleasing visual effect. G. You can "layer" static text controls. For example, you can first position a blank rectangle on the screen, and then position smaller text controls on top of it. (This is the only way to get text to "stick" on top of a control.) H. The save area function (e.g. within MSBOXX.SBR, or INMEMO.SBR) will automatically hide any button or static text control that overlaps the area being saved. (This is necessary since otherwise the parts of those controls that were within the box would continue to display on top of the contents of the box.) The hidden controls, however, will be restored when the box area is restored. This makes reasonable sense in the case of buttons, but probably doesn't look that good in the case of text. To get a more Windows-like pop-up window, we've added a new opcode to MSBOXX (see below). 2. (Windows) Although you can replace your PRINT statements with MIAMEX,119 calls in order to take advantage of proportional, Windows-style text, this is likely to be tedious and error prone, due to the complexity of the XCALL MIAMEX parameters. To allow you to convert ordinary PRINT statements to proportional text versions more easily, two new PRINT variations have been introduced (in the /X:2 mode of COMPIL): TPRINT DPRINT TPRINT is intended for "text" (i.e. prompts and other messages), while DPRINT is intended for "data". Both statements support the same syntax and argument options as the standard PRINT statement. (And in a non-GUI environment, both will act just like PRINT.) TPRINT takes each "token" of its parameter list and turns it into a static text control, as if you had used XCALL MIAMEX,119, with FGC and BGC set to -1. DPRINT is the same idea, except it specifes BGC=COLOR'WINDOW and adds the MBF'SUNKEN option, so that the output string looks more like an edit control. Using TPRINT and DPRINT, you might be able to quickly go through a program source, converting it to a proportional, more GUI-like, Windows-style, without sacrificing its ability to work in normal fixed text mode. NOTE: You must use the graphics version of the A-Shell/Windows TDV (e.g. PCTDVG instead of PCTDV) or else TPRINT and DPRINT will just act like PRINT. (This makes it convenient for testing.) PROGRAMMING HINT: In order for programs to format properly in both fixed and proportional fonts, the following guidelines should be observed: A. Always use a TAB(x,y) prior to outputting a "token" of text. This will at least ensure that your text prompts and messages always start in a consistent position. (In other words, don't use spaces to position your text.) B. Avoid overwriting parts of existing messages. Instead, try to replace the entire message. (You cannot reliably determine the X,Y coordinates of a particular character within a proportional text string.) C. Add a few extra spaces on the end of text tokens, to provide some "breathing room" for the proportional version of the message to expand if it contains a lot of wide (or capital) letters. For example: TPRINT TAB(X,Y);"Vendor Name: "; TPRINT TAB(X,Y);MESSAGE$;" "; NOTE: You could do a global replace of your PRINT and ? statements with TPRINT to get a quick idea of how compatible your PRINT statement logic is with proportional fonts. 3. (Windows) XCALL PCKLST is now implemented using a Windows-style listbox control if you are using one of the graphics terminal drivers (e.g. PCTDVG). The operation is similar to the text version of PCKLST. Current notable differences / limitations: A. The TFCLR (Text Foreground color) field within the MMOCLR structure is the only color parameter that is respected. The background color is hard coded to COLOR'WINDOWS (usually white). B. The top and bottom prompts are currently ignored. (They seem a bit odd looking in the Windows environment. 4. (Windows) A new opcode option has been added to MSBOXX.SBR to display a GUI-style pop-up window: 524288. This has been added to MSBOXX.BSI as BOX'WIN. When specified, and using the GUI version of the driver, it causes the pop-up box to be created using a static text control with the MBF'FRAME option and the standard "button face" background color (generally gray). The "frame" is much thinner than the normal MSBOXX border, allowing the rows and columns which are normally taken by the border to be used for text if so desired. This style of box is the only kind that can overlap other controls (without causing the underlying controls to have to be hidden.) However, if you use this style of box, you should only print within it using TPRINT, DPRINT, or MIAMEX,119. Any other kind of output will "print through" to the underlying screen layer and not be removed when the box is removed. (This is an area that probably needs more development/design work.) 5. (Windows) MIAMEX,91 (set system background color) has been enhanced to allow you to associate one of your 16 palette colors with two other Windows system colors: "window color" (typically white) and "text color" (typically black): XCALL MIAMEX,91,OP,SYSBGC{,SYSWINC{,SYSTXTC}} Note that the SYSWINC (0-7) applies to one of the background colors in the color palette, while SYSTXTC (0-5) refers to one of the foreground colors. The advantage of using these colors is that the user can then adjust your color scheme using the Control Panel desktop applet. NOTE: It is preferable to use this method of associating a background color number with the "system gray" color, rather than simply trying to pick a suitable gray from the color palette, because this not only guarantees that you get exactly the right gray, but also allows certain A-Shell routines to optimize themselves by using the system palette. Consequently, the recommendation would be to add code to execute MIAMEX,91 in your startup routine. Or at the very least add a SET TERM SYSBCOLOR ## command to your startup command file. 6. (Windows) The external leading between rows has been increased by one pixel, to a skosh more room for the edges of controls to fix in between lines of text. This might have the effect of shrinking your font size for a given window size, but is unlikely to be that noticeable. (We might make this a user-definable setting.) ============================================================================ A-Shell Development Notes Version 4.9(862) (02 Feb 2004) ============================================================================ 1. (UNIX) All am6* and wyse5* embedded drivers now support TCRT's 158, 159, and 161 (mouse cursor reporting). (Note that your terminal or emulator also has to support the feature.) A problem with TAB(-1,159) not working has also been fixed. The full protocol for using TAB(-1,158) is as follows: PRINT TAB(-1,158);"C";chr(34);chr(X);chr(Y); The "C" is mandatory. The chr(34) indicates that the leadin sequence (to be sent with each click) will be two (32+2=34) characters long. And X and Y indicate the two characters that you want sent. Technically you can make the leadin sequence any number of characters long, and consisting of any characters. But we have settled on a standard of two characters, which seems sufficient. The characters X and Y can be anything, but for best results should be somewhat unusual, but not potential function key sequence characters (i.e. not ESC or ^A). A good choice is {{ or || or @@. (The problem with using ESC or ^A is that the sequence may then appear to the terminal driver as a function key and get translated.) Turn mouse cursor reporting off with TAB(-1,159); Note that these sequences work in A-Shell/Windows as well, but not currently in ATS mode. 2. When mouse cursor reporting is active, INFLD now treats a mouse click outside of the field as an exit condition, returning EXITCODE -47. You can then retrieve further information about the last click by xcalling MIAMEX,125 (see next). 3. xcall MIAMEX,124,STRING outputs the STRING message to the ashlog.log file. (This is useful when you want to log your own messages in the same stream that A-Shell uses for its system messages.) 4. xcall MIAMEX,125,CLICKINFO,ROW,COL retrieves information about the last mouse click (when mouse cursor reporting has been activated via TCRT 158). CLICKINFO returns a bitmap consisting of the following: 1 Left button 2 Right button 8 Double click (else single click) For example, 1 is a standard left click, while 10 is a right doubleclick. ROW and COL indicate the row,col position of the click. 5. The GET.SBR timer param now works as expected even when the number of characters requested is 0. Previously, it returned instantly. Now, it waits until there is a character available or the timer expires. 6. SYSTAT.LIT 2.2A(145) fixes sorting problem introduced in edit 144. Also adds new sort switch /ST to sort by job type (background, foreground, pshell, etc.) 7. QUTL.LIT 2.2A(124) fixes a minor bug in which it displayed the wrong version of itself. ============================================================================ A-Shell Development Notes Version 4.9(861)c (25 Jan 2004) ============================================================================ 1. (Windows) Reintroduce version using standard file I/O API (as opposed to the WIN32 API which was introduced back in 4.6), in order to match non-LOKSER multi-user file read performance of earlier A-Shells. (It appears that the one disadvantage of the WIN32 API is that it always makes at least advisory locking calls, which can slow down multiuser read-only performance by a factor of 10 or more.) However, for programs which use LOKSER, the WIN32 API is just as fast and probably better in other ways. We will continue to look at this, but in the interim, we'll distinguish the between the version using the WIN32 API and the version using the standard C API by appending a "c" to the version of the latter. You can also tell by looking at the "License Options" field in the About box - the WIN32 version says "WIN32IO". 2. (UNIX) Support SBR=INFLD_KEEPALIVE to send a harmless byte sequence every 15 seconds while waiting for input within INFLD (which includes the dot prompt and BASIC INPUT statements). This serves two purposes. First, it will prevent connections from being dropped due to lack of activity while they are actually in a program waiting for input. Second (and perhaps more important), it provides a mechanism for UNIX/Linux servers to detect connections that have been dropped (without having to wait for the standard keepalive timers to expire, which by default may run to 2 hours). This way, within 15 seconds of the connection being dropped, the server will send a packet, which cannot be delivered. This should trigger a retry timer which will try to resend the packet some number of times before concluding that the connection is dead. This process is generally much quicker than the keepalive detections process. Note that under Linux, the retry timers are controlled by two files in the /proc filesystem: /proc/sys/net/ipv4/tcp_retries1 and tcp_retries2. The default values of 3 and 15, respectively, may be large for your liking, possibly taking as long as 15-30 minutes to close the dropped connection. You can set them as low as 1 and 2 for nearly immediate detection, at the possible risk of prematurely judging a temporarily sluggish connection to be dead. A good documentation link with more information about the tcp variables in the /proc filesystem is: http://ipsysctl-tutorial.frozentux.net/chunkyhtml/tcpvariables.html 3. A ancient yet nasty bug in FLOCK has been fixed. The symptom was that the queue block representing permission for a particular file to be open could be overwritten by a record request for the same file, causing subsequent requests for that file to return status code 3 or 6 (permission to open file must first be granted). The chance of the error manifesting itself depended on many factors, and judging from the fact that it has never been reported (even though it affected versions going at least as far back as 4.4), probably didn't occur very often. (We discovered it in-house while testing the performance improvement of the QFLOCK MEM: option for Windows in the 4.9 development version.) Nevertheless an update is highly recommended. 4. (Windows) Improve raw disk read speed (of READ-intensive tasks) by about 15% by eliminating an unnecessary interruption to process Window events and check for ^C prior to each READ which was introduced in edit 816. 5. (Windows) MIAMEX,119 (Windows buttons) function supports a new type, 262144, to create a static text control. These are similar to buttons, except that they (currently) do not accept any mouse input, and thus really only serve as a means of displaying static text using a proportional font (same as the font used in buttons). Static controls also are erased (just like normal text) by TAB(-1,9) and TAB(-1,10) (unlike buttons). 6. (Windows) Fix 64K wraparound bug in size of QFLOCK.SYS. If file size was more than 64K, it acted as if it was only the modulo 64K size. Consequently, the maximum effective number of QUEUE blocks was about 1500. This problem was introduced in 4.9. ============================================================================ A-Shell Development Notes Version 4.9(859) (14 Jan 2004) ============================================================================ 1. (Windows) Improve raw disk read speed by about 15%. 2. COMPIL now invokes /A automatically (as needed) even if OPTIONS=STRICT. It invokes /AV automatically only if STRICT not set. 3. COMPIL now handles certain out of memory conditions more gracefully. 4. SET.LIT 1.2(135) supports SET STRICT and SET NOSTRICT to turn the STRICT option on and off. (May be convenient in CMD files if you only want STRICT mode for certain operations.) ============================================================================ A-Shell Development Notes Version 4.9(858)-1 (13 Jan 2004) ============================================================================ 1. COMPIL /A switch was mistakenly setting the /AV flag (rendering the .RUN incompatible with earlier A-Shell releases or AMOS.) The relationship between /A and /AV was backwards: /AV implies /A, but not the other way around. ============================================================================ A-Shell Development Notes Version 4.9(858) (12 Jan 2004) ============================================================================ 1. Fix various problems in EZSPL/SPOOL's interpretation of the layout of the "new xcall spool format" parameter packet. The general effect was that option flags were not always getting recognized. 2. Fix a bug in EZSPL which caused it to terminate if all options except ASKPRT were off. 3. (LINUX) Correct a problem with rounding which was introduced in the 838-8 patch. The problem caused an incorrect digit to appear in one of the least significant digits of very long masks. 4. FPROUND option support expanded to affect negative arguments to the INT() and FIX() functions. For example, INT(-13.9999999) previously returned -13 even when FPROUND was set; now it returns -14 when FPROUND is set. FPROUND logic is also not applied when assigning a floating point expression to a binary variable (which effectively implies the use of the FIX() function). 5. When ENTER is used to exit from a single-line memo (see 840-2 below), it now sets the "memo-updated" bit, forcing the memo to be saved. Previously, it just acted like ESC, which meant that the memo was not saved unless the operator typed something in other than just hitting ENTER. (Preloaded text does not set the "memo updated" flag unless it contains a ^F, ^D, or CR. This is a feature designed to avoid the saving of memos that only contained a time-date stamp provided by the application. The problem was that in a single line memo, ENTER was being treated like ESC, which did not by itself set the "memo updated" flag. Now it does.) 6. (Windows/ATS) Null bytes are no longer stripped from output to the terminal, allowing, for example, ZTERM ESC sequences to be used. 7. MIAMEX function 100 (Playsound) was not handling AMOS filespecs; fixed. 8. VERSYS.LIT 1.0(103) fixes a bug introduced in [102] in which it would not necessarily display the versions of the included modules. (It can be downloaded from the 4.8 Patches page.) 9. SORTIT.SBR now supports up to 6 sort keys: XCALL SORTIT, array, reccnt, recsiz, k1siz, k1pos, k1ord, & k2siz, k2pos, k2ord, k3siz, k3pos, k3ord, & k1typ, k2typ, k3typ, & k4siz, k4pos, k4ord, k5siz, k5pos, k5ord, & k6siz, k6pos, k6ord, k4typ, k5typ, k6typ Everything after k1ord is optional; if you specify one of the keys, you must specify the k?siz, k?pos, and k?ord arguments, but may omit the k?typ argument (in which case it defaults to 0 or string.) ============================================================================ A-Shell Development Notes Version 4.9(857)-2 (30 Dec 2003) ============================================================================ 1. INMEMO was not zeroing the returned LINK parameter when deleting memos with the MMO'DEL opcode. (This escaped notice for so long probably because most apps are also deleting the record to which the memo was attached at the same time, so the returned link was usually irrelevant.) 2. INMEMO was not automatically setting the MMO'RET option on single line memo pads (which allows you to exit from the memo editing operation simply by hitting ENTER when on the bottom row.) 3. Various problems in parsing OPTIONS field in the EZSPL new format TABLE parameter have been resolved. ============================================================================ A-Shell Development Notes Version 4.9(857) (23 Dec 2003) ============================================================================ 1. COMPIL/OCMPIL/COMPLP 1.0(112) now supports /AV switch to allow the "variable index area" to exceed 64K. Furthermore, like with the /A switch (which is implied by /AV), unless OPTIONS=STRICT, the compiler will automatically restart the compilation using /AV if the program would exceed the 64K variable index limit. Normal variables require 10 bytes of indexing space each (array variables take more), so this limited programs to something less than 6400 variables. With /AV, the limit becomes 256 times greater. /AV is independent of other compiler switches (except /A), so you don't need to go to BasicPlus mode, but any RUN file thus compiled will not be compatible with AMOS, nor with any version of A-Shell prior to 4.9(857). (You will get the error "RUN file is in an incompatible format" if you try to run such a program under AMOS or an earlier A-Shell.) 2. VERSYS.LIT 1.0(102) now shows the program header flags for RUN and LIT files (which indicate how the program was compiled and whether it is compatible with AMOS). Note that it cannot distinguish whether /A was used (although it can distinguish /AV, which implies /A), and it cannot tell between /X:1, /X:2 and /D, all of which show as /X and are incompatible with AMOS). Note: this version of VERSYS is backwards compatible with A-Shell 4.8. ============================================================================ A-Shell Development Notes Version 4.9(856)-1 (11 Dec 2003) ============================================================================ 1. MMAP.LIT display was broken. (Problem was in ashell executable, not in MMAP itself.) 2. Remove horizontal scrolling limit with right arrow of 52 columns. 3. (Windows) Workaround bug in certain foreign keyboard drivers (Italian, possibly others) in which use of the ALT-GR key would appear to leave the CTRL key pressed. ============================================================================ A-Shell Development Notes Version 4.9(856) (08 Dec 2003) ============================================================================ 1. PolyShell 1.5(155) now supports the ability to replace the SERIAL= line in miame.ini with an INCLUDE= (implemented in 854 build of A-Shell.) 2. Automatic detection of changes to the ersatz definitions now smarter. Previously, such changes would take 30 seconds to be recognized. Now, it should be instantaneous, particularly if you use the updated VUE. 3. VUE.LIT 2.0(110) now forces a reload of the ersatz table if the file being edited has a .INI or .ERZ extension. Note that it is still the case that if the miame.ini references multiple ERSATZ tables, only the only one can be updated dynamically. For all other updates, you have to exit and restart A-Shell for the update to have an effect. 4. Fix a bug in PCKLST.SBR in which a memory-based list might appear empty PROMPT="". (Patch also applied to 4.8.839 build.) 5. WRITECD and WRITETD (output with comma delimiters or tab delimiters) now strip leading blanks from string variables, matching the documentation. (Patch also applied to 4.8.839 build.) ============================================================================ A-Shell Development Notes Version 4.9(855) (28 Nov 2003) ============================================================================ 1. TCP subroutines TCPSRV and TCPCLI have now been consolidated and enhanced in a single routine, TCPX.SBR. The old calling interfaces (XCALL TCPCLI..., and XCALL TCPSRV,...) are still supported but now deprecated. New syntax: XCALL TCPX,OP,STATUS,DATA,SOCKPORT{,FLAGS{,TIMER{,HOSTNAME}}} OP (numeric) Indications operation. Note changes: OP 1 now only applies to server; OP 8 works on all platforms; new OP 10 & 11. 1) (server) wait for client connection 2) write DATA to socket 4) read DATA from socket 6) close socket 7) check if data avail to read (return 1 in FLAGS if so) 8) check how much data avail to read (return # bytes in FLAGS) 9) (client) connect to generic server 10) (client) (equivalent to old TCPCLI opcode 1; now deprecated) 11) return system error message corresponding to STATUS STATUS (float) Returns status of operation. <0 = -errno. >0 indicates number of bytes read or written. DATA (string, unformatted, or array) Packet of data to read or write. Note changes: there is no longer any hardcoded limit on the packet size; however the OS may impose its own limits. SOCKPORT (numeric) On connect or accept (OPs 1,9,10) must supply the port # to listen on or connect to; returns the connected socket #, which must be supplied to all other calls (except OP 11). FLAGS (numeric, optional) Usage varies with OP. Note changes on read and write operations: you may now specify number of bytes to read/write and a timeout value in TIMER to ensure whole logical packet read/writes in blocking connections, without risking being stuck for an inordinate amount of time if other end malfunctions. OP 1,9,10 (connect/accept): set=1 for blocking mode. OP 2 (write): specifies # of bytes to write. Must be <= size of DATA, unless DATA is subscripted, in which case we just trust the FLAGS value. 0 (or FLAGS not specified) means write entire DATA block. If FLAGS non-zero, we set the send buffer low water mark so that we don't attempt operation unless buffer has sufficient space. (This is one case where you might have a problem if you use a packet size larger than the OS supports.) OP 4 (read): specifies # of bytes to read. 0 means read whatever is available (from 1 byte to size of DATA). For blocking connections, subroutine will wait until the required number of bytes is read (up to TIMER limit). For non-blocking connections, this size is only an upper limit; the routine will return as soon as the interface indicates there is data available (even if not the requested number of bytes.) OP 6 (close): Initiate a "graceful" background shutdown. Call returns immediately; OS tries to gracefully close the connection. If other end is waiting on input (in OP 4), it will receive an error. OP 7 (check for data) If TIMER specified, FLAGS is ignored and TIMER is used. If TIMER not specified, FLAGS specifies how long to wait before returning STATUS 0 if no data avail. If FLAGS is F,6 then it is interpreted as fractional seconds; otherwise it is interpreted as milliseconds. OP 8 (check how much data) FLAGS not used. OP 11 (get error message) FLAGS not used. As a convenience for backwards compatibility with TCPCLI on the connect OP, FLAGS can be the 6th param if the 5th param is a string (i.e. TCPX is called with the TCPCLI syntax: XCALL TCPX,OP,STATUS,DATA,SOCKPORT,HOSTNAME,FLAGS) TIMER (numeric, optional) For OP 7, number of milliseconds to wait before returning if no data avail. For reads and writes on blocking connections, number of milliseconds to wait before returning if full operation cannot be satisfied. HOSTNAME (string): Used only on the connect OP; supplies the name of the host where the server is running. As a convenience for backwards compatibility with TCPCLI/TCPSRV, it can be the 5th param (if 6 params specified and 6th is numeric), or the last param (with 5, 6, or 7 params specified). ============================================================================ A-Shell Development Notes Version 4.9(854) (21 Nov 2003) ============================================================================ 1. (Windows) Fix problems with HELP button in standard message box routine (whether called by TAB(-10,17) or MSGBOX.SBX): After clicking on the HELP button, the window would was no longer responsive to some mouse activity, and hitting F1 when the message box was not present caused A-Shell to shut down. (F1 is treated by Windows as equivalent to clicking on a HELP button.) 2. (Linux) Workaround for a strange problem with rounding, in which (N.5 using "#####") would round DOWN when N was even. Bug appears to be in a certain Linux library routine; workaround involves coercing correct rounding by adjusting 16th significant decimal position. 3. Add new XCALL to help in parsing strings: XCALL STRTOK, OP, STRING, FDELIM, FLD1 {, RDELIM, FLD2, ...FLDn} STRTOK parses the STRING variable according to the delimiters specified, and returns one or more fields in the FLD1...FLDn variables. You can call it once for each field (and change the field delimiter characters as you go), or have it return several parsed fields in one call, ending either when it hits a delimiter in the RDELIM field or runs out of STRING or of FLDx parameters. OP (numeric variable) should be set to 0 for the initial call, and 1 for subsequent calls using the original STRING. (It will be updated automatically from 0 to 1 to make this easy.) STRING (string) is the string to be parsed. Must be null terminated! Note: STRING will be modified by the routine, which will replace the delimiter characters with null bytes. FDELIM (string) is a list of one or more field delimiter characters. RDELIM (string) is a list of one or more "record" delimiter characters. (The XCALL will terminate when it hits one of these, whereas it will keep going after each field delimiter until all the FLDx parameters are used up.) Param is irrelevant if you just want to get one field. Even in the case of multiple fields, you can set it to "". Note, however, that if specified, it will be returned updated with the actual last delimiter character processed (i.e. the one that terminated the xcall). This can be very useful when there are more than one possible delimiter, or when you want to determine whether you got a complete record or just ran out of FLDx parameters. If you don't care about record delimiters, then specify it as a literal "" (in which case it can't be updated) or remember to clear it prior to each XCALL STRTOK. (Otherwise, it will get updated to match the field delimiter. The XCALL should be smart enough to ignore record delimiters that are also field delimiters, but it could nonetheless lead to confusion.) FLD1...FLDn (strings) will return the parsed fields or tokens from STRING, according to the specified delimiters. 4. (Windows) A stray cursor mark is no longer displayed when the mouse is used to set the focus on A-Shell after it had been in the background. 5. The SERIAL= line in the MIAME.INI file can now be replaced with an INCLUDE=<fspec> line, where <fspec> is the full native filespec of a file which contains SERIAL= as the first line. Note that it is still a requirement that this be the first line of the MIAME.INI. The idea of the new feature is to allow dealers to maintain a single MIAME.INI for different clients, storing the one thing that is unique, the SERIAL specification, in a separate file. 6. (Windows) Buttons and Menus can now specify "virtual keys" in a keyboard string, thus allowing a button or menu to act just like a function key. (Previously this was not possible.) The syntax to embed a "virtual key" in the keyboard string is %VK_xxx%, where the list of possible VK_xxx strings is: VK_BACK (Backspace key) VK_DECIMAL (decimal point on numeric keypad) VK_DELETE (Delete key) VK_DOWN (Down arrow) VK_END (End key) VK_HOME (Home key) VK_INSERT (Insert key) VK_LEFT (Left arrow) VK_NEXT (Next Page or Page Down key) VK_PRIOR (Prev Page or Page Up key) VK_RIGHT (Right arrow) VK_TAB (Tab key) VK_UP (Up arrow) VK_F1 (F1 key) ... (and so on for F2 thru F16) To specify SHIFT and/or CONTROL, a "^" and/or "s" can be inserted just after the underscore. For example "%VK_^sF12%" would indicate Control-Shift F12. (The s is the only lower case character used in this virtual key definition format.) Note that your string can contain more than one virtual key in addition to normal characters. For example, "%VK_sF1%ab^x%VK_HOME%" would send to your keyboard Shift-F1, followed by "ab" followed by Control-x, followed by the HOME key. 7. The maximum number of modules which can be loaded into user memory per job has been increased from 32 to 96. 8. XCALL MIAMEX,31 (Get environment variable) now returns a null string if the specified variable is not defined. Previously, it did not return anything (i.e. did not update the VALUE parameter you passed), leading to confusion in some programs. Unfortunately, this "fix" had an adverse effect on several LITs which were depending on that behavior (see next item.) 9. Several LITs had to be updated due to item 8 above. The edit numbers were not changed, but an A was added. You can also identify these by the fact that VERSYS will show QDEF[36] (rather than [35]). For convenience, they are all bundled, together with MMAP.LIT, on the web site in LIT48A.ZIP: ASTAT.LIT 2.2A(131) CHAT.LIT 2.2A(118) FORCE.LIT 1.0A(103) JSTAT.LIT 1.0A(104) KILL.LIT 2.2A(118) LOCK.LIT 1.2A(105) LOKUTL.LIT 2.2A(111) QUIT.LIT 2.2A(102) QUTL.LIT 2.2A(123) SEND.LIT 2.2A(120) SUBMIT.LIT 3.0A(133) SYSTAT.LIT 2.2A(144) ============================================================================ A-Shell Development Notes Version 4.9(852) (06 Oct 2003) ============================================================================ 1. XCALL AMOS now supports an optional 3rd parameter: a "process control" flag. The new syntax is XCALL AMOS,CMD{,QFLAG{,PFLAG}} If QFLAG is non-zero, non-blank, it causes the subroutine to run "quietly" (generally invisibly). If PFLAG is 1, it forces subroutine to run as if the AMOSRUNSBR flag had been set. If PFLAG is 2, it forces the subroutine to run as if AMOSRUNSBR had NOT been set. Any other value causes the normal AMOSRUNSBR setting as specified in the MIAME.INI file or SET.LIT command to prevail. 2. (ATS) Eliminate some garbage characters that would appear in conjunction with INMEMO displays when running under ATS. ============================================================================ A-Shell Development Notes Version 4.9(851) (05 Oct 2003) ============================================================================ 1. (UNIX) MIAME.INI now supports MMAPLIST=<fspec> to allow you to specify a list of files that should automatically be memory mapped whenever they are opened. <fspec> should be a fully qualified filespec (although it may contain environment variables using the %ENVVAR% syntax). The specified file should contain a list of AMOS-style or native filespecs, one per line, for the files you want to automatically memory map. Blank lines are ignored, and anything after a # is treated as a comment. Ersatz devices are allowed. For example: #List of files to be memory mapped c:\vm\miame\dsk0\100005\myfile.dat # native allowed MYAPP:MYDATA.DAT # ersatz allowed DSK0:MYIDX.DAT[100,5] # standard AMOS allowed The above list specifies three files to be memory mapped whenever they are opened. Note that AMOS specifications are recommended over native ones since they are not sensitive to changes in the device definitions. In the example above, the device where MYAPP: is could be redefined without having to change the MYAPP: reference in this file. But if c:\vm\miame was relocated to d:\vm\miame, you would have to remember to also edit this file to fix the native filespec. Memory mapping gives you much better file i/o throughput, at the cost of more memory usage. It works best on files that have a lot of access relative to their size (XCALL SERCH index files are a particularly good example.) There are other ways to memory map files (using ASFLAG.SBR or by loading the files directly into memory and using OPTIONS=AUTO_MEMOPEN in the MIAME.INI file. This method has the advantage of being entirely independent of your application, allowing you to tune your system or just experiment with memory mapping, without making any changes to the application itself. 2. XCALL ASFLAG,256 turns off memory mapping (overriding the MMAPLIST in the MIAME.INI) for any files subsequently opened in the current program. 3. MMAP.LIT introduced. Allows you to display the current list of files to be memory mapped (i.e. from the MMAPLIST), or to load a new list of files. Use MMAP /? to display syntax. ============================================================================ A-Shell Development Notes Version 4.9(850) (04 Oct 2003) ============================================================================ <Note that there is a gap in edit numbers from 838 to 850 to allow for future patches to the 4.8 release> 1. MSGBOX.SBX 1.0(101) now supports a HELP button in message boxes. To add a HELP button, add 16384 to the BTNFLAG argument to MSGBOX.SBX. (See XCALL Reference for other MSGBOX details.) The subroutine returns 9 if the button is clicked.