============================================================================ A-Shell Development Notes Version 5.0.1001.2 (04 Jan 2010) ============================================================================ 1. --- Increase size of command line recall buffer from 10 to 25 lines. ============================================================================ A-Shell Development Notes Version 5.0.1001.1 (18 Dec 2009) ============================================================================ 1. --- EFS enhancement: increase limit on simultaneous open encrypted streams (sequential files) per job from 30 to 200. ============================================================================ A-Shell Development Notes Version 5.0.1001.0 (12 Jul 2009) ============================================================================ 1. --- Retrofit patch 5.1.1149.3 - (following is copy of description from 5.1 ashdevnotes.txt) - Close system lockup loophole: A small window of opportunity was identified and closed, which could have led to the JOBTBL being locked by one job and left locked indefinitely. The problem was only seen (as far as we know) on large UNIX systems where A-Shell jobs were being killed off by kill -9, resulting in phantoms. (If you have to kill an A-Shell process, you should use KILL.LIT, possibly with the /K, switch, or kill -15, since any of these can be trapped by A-Shell to allow an orderly exit. kill -9 should be the absolute last result, as it may leave a mess to clean up, which in this case was opening the window of opportunity for the lockup.) In theory, the problem might have also occurred under Windows, perhaps if the Task Manager was frequently used to kill A-Shell processes, but it was never reported. ============================================================================ A-Shell Development Notes Version 5.0.1000.9 (11 Jan 2009) ============================================================================ 1. --- INMEMO bug fix: When ESC was the deciding character in a wrap decision, the ESC failing to cause the memo to exit. This was a trivial issue for interactive editing, since the user would have just hit ESC again, but was causing silent unattended memo editing operations to hang if the terminating ESC happened to occur at the point where the wrap logic needed another character before deciding how or whether to wrap the current line. ============================================================================ A-Shell Development Notes Version 5.0.1000.8 (06 Jan 2009) ============================================================================ 1. --- INMEMO bug fix: Control-E in MMO_DPG mode was leaving the internal cursor at the bottom rather than the top of the displayed page, causing it to behave oddly during vertical scrolling. ============================================================================ A-Shell Development Notes Version 5.0.1000.7 (03 Jan 2009) ============================================================================ 1. --- ISAM-A 6.11l 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 TRANS